Як передавати відео з камери Raspberry Pi і дивитися його наживо


93

Я новачок в Raspberry Pi і навіть новий в камері Raspberry Pi. Я переглянув багато навчальних посібників в Інтернеті для камери Raspberry Pi, але ще не знайшов, що дозволяє мені пряму передачу з камери Raspberry Pi, як ви можете за допомогою веб-камери (за допомогою SimpleCV або OpenCV). Сподівався, що хтось може вказати мені в правильному напрямку.


ви спробували mjpgstreamer? Shell я розміщую рішення?
jaromrax

3
Люди , які arelooking нульовою затримкою розчину слід перевірити raspberrypi.stackexchange.com/a/32521/30681
igaurav

Якщо у вас є ssh та mpv: ssh raspberrypi raspivid -o - -t 0 -fps 25 -w 640 -h 360 | mpv - --speed 2 --fps 25("--speed 2" запобігає занадто сильному відставанню).
Metamorphic

Відповіді:


81

Рішення, запропоноване Дієго, добре, за винятком того, що воно досить повільне і має величезну затримку відео, оскільки vlc там повторно передає потік програми raspvid. З 12/2013 року доступний офіційний драйвер v4l2: http://www.ics.com/blog/raspberry-pi-camera-module#.VJFhbyvF-b8 Це робить згадану повторну трансляцію застарілою. Просто завантажте модуль і використовуйте його:

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}'

Це створює http-потік у порту 12345, ви можете використовувати й інші формати, наприклад, rtcp з відповіді Дієго. Детальніше про це читайте тут: https://web.archive.org/web/20151012014829/http://www.videolan.org:80/doc/streaming-howto/uk/ch03.html


2
У цьому відповіді , він запропонував додати :demux=264до CVLC , тому що потік RAW h264 , і вам необхідно встановити демультиплексор: cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:12345}' :demux=264. Наприклад, це дозволяє дивитися потік у VLC для Android, наприклад.
Хайме М.

8
У наданому посиланні замість autoreconf -vfiвас тепер слід використовувати./bootstrap.sh
JuJoDi

1
Чи є спосіб, який дозволить мені як передавати відео, так і зберігати його на SD-картці RPi?
Або Вайнбергер

4
Посилання videolan.org/doc/streaming-howto/en/ch03.html померло.
Кал

4
Я думаю, що це може бути варто відзначити / підтвердити, що цей метод не працює в умовах без голови. Я отримую помилки, одна з яких розповідає про X11
Nick

41

Можна вибрати кілька варіантів. У своїй роботі ми використовуємо VLC для передачі відео, знятого Raspberry Pi Camera, з наших серверних кімнат в офіс. Недоліком цього є те, що є затримка близько 5 секунд, і я не знайшов рішення для цього. Далі йде наша установка:

  1. Встановіть і оновіть raspbian і переконайтеся, що ваша камера включена (увімкніть це, запустивши sudo raspi-config і оберіть Увімкнути камеру)

    sudo apt-get update
    sudo apt-get upgrade
    
  2. Встановити vlc

    sudo apt-get install vlc
    
  3. Створіть скрипт, щоб запустити потік із наступного вмісту, або запустіть команду (ви нічого не можете робити, якщо просто виконати команду).

    sudo nano myscript.sh
    raspivid -o - -t 0 -hf -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554}' :demux=h264
    
  4. Зробити сценарій зручним

    sudo chmod +x myscript.sh
    
  5. Якщо ви хочете запустити потік автоматично, вам слід додати скрипт до crontab. Щоб зробити цю роботу, мені довелося зробити ще один сценарій, запущений cron (OBS! VLC не можна запустити як sudo, тому переконайтеся, що ви в потрібному кроні). sudo nano myscript2.sh:

    #!/bin/bash
    /path/to/myscript.sh
    

    Тоді:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Щоб переглянути відеопотік, відкрийте VLC на комп’ютері в тій же мережі, що і малиновий пі, який ви використовуєте для потокового передавання. Натисніть Медіа -> Відкрити мережевий потік і вставте в поле наступне:

    rtsp://[IP].[TO].[THE].[PI]:8554/
    

