Использование 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. По-прежнему отрабатывать предварительно закодированный перенос данных.)