Как транслировать видео с камеры Raspberry Pi и смотреть его вживую
Я новичок в Raspberry Pi и даже новичок в малиновой Pi-камере. Я видел много обучающих программ в Интернете для камеры Малины Pi, но еще не нашел, что позволяет мне транслировать прямо из камеры Raspberry Pi, как вы можете, с помощью веб-камеры (используя SimpleCV или OpenCV). Надеюсь, кто-то может указать мне в правильном направлении.
14 ответов
Решение, предложенное Диего, хорошо, за исключением того, что оно довольно медленное и имеет огромную задержку видео, так как 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/en/ch03.html
Существует несколько вариантов выбора. В моей работе мы используем VLC для потокового видео, снятого Малиновой Pi-камерой из наших серверных комнат в офис. Один из недостатков этого заключается в том, что есть задержка в 5 секунд, и я не нашел для этого решения. Ниже приведена наша настройка:
-
Установите и обновите raspbian и убедитесь, что ваша камера включена (вы активируете это, запустив sudo raspi-config и выберите Enable Camera)
sudo apt-get update sudo apt-get upgrade
-
Установить vlc
sudo apt-get install vlc
-
Создайте сценарий для запуска потока со следующим контентом или запустите команду (вы не можете ничего сделать, если вы просто запустите команду).
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
-
Сделать скрипт runable
sudo chmod +x myscript.sh
-
Если вы хотите запустить поток автоматически, вы должны добавить скрипт к crontab. Чтобы выполнить эту работу, мне пришлось сделать еще один скрипт, запущенный cron (OBS! VLC не может быть запущен как sudo, поэтому убедитесь, что вы находитесь в правом cron).
sudo nano myscript2.sh
:#!/bin/bash /path/to/myscript.sh
Тогда:
sudo chmod +x myscript2.sh crontab -e @reboot /path/to/myscript2.sh
-
Чтобы посмотреть видеопоток, откройте VLC на компьютере в той же сети, что и малина pi, которую вы используете для потоковой передачи. Пресс-медиа -> Откройте Networkstream и вставьте следующее в поле:
rtsp://[IP].[TO].[THE].[PI]:8554/
Если вы не заботитесь о FPS (кадры в секунду) и не хотите никакой задержки, вы можете использовать MJPEG. Вы можете узнать больше об этом ЗДЕСЬ
Смотрите ЭТО wiki о модуле камеры малины Pi. Надеюсь, вы найдете то, что ищете.
Я попробовал некоторые варианты. Однако я нашел лучший результат, используя этот проект: RPi-Cam-Web-интерфейс из сообщества eLinux
поток имеет почти нулевую задержку.
удачи:)
Самый простой способ, который я нашел, - получить живой видеоролик из безглазной малины pi с малиновой пи-камерой.
Это решение работает прямо из коробки, без установки дополнительного программного обеспечения на PI.
В PI:
raspivid -t 0 -l -o tcp://0.0.0.0:3333
На компьютере можно передавать с помощью VLC:
vlc tcp/h264://192.168.66.154:3333
(предполагается, что 192.168.66.154 - IP-адрес PI)
Я разместил возможное решение в форум малины , используя легкий сервер 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
UV4L (также) поддерживает стандартное видео и аудио потоковую передачу HTML5 без необходимости настройки. Возможны и другие варианты, такие как MJPEG через http.
Update:
UV4L теперь также поддерживает живое аудио & амп; видео трансляция в Jitsi Meet Rooms через Интернет. Специальная настройка не требуется. Это так же просто, как заполнить свое имя, комнату и щелкнуть по Пуск .
Второе обновление:
UV4L теперь поддерживает также аппаратное кодирование с поддержкой H264, с полным fps, HD и, возможно, Full HD в будущем.
Я не знаю, ищете ли вы программное обеспечение для наблюдения, но мне удалось установить и запустить motion
, программный детектор движения. Вы должны посмотреть в официальном руководстве .
У меня возникли проблемы с получением видеопотока на окнах 7. Было много решений linux, но я не мог реплицировать их в окнах до сих пор. В конце концов, я получил довольно быстрое решение:
- получить версию netcat для Windows: http://joncraton.org/files/nc111nt.zip, разархивируйте его и добавьте в путь
- получить новую версию mpc-hc, которая может быть прочитана из stdin: https: //mpc-hc. org /downloads / и добавить свой путь к пути (мой 64-разрядный, но 32-разрядный, как мы надеемся, также сделает).
На малине pi:
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 -
Таким образом, я считаю, что ничто не переупаковывается или не перегорает, не ремусируется или что-то такое. Двоичный поток из rvvvid подается в mpc и показан. Моя малина работает по Wi-Fi, поэтому сначала я получаю справедливую задержку, которая в течение половины минуты сокращается до задержки 0,2-0,3 секунды.
К сожалению, я не мог использовать vlc таким же образом, как nc -l -p 5001 | vlc -
просто открывает окно vlc без какого-либо видео.
Оба mjpeg_streamer
и motion
, похоже, имеет лучшую задержку, чем cvlc.
Использование mjpg_streamer
mjpeg_streamer
требует компиляции, но инструкции в github просты.
После компиляции его можно запустить, запустив start.sh
из dir проекта или непосредственно запустив (в директории проекта):
./mjpg_streamer -i "./input_uvc.so -rot 180" -o "./output_http.so -w ./www -p 8090"
где 8090
- это порт TCP. Если не указано, то по умолчанию используется порт 8080
. Скрипт start.sh
содержит некоторые примеры использования с дополнительными параметрами.
Использование motion
Motion включает службу systemd, которая упрощает автозапуск при загрузке, остановке или перезапуске.
Чтобы использовать его в режиме веб-камеры 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
.
В то время как код Петра Хансена, возможно, отлично работает в локальной сети, для полноты: TCP - это целостность данных по сравнению с реальным временем. В режиме реального времени некоторые потери данных могут быть приемлемыми для своевременного отображения. В этом случае UDP может быть лучше. Я не тестировал этот код.
Если это камера безопасности, может быть рассмотрена многоадресная рассылка. Современные маршрутизаторы могут сделать это даже на $ 100.
Я установил решение ONVIF из https://github.com/BreeeZe/rpos на моем пие, следуя инструкциям на README.md .
Единственное различие заключается в том, что я установил node v8.4.0
. Это позволяет мне видеть вывод моей камеры в NVR, подключенном к одной сети. Кроме того, камеру можно напрямую воспроизводить через сетевой поток проигрывателя VLC, используя адрес rtsp://192.168.1.3:8554/h264
В то время как у go возникла аналогичная проблема, это:
https://www.npmjs.com/package/ws-avc-player
Это больше, чем другие предлагаемые решения, но я думаю, что это хорошо работает, если приоритетом является низкая латентность по сети.
Работает на большинстве браузеров (даже на мобильных устройствах 480p) без каких-либо плагинов, необходимых в браузере.