Якщо ви не переймаєтесь FPS (кадрів в секунду) і не хочете затримки, ви можете використовувати MJPEG. Більше про це можна прочитати ТУТ

Дивіться ЦІ вікі про модуль камери Raspberry Pi. Сподіваюся, ви знайдете те, що шукаєте.


Будь-яка ідея, чому я отримаю наступне на VLC в Windows? Вхід неможливо відкрити: VLC не може відкрити MRL 'rtsp: //192.168.1.78: 8554'. Перевірте журнал на деталі. З боку Pi виглядає нормально - немає помилок і, здається, реагує на підключений клієнт?
monojohnny

@monojohnny Чи є малинове пі потокове? Перевірте, чи відео справді працює, підключивши екран. Якщо відео працює, ви повинні побачити потік на екрані, підключений до малинового пі.
Дієго

@monojohnny Дякую за написання Дієго ... прекрасно працює з першої спроби! monojohnny ... ти мусиш поставити задні "/" інакше vlc скаржиться. Спробуйте це: rtsp: //192.168.1.78: 8554 /
Sujay Phadke

Дякую @Diego, це спрацювало для мене чудово, але як я вийду з потоку?
Позначте

У мене така ж проблема з Windows, і я не в змозі передавати відео з мого пі. Враховуючи, що я бачу відео, що передається з камери pi на екрані, підключеному до пі, але не через VLC, встановлений на моєму Windows 10 ПК.
Мостафа

23

Я спробував кілька варіантів. Однак я знайшов найкращий результат, використовуючи той проект: RPi-Cam-Web-Interface від спільноти eLinux

потік має майже нульову затримку.

Щасти :)


4
Люди, які шукають нульову затримку, перевіряйте це напевно. Реквізит до @ user2998302. Я не можу повірити, протягом одного року це не підтверджує (не підтверджує) цього.
igaurav

Хоча це швидке та просте налаштування, програмне забезпечення далеко не оптимізоване, тому, хоча його низька затримка (немає такої речі, як нульова затримка), інтерфейс дуже балакучий і використовує кілька додаткових циклів процесора. Не проблема, якщо ви більше нічого не працюєте, але може бути, якщо ви є, особливо на Pi 1.
Нік

Це круто!
Хамза Уагад

Найшвидший потік веб-відео серед тих, що я перевірив (також рідний драйвер v4l2, що передається через vlc), майже затримка. Немає сенсу скаржитися на оптимізацію, хоча кожен ресурс в Інтернеті щодо цієї проблеми не дасть вам кращого результату, ніж це додаток.
Габбер

woah, я мушу визнати це один скелі!
Л.Трабакчин

18

Найпростіший спосіб, який я знайшов, отримати відеофільми з головної малинової пі, із камерою малинового пі.

Це рішення працює прямо з коробки, не встановлюючи додаткове програмне забезпечення на ПІ.

Про ПІ:

raspivid -t 0 -l -o tcp://0.0.0.0:3333

На комп’ютері можна передавати VLC:

vlc tcp/h264://192.168.66.154:3333

(припустимо, що IP-адреса PI є 192.168.66.154)


Ласкаво просимо до Raspberry Pi! Ми, як правило, відмовляємось копіювати ваші відповіді дослівно від одного запитання до іншого - як тільки ви досягнете 15 повторень, ви зможете позначити запитання, ідентичні як "дублікати", щоб залишилася лише одна копія вашої відповіді. Дякуємо, що поділилися вашою відповіддю на проблему!
Aurora0001

@Per Hansen Не працює для мене ... Може бути ще щось, що потрібно зробити, крім призначення порту.
Аміт Рей

Це чудово працює! Використання RPi3B + та Raspbian 9.4 (розтягнення) без голови.
dparkar

5

Я розмістив можливе рішення на малиновому форумі, використовуючи легкий сервер RTSP на базі live555, який подається з драйвером V4L2, що підтримує H264:

sudo modprobe -v bcm2835-v4l2
git clone https://github.com/mpromonet/v4l2rtspserver.git
cd v4l2rtspserver
cmake .
make install
v4l2rtspserver -H <height> -W <width> -F <fps>

Далі ви зможете отримати доступ до потоку RTSP за допомогою:

vlc rtsp://<raspberry>:8554/unicast

