Использование IP-камеры с webRTC
Я хочу использовать IP-камеру с webrtc. Однако webrtc, похоже, поддерживает только веб-камеры. Поэтому я пытаюсь преобразовать поток IP-камеры в виртуальную веб-камеру.
Я нашел программное обеспечение как IP-адаптер камеры, но они не работают (2-3 кадра в секунду и задержка 2 секунды) и они работают только на Windows, я предпочитаю использовать Linux (если возможно).
Я пытаюсь ffmpeg/avconv:
-
во-первых, я создал виртуальное устройство с v4l2loopback (команда: sudo modprobe v4l2loopback
). Виртуальное устройство обнаружено и может быть передано с видео (.avi) с помощью команды: ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1
-
поток с IP-камеры доступен с помощью rtsp://IP/play2.sdp
для камеры Dlink DCS-5222L. Этот поток может быть захвачен ffmpeg.
Моя проблема заключается в том, чтобы установить связь между этими двумя шагами (получить поток rstp и записать его на виртуальную веб-камеру). Я пробовал ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0
, но есть ошибка с v4l2 (v4l2 не найден).
Есть ли идеи, как использовать IP-камеру с webRTC?
Ответы
Ответ 1
Короткий ответ: нет. RTSP
не упоминается в стандарте IETF для WebRTC, и ни один браузер в настоящее время не планирует его поддерживать. Ссылка на обсуждение в Chrome.
Более долгий ответ заключается в том, что если вы действительно проданы по этой идее, вам придется построить шлюз/прерыватель webrtc, используя собственный API WebRTC.
- Запустите сеанс WebRTC между браузером и вашим выключателем.
- Возьмите канал IP-камеры с помощью шлюза/прерывателя.
- Зашифруйте и протолкните поток rtp на ваш сеанс WebRTC из потока RTSP, собранного прерывителем через API WebRTC.
Вот как это сделали другие и как это будет необходимо.
ОБНОВЛЕНИЕ 7/30/2014:
Я экспериментировал с janus-gateway, и я считаю, что потоковый плагин делает ТОЧНО это, поскольку он может захватить поток rtp и нажать его на peer webrtc. Для RTSP вы, вероятно, можете создать клиент RTSP (возможно, используя библиотеку, такую как gstreamer), затем нажмите RTP и RTCP из соединения с одноранговым узлом WebRTC.
Ответ 2
Я создал простой пример преобразования RTSP или HTTP-видео в поток WebRTC. Этот пример основан на Kurento Media Server (KMS) и требует, чтобы он был установлен для примера для работы.
Установите KMS и наслаждайтесь...
https://github.com/lulop-k/kurento-rtsp2webrtc
ОБНОВЛЕНИЕ 22-09-2015.
Проверьте этот пост для технического объяснения того, почему перекодирование является лишь частью решения этой проблемы.
Ответ 3
Janus-gateway недавно добавила простую поддержку RTSP (на основе libcurl) для своих потоковых плагинов, так как это commit
Затем можно настроить шлюз для согласования RTSP с камерой и ретрансляции RTP, считая, что добавление WebRTC в конфигурации плагинов плагинов <prefix>/etc/janus/janus.plugin.streaming.cfg
[camera]
type = rtsp
id = 99
description = Dlink DCS-5222L camera
audio = no
video = yes
url=rtsp://192.168.1.16/play2.sdp
Затем вы сможете получить доступ к потоку WebRTC с помощью демонстрационной страницы потоковой передачи http://..../demos/streamingtest.html
Ответ 4
Если у вас установлено видео4linux, следующая команда создаст виртуальную веб-камеру из потока rtsp:
gst-launch rtspsrc location=rtsp://192.168.2.18/play.spd ! decodebin ! v4l2sink device=/dev/video1
Вы были на правильном пути, "decodebin" - это недостающее звено.
Ответ 5
Для тех, кто хотел бы испачкать свои руки каким-нибудь нативным WebRTC, читайте дальше...
Вы можете попробовать передать поток RTSP IP-камер через простую оболочку ffmpeg-webrtc: https://github.com/TekuConcept/WebRTCExamples.
Он использует абстрактные классы VideoCaptureModule и AudioDeviceModule для добавления необработанных носителей. Внутри эти абстрактные классы расширены для всех аппаратно-зависимых платформ, таких как video4linux или alsa-audio.
Оболочка использует инструменты CLI ffmpeg, но я не думаю, что использовать сами библиотеки C ffmpeg слишком сложно. (Оболочка полагается на транскодирование или декодирование исходного носителя, а затем позволяет WebRTC перекодировать в соответствии с требованиями к соединениям ICE. По-прежнему отрабатывать предварительно закодированный перенос данных.)