linux ffmpeg webrtc ip-camera

linux - Use una cámara IP con webRTC



ffmpeg ip-camera (4)

Quiero usar una cámara IP con webrtc. Sin embargo, webrtc parece ser compatible solo con cámaras web. Así que trato de convertir la transmisión de la cámara IP a una cámara web virtual.

Encontré un software como el Adaptador de cámara IP , pero no funcionan bien (2-3 fotogramas por segundo y una demora de 2 segundos) y funcionan solo en Windows, prefiero usar Linux (si es posible).

Intento ffmpeg / avconv:

  • en primer lugar, creé un dispositivo virtual con v4l2loopback (el comando era: sudo modprobe v4l2loopback ). El dispositivo virtual se detecta y se puede alimentar con un video (.avi) con un comando como: ffmpeg -re -i testsrc.avi -f v4l2 /dev/video1

  • la transmisión desde la cámara IP está disponible con: rtsp://IP/play2.sdp para una cámara Dlink DCS-5222L. Esta secuencia puede ser capturada por ffmpeg.

Mi problema es hacer el enlace entre estos dos pasos (recibir la transmisión rstp y escribirla en la cámara web virtual). Intenté ffmpeg -re -i rtsp://192.168.1.16/play2.sdp -f video4linux2 -input_format mjpeg -i /dev/video0 pero hay un error con v4l2 (v4l2 no encontrado).

¿Alguien tiene una idea de cómo usar una cámara IP con webRTC?


He creado un ejemplo simple que transforma una alimentación de video RTSP o HTTP en una transmisión WebRTC. Este ejemplo se basa en Kurento Media Server (KMS) y requiere tenerlo instalado para que el ejemplo funcione.

Instala KMS y disfruta ...

https://github.com/lulop-k/kurento-rtsp2webrtc

ACTUALIZACIÓN 22-09-2015. Consulte esta publicación para obtener una explicación técnica sobre por qué la transcodificación es solo parte de la solución a este problema.


La respuesta corta es, no. RTSP no se menciona en el estándar IETF para WebRTC y actualmente ningún navegador tiene planes para admitirlo. Enlace a la discusión de Chrome .

Una respuesta más larga es que si está realmente agotado con esta idea, tendrá que construir un gateway / breaker de webrtc utilizando la API nativa de WebRTC .

  1. Inicie una sesión WebRTC entre su navegador y su interruptor
  2. Capture la alimentación de la cámara IP con su puerta de enlace / disyuntor
  3. Encripte y presione el flujo rtp a su sesión WebRTC desde su flujo RTSP recopilado por el interruptor a través de la API WebRTC.

Así es como otros lo han hecho y cómo tendrá que hacerse.

ACTUALIZACIÓN 30/07/2014:

He experimentado con el janus-gateway y creo que el plugin de transmisión hace EXACTAMENTE esto ya que puede tomar un flujo rtp y enviarlo a un par de webrtc. Para RTSP, probablemente pueda crear un cliente RTSP (posiblemente usando una biblioteca como gstreamer ), luego presione el RTP y el RTCP desde la conexión al par WebRTC.


Si tiene video4linux instalado, el siguiente comando creará una cámara web virtual a partir de una transmisión rtsp:

gst-launch rtspsrc location=rtsp://192.168.2.18/play.spd ! decodebin ! v4l2sink device=/dev/video1

Estabas en el camino correcto, el "decodificador" era el eslabón perdido.


Janus-gateway recientemente agregó un soporte RTSP simple (basado en libcurl) a sus plugins de transmisión ya que este compromiso

Luego es posible configurar la puerta de enlace para negociar RTSP con la cámara y retransmitir el pensamiento de RTP que WebRTC agrega en la configuración de plugins de transmisión <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

A continuación, podrá acceder a la transmisión WebRTC utilizando la página de demostración de transmisión en tiempo real http: //..../demos/streamingtest.html