як щодо затримки часу?
kuhajeyan

коротше cvlc.
mpromonet

cmake поскаржився на "Не вдалося знайти ALSA (відсутнє: ALSA_LIBRARY ALSA_INCLUDE_DIR)", поки я не додав ще декілька пакунків для свого проекту. Рішення знаходиться в межах наступного: "sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev" (моєї здогадки тут може бути достатньо).
MoonCactus

о, і це працює досить добре (полегшене рішення), дякую. Час затримки пристойний, приблизно 2 секунди, це вигідно порівняно з іншими рішеннями.
MoonCactus

@MoonCactus: Я думаю, що я виправив установку ALSA (для цього потрібен лише libasound2-dev). Затримка повинна бути нижче секунди, якщо ви використовуєте vlc, ви можете зменшити буферизацію мережі, використовуючи --network-caching 300
mpromonet

4

UV4L (також) підтримує стандартний HTML5 потоковий відео та аудіо без необхідної конфігурації. Можливі й інші варіанти, наприклад, MJPEG через http.

Оновлення:

Зараз UV4L також підтримує трансляцію аудіо та відео в прямому ефірі в Jitsi Meet Rooms через Інтернет. Спеціальна конфігурація не потрібна. Це так само просто, як заповнити своє ім’я, номер та натиснути на Пуск .

2-е оновлення:

Тепер UV4L підтримує відеомашини, кодовані H264, на повному кадрі в секунду, HD та, можливо, в майбутньому Full HD.


