Как транслировать видео с камеры Raspberry Pi и смотреть его вживую

93

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

BuddingEngineer
источник
ты пробовал mjpgstreamer? Shell я выложу решение?
Jaromrax
3
Люди, которые ищут решение с нулевой задержкой, должны проверить 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» не дает ему слишком сильно отставать).
Метаморфизм

Ответы:

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/en/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 и выбрав Enable Camera)

    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, поэтому убедитесь, что вы находитесь в правильном cron). sudo nano myscript2.sh:

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

    Затем:

    sudo chmod +x myscript2.sh
    crontab -e
    @reboot /path/to/myscript2.sh
    
  6. Для просмотра видеопотока откройте VLC на компьютере в той же сети, что и raspberry pi, который вы используете для потоковой передачи. Нажмите Media -> Open Networkstream и вставьте в поле следующее:

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

Если вы не заботитесь о FPS (кадрах в секунду) и не хотите задержек, вы можете использовать MJPEG. Вы можете прочитать больше об этом ЗДЕСЬ

Посмотрите ЭТУ вики о Raspberry Pi Camera Module. Надеюсь, вы найдете то, что ищете.

Диего
источник
Любая идея, почему я получу следующее на VLC на Windows? Ваш вход не может быть открыт: VLC не может открыть MRL 'rtsp: //192.168.1.78: 8554'. Проверьте журнал для деталей. Пи-сторона вроде бы в порядке - ошибок нет и похоже реагирует на подключенного клиента?
monojohnny
@monojohnny Поток малинового пи? Проверьте, действительно ли видео работает, подключив экран. Если видео работает, вы должны увидеть поток на экране, подключенный к Raspberry Pi.
Диего
@monojohnny Спасибо за рецензию, Диего ... отлично работает с первой попытки! monojohnny ... Вы должны поставить завершающий символ "/", иначе vlc жалуется. Попробуйте это: rtsp: //192.168.1.78: 8554 /
Суджай Пхадке
Спасибо @Diego, это отлично сработало для меня, но как мне выйти из потока?
Denoteone
У меня такая же проблема на Windows, и я не могу передавать видео с моего пи. учитывая, что я вижу потоковое видео с пи-камеры на экране, подключенном к пи, но не через VLC, установленный на моем windows 10 pc.
Мостафа
23

Я попробовал несколько вариантов. Тем не менее, я нашел лучший результат при использовании этого проекта: RPi-Cam-Web-Interface от сообщества eLinux

поток имеет почти нулевую задержку.

удачи :)

user2998302
источник
4
Люди, которые ищут нулевую задержку, проверьте это наверняка. Реквизит @ user2998302. Я не могу поверить, в течение одного года это не возражений (признание) по этому.
игурав
Несмотря на то, что это быстрая и простая установка, программное обеспечение далеко не оптимизировано, поэтому, несмотря на низкую задержку (нет такой вещи, как нулевая задержка), интерфейс очень болтлив и использует некоторые дополнительные циклы ЦП. Не проблема, если вы больше ничего не запускаете, но, возможно, так и есть, особенно на Pi 1.
Ник
Это круто!
Хамза Уагад
Самая быстрая веб-трансляция видео из тех, что я тестировал (также собственный драйвер v4l2, передаваемый через vlc), почти нулевая задержка. Нет смысла жаловаться на оптимизацию, в то время как каждый ресурс в Интернете об этой проблеме не даст вам лучшего результата, чем это приложение.
Габбер
Ого, я должен признать, что это потрясающе!
Л.Трабачин
18

Самый простой способ, который я нашел, - это получить прямую видео-трансляцию с малинового пи без головы с камерой малинового пи.

Это решение работает прямо из коробки, без установки дополнительного программного обеспечения на 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)

Пер Хансен
источник
Добро пожаловать в 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
mpromonet
источник
что насчет временного отставания?
Кухаджян
короче чем cvlc.
mpromonet
cmake жаловался на «Не удалось найти ALSA (отсутствует: ALSA_LIBRARY ALSA_INCLUDE_DIR)», пока я не добавил еще несколько пакетов для своего проекта. Решение заключается в следующем: «sudo apt-get install libopus-dev libexpat1-dev libasound2-dev libudev-dev libavahi-client-dev» (я думаю, здесь вполне достаточно asound).
MoonCactus
о, и это работает довольно хорошо (облегченное решение), спасибо. Задержка времени приличная, около 2 секунд, если сравнивать с другими решениями imho.
Лунный Кактус
@MoonCactus: я думаю, что я исправил установку ALSA (для этого требуется только libasound2-dev). Задержка должна быть ниже секунды, если вы используете vlc, вы можете уменьшить сетевую буферизацию, используя --network-caching 300
mpromonet
4

