У меня есть Raspberry Pi и Pi Cam v2, подключенные к Wi-Fi. Я пытаюсь транслировать поток с камеры на ноутбук по Wi-Fi, а затем сделать так, чтобы поток выглядел так, как будто это аппаратная камера на ноутбуке. Я хочу сделать это, чтобы добавить его в какое-то другое программное обеспечение, которому требуется аппаратная камера (нельзя переписать это программное обеспечение, просто придется обойти это).
Я использую Ubuntu 18.04 на ноутбуке. Согласно моим исследованиям, это должно быть вполне возможно с использованием некоторой комбинации ffmpeg и vfl2loopback. Я начал с установки этой библиотеки для потоковой передачи камеры на веб-сервер:https://github.com/silvanmelchior/RPi_Cam_Web_InterfaceЭто работает, и я могу получить доступ к потоку с камеры в своем браузере по адресуhttp://10.0.0.47/httpЯ настроил его без имени пользователя/пароля для простоты. Я думаю, что порт камеры 80, основываясь на выводе nmap.
Сейчас я пытаюсь перенаправить поток на моем ноутбуке Ubuntu. На основе моих исследований и экспериментов эта команда является наиболее близкой к тому, что я получил:
ffmpeg -re -ihttp://10.0.0.47/html-map 0:v -f v4l2 /dev/video0
(или то же самое с портом 80 вместо /html, не уверен, имеет ли это значение): ffmpeg -re -ihttp://10.0.0.47:80-map 0:v -f v4l2 dev/video0
Сначала это работает, но затем возникает следующая ошибка:
http://10.0.0.47:80: При обработке входных данных обнаружены неверные данные
Погуглив, это может быть связано с неправильным типом потока, выходящего из интерфейса rpi_cam_web, но я не уверен, так ли это, и если да, то как это исправить. Я также исследовал html-код страницы, которая обращается к веб-серверу, и я вижу, что он отправляет серию jpg-файлов, которые постоянно меняются с временными метками в имени файла. Так что, возможно, это проблема, но, опять же, не уверен.
Есть идеи? Помощь была бы очень кстати.
Редактировать: Я попробовал другой метод, который, кажется, немного продвинулся, но все еще сталкиваюсь с проблемами:
(на pi): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000//:demux=h264
-->это запускает поток, который я могу успешно просмотреть в медиаплеере VLC
(затем на хост-системе): gst-launch-1.0 -v rtspsrc location=rtsp://10.0.0.47:8000/ ! v4l2sink device=/dev/video4
Я пробовал разные устройства, например /dev/video0, /dev/video1 и т. д. Все они выдают сообщение «/dev/videoX» не является выходным устройством», за исключением video4, которое сначала работает, но затем выдает ошибку:
ОШИБКА: из элемента /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: Внутренняя ошибка потока данных. Дополнительная отладочная информация: gstbasesrc.c(3072): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: потоковая передача остановлена, причина не связана (-1) Выполнение завершено после 0:00:00.082360368
Есть идеи, что там может быть не так?
Еще раз спасибо!
Редактировать 2:
Возможно, это заработает с помощью следующей последовательности команд:
(на pi): raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000//):demux=h264
(на хост-компьютере): ffmpeg -f h264 -i tcp://10.0.0.47:8000/ -f v4l2 -pix_fmt yuv420p /dev/video0
Это не выдает никаких ошибок, но я не уверен на 100%, что это работает, потому что я пока не смог загрузить поток в программное обеспечение, в которое я пытаюсь загрузить камеру. Я попробовал протестировать его с помощью этого веб-инструмента:
и инструмент позволяет мне выбрать "Dummy Video Device 0x0000", что, я почти уверен, и есть то, что нужно, но затем он говорит мне "видеоустройство не обнаружено", не может найти ни одной камеры в своем тестировании, а затем то же самое Dummy Video Device не отображается как опция при последующих перезагрузках страницы. Так что я думаю, что что-то не так с тем, как я передаю поток
решение1
На этом сайте показано, как транслировать RPi в OBS: https://www.instructables.com/Webcam-Over-WiFi-for-OBS/
Затем вы можете использовать OBS Virtual Camera для имитации аппаратной камеры.
(Лично я использую OBS Virtual Camera, но не использовал ее с RPi.)
В качестве альтернативы вы можете попробовать это: https://www.tomshardware.com/uk/how-to/use-raspberry-pi-as-pc-webcam