1
Єдине, ви можете лише отримати елементарний потік, який майже все НЕ розуміє. Не дуже корисно, на жаль. Вам потрібно щось випромінювати WebRTC (що якщо у вас є Pi2 і пізнішої версії, ви можете використовувати UV4L. Якщо для цього вам потрібен (через обмеження потужності / розміру) нуль, ваш SOL.
Svartalf

3

Обидва mjpeg_streamerі, motionсхоже, мають кращу затримку, ніж cvlc.

Використання mjpg_streamer

mjpeg_streamer вимагає компіляції, але інструкції щодо github є простими.

Після компіляції його можна запустити, запустивши start.shз проекту dir, або запустивши безпосередньо (у проекті dir):

./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"

де 8090знаходиться порт TCP. Якщо не вказано, то 8080за замовчуванням буде використовуватися порт . start.shСценарій містить деякі приклади використання з додатковими опціями.

Використання motion

Рух включає системну службу, яка дозволяє легко автозапустити під час завантаження, зупинки або перезапуску.

Щоб використовувати його в режимі веб-камери IP, слід встановити наступні настройки /etc/motion/motion.conf:

daemon on
stream_localhost off
output_pictures off
ffmpeg_output_movies off
stream_maxrate 24
framerate 24
width 640
height 480

Далі в /etc/default/motionкомплекті:

start_motion_daemon=yes

Щоб сервіс автозапустився під час завантаження:

systemctl enable motion

Використовуйте systemctl start/stop/restart motionдля відповідної дії.

Порт потокового потоку за замовчуванням є 8081. Порт встановлений stream_portв /etc/motion/motion.conf.


1

Я не знаю, чи шукаєте ви програмне забезпечення для спостереження, але мені вдалося встановити та запустити motionдетектор руху програмного забезпечення. Ви повинні подивитися в офіційному посібнику .


Рух стосується лише USB-камер
geneorama

3
@geneorama motion використовує відео4linux інтерфейс, який не обмежений USB-камерою, модуль bcm2835-v4l2 надає доступ до плати камери через цей інтерфейс.
mpromonet

1

Мені вдалося передавати відео за допомогою uv4l WebRTC на Raspberry Pi 2. Це дуже просто. Просто дотримуйтесь цього підручника. Я сподіваюся, що це допоможе.


Будь ласка, включіть сюди відповідні частини підручника, щоб запобігти гниттю посилань.
Бекс

Застосовується лише на Pi2 та вище. Не працює з нулем 1A / 1A + /. Не повністю впевнений, чому він не може, оскільки люди, здається, не в змозі це зробити, але так ...
Свартальф

1

У мене виникли проблеми з отриманням відеопотоку в Windows 7. Було багато рішень Linux, але я не могла їх тиражувати на Windows досі. Зрештою, я отримав досить швидке рішення:

  1. отримати версію Windows для netcat: http://joncraton.org/files/nc111nt.zip , розпакуйте її та додайте до шляху
  2. отримати нову версію mpc-hc, яку можна прочитати зі stdin: https://mpc-hc.org/downloads/ install та додати також її шлях до шляху (мій 64-розрядний, але 32-бітний, сподіваємось, це зробити так само)

На малиновому пі:

raspivid -t 0 -w 1024 -h 768 -fps 20 -b 1000000 -o - | nc your.receiver.ip.address 5001

На машині Windows:

nc -l -p 5001 | mpc-hc64 -

Таким чином, я вважаю, ніщо не буде перекомплектоване чи перероблене, повторне введення в дію або що інше. Двійковий потік з raspvid подається в mpc і показується. Моя малина працює через wifi, тому спочатку я отримую досить затримку, яка за півхвилини зменшується до тих 0,2-0,3 секунди затримки.

На жаль, я не міг використовувати vlc таким же чином, як nc -l -p 5001 | vlc -тільки відкриває вікно vlc без жодного відео.


1

Я використовував Nginx з підтримкою RTMP для передачі потоку у світ разом з avconv для обробки входу камери. Код доступний на Github .


Хороший, ви поділитесь з приводу будь-якого досвіду затримки відео?
kuhajeyan

2
Так, було відставання приблизно на 5 секунд.
TTT

0

Хоча код Пітера Хансена цілком можливо працює в локальній мережі, для повноти: TCP стосується цілісності даних, а не в режимі реального часу. У потоці реального часу деякі втрати даних можуть бути прийнятними заради своєчасного відображення. У цьому випадку UDP може бути кращим. Я не перевіряв цей код.

Якщо це камера безпеки, може розглядатися багатоадресна передача даних. Сучасні маршрутизатори можуть це робити навіть за 100 доларів.


0

Я встановив рішення ONVIF з https://github.com/BreeeZe/rpos на моєму пі, дотримуючись вказівок на README.md .

Різниця лише в тому, що я встановив node v8.4.0. Це дозволяє мені бачити вихід своєї камери в NVR, підключеному в одній мережі. Також камеру можна безпосередньо відтворювати через мережевий потік плеєра VLC за допомогою адресиrtsp://192.168.1.3:8554/h264


0

Деякий час з подібною проблемою виникла така проблема:

https://www.npmjs.com/package/ws-avc-player

Це більше босоніж, ніж інші пропоновані рішення, але я думаю, що він працює добре, якщо пріоритет є низькою затримкою в Інтернеті.

Працює в більшості браузерів (навіть мобільних при 480p) без будь-яких плагінів.


Я не писав сам декодер, його окремий проект github.com/mbebenita/Broadway Однак на диво добре оптимізований, і, як я вже сказав у відповіді, він може легко обробляти 480p на дроїді. Причина, по якій я пішов з Brodway, полягає в тому, що на rpi немає апаратного кодера vp8 / 9, тому h264 - це справді єдиний пристойний варіант. Але якщо ви хочете використовувати в браузері натурний декодер h264, ви можете забути низьку затримку.
MatijaG

Це звучить так неймовірно, що я мушу спробувати.
kwasmich

Будь-який відгук буде дуже вітається :)
MatijaG

Тільки зараз у мене було трохи вільного часу. У мене виникають проблеми з отриманням прикладу для запуску з raspividканалу камери. З ffmpegіншого боку, я лише отримую десяту частину кадрів в секунду. Я використовував чистий Raspbian і Pi Zero. У вас є якісь підказки для мене?
kwasmich

Так, з ffmpeg буде бездоглядною відсутністю апаратного прискорення. Спробуйте запустити приклад із: node example/index.js raspividЯкщо у вас виникнуть проблеми, це має спрацювати, спробуйте запустити просто node example/index.jsта окремо, /opt/vc/bin/raspivid -pf baseline -ih -t 0 -w 640 -h 480 -hf -fps 15 -g 30 -o - | nc localhost 5000і подивіться, чи є помилки від raspivid
MatijaG
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.