UV4L (также) поддерживает стандартную потоковую передачу видео и аудио в формате HTML5 без настройки. Возможны и другие варианты, такие как MJPEG через http.

Обновить:

UV4L теперь также поддерживает трансляцию аудио & видео вещания на Jitsi Meet номер через Интернет. Никаких специальных настроек не требуется. Это так же просто, как заполнить свое имя, номер комнаты и нажать кнопку « Пуск» .

2-е обновление:

UV4L теперь также поддерживает видео с аппаратным кодированием H264, с частотой кадров в секунду, HD и, возможно, Full HD в будущем.

prinxis
источник
1
Единственное, вы можете получить только элементный поток, который почти все НЕ ПОНИМАЕТ. Не очень полезно, к сожалению. Вам нужно что-то для излучения WebRTC (что, если у вас есть Pi2 и более поздние версии, вы можете использовать с UV4L. Если для этого вам нужен (из-за ограничения по мощности / размеру) ноль, то ваш SOL.
Svartalf
3

Оба mjpeg_streamerи, motionкажется, имеют лучшую задержку, чем cvlc.

С помощью mjpg_streamer

mjpeg_streamer требует компиляции, но инструкции на github просты.

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

./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.

ccpizza
источник
1

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

Морган Курбе
источник
Движение распространяется только на USB-камеры
Geneorama
3
@geneorama motion использует интерфейс video4linux, который не ограничивается камерой USB, модуль bcm2835-v4l2 предоставляет доступ к плате камеры через этот интерфейс.
mpromonet
1

Мне удалось потоковое видео с помощью uv4l WebRTC на Raspberry Pi 2. Это очень просто. Просто следуйте этому уроку. Я надеюсь, что это поможет.

bdsys
источник
Пожалуйста, включите соответствующие части руководства здесь, чтобы предотвратить гниение ссылок.
Бекс
Применимо только на Pi2 и выше. Не работает с 1A / 1A + / Zero. Не совсем уверен, почему он не может, так как люди, кажется, могут это сделать, но эй ...
Svartalf
1

У меня были проблемы с получением видеопотока на Windows 7. Было много Linux-решений, но я не мог воспроизвести их на Windows до сих пор. Я получил довольно быстрое решение в конце концов:

  1. получите версию netcat для Windows: 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 и показывается. Моя малина работает по Wi-Fi, поэтому сначала я получаю справедливую задержку, которая за полминуты уменьшается до этой задержки 0,2-0,3 секунды.

К сожалению, я не мог использовать vlc таким же образом, так как nc -l -p 5001 | vlc -просто открывает окно vlc без видео.

Григорий Макеев
источник
1

Я использовал Nginx с поддержкой RTMP для потоковой передачи по всему миру, а также avconv для обработки ввода с камеры. Код доступен на Github .

ТТТ
источник
Хорошо, не могли бы вы рассказать о каком-либо опыте с видео?
Кухаджян
2
Да, задержка составляла около 5 секунд.
TTT
0

Хотя код Питера Хансена вполне может нормально работать в локальной сети, для полноты картины: TCP - это целостность данных в отличие от реального времени. В потоке в реальном времени некоторая потеря данных может быть приемлемой для своевременного отображения. В этом случае UDP может быть лучше. Я не проверял этот код.

Если это камера безопасности, может быть рассмотрено многоадресное вещание. Современные роутеры могут сделать это даже за 100 долларов.

Билл
источник
0

Я установил решение ONVIF с https://github.com/BreeeZe/rpos на свой pi, следуя инструкциям на README.md .

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

Кришна
источник
0

Некоторое время назад у go была похожая проблема:

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

Это более скромное решение, чем у других предлагаемых решений, но я думаю, что оно будет работать хорошо, если приоритетом будет низкая задержка в сети.

Работает на большинстве браузеров (даже мобильных на 480p) без каких-либо плагинов, необходимых для браузера.

MatijaG
источник
Я не писал сам декодер, это отдельный проект github.com/mbebenita/Broadway Однако он на удивление хорошо оптимизирован, и, как я сказал в ответе, он может легко обрабатывать 480p на дроиде. Причина, по которой я пошел с Brodway, заключается в том, что на rpi нет аппаратного кодировщика vp8 / 9, поэтому h264 - действительно единственный достойный вариант. Но если вы хотите использовать встроенный декодер h264 в браузере, вы можете забыть о низкой задержке.
MatijaG
Это звучит так невероятно, что я должен попробовать.
Квасмич
Любая обратная связь будет очень кстати :)
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