Tengo una cámara web logitech C920. Tiene la capacidad de codificar directamente el video en H264.
Quiero reproducir lo que se hizo con un Beaglebone, pero usando un Raspberry Pi: envíe un flujo H264 a la red . El Raspberry Pi solo está aquí para empaquetar la transmisión en RTP, la compresión de video se realiza mediante la cámara web. El modo H264 se aplica mediante video4linux.
Hasta ahora, y si uso una computadora común con la última versión de Ubuntu, funciona usando VLC como servidor o GStreamer. Por ejemplo, si inicio en Raspberry Pi un servidor VLC usando el comando:
cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'
... y luego, si leo la transmisión con VLC en otra computadora, todo está bien.
Sin embargo, si uso la Raspberry Pi para enviar la transmisión de video, el resultado es bastante pobre. Mucha basura en la imagen tan pronto como algo se mueve. Las claves de imagen se reciben bien cada 10 segundos, pero mientras tanto, no es lo suficientemente bueno en comparación con la transmisión desde una computadora común.
También probé el método descrito para el beaglebone con la "captura" proporcionada utilidad de : está bien si transmito desde una computadora real, el mismo problema de basura si transmito desde una Raspberry Pi.
No es un problema de red: hice algunas comprobaciones de red con Wireshark y las estadísticas de VLC, no tengo pérdida de paquetes. Intenté con Raspbian y Arch Linux para Raspi (gstreamer 0.10 en raspbian, gstreamer 1.0 en Arch Linux).
No sé si es relevante o no, pero también probé con la versión de soporte de flotación suave de Raspbian. Primero se debe realizar una actualización para usar un kernel 3.2; pero el mismo problema, el video tiene algo de basura.
¿Alguna idea de lo que podría hacer para mejorar la calidad del video?
fuente
Respuestas:
Tuve el mismo problema, encontré este hilo al buscar un codificador de hardware, no por problemas con el c920.
Sin embargo, ejecute una actualización de firmware para la frambuesa pi y la basura debería desaparecer
$> sudo rpi-update
Yo mismo encontré la solución aquí: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi
fuente
Puedes probar y usar FFMPEG. Pero el problema no es utilizar la versión de repositorios porque está desactualizada. Hay una versión bifurcada que funciona muy bien.
Tendrá que compilarlo, lo que demora aproximadamente 5 horas o descargar un binario precompilado.
Luego puede canalizar los datos del controlador V4L a FFMPEG con esta configuración. Donde
-i "fifo"
debería estar solo-i
para caputre la transmisión canalizada y-f
deberá verificar dos veces cómo generar H264. el FLV lo vuelve a empaquetar en FLV que se puede jugar con reproductores HTML.o un ejemplo que encontré que apunta directamente a V4L pero oyu tiene que tener la cámara presente en
/dev/video*
donde * es1
o más ...el
-f
denota el formato de salida en. No significa que vaya a transcodificarlo como H264 a FLV sólo se pone envuelto en el formato FLV. luego cambie la dirección al reproductor VLC de su cliente. por ejemplo-f mpegts udp:192.168.1.19:1234
VLC no parece funcionar demasiado bien en Pi. Tuve muy poco éxito empujando el módulo Pi cmaera a mi PC usando UDP. Funcionó pero no era estable.
También puede mirar instalar nginx con el módulo rtmp que funciona de maravilla. Mire esta guía pero necesitará modificar un poco la configuración. Luego, conecta su reproductor VLC a la transmisión nginx-rtmp y funcionará de maravilla.
fuente
Esto parece funcionar para mí @ menos ...
cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy
fuente
Pruebe con un búfer más grande en el cliente que muestra el video. Para mí hay una diferencia dramática entre el buffer de 1000ms y el buffer de 200ms. El búfer de 5000 ms se ve mejor que el búfer de 1000 ms.
: almacenamiento en red = 2000
fuente
Publiqué una posible solución en el foro de frambuesa utilizando un servidor RTSP ligero basado en live555 que captura H264 de un controlador V4L2. Está disponible en github h264_v4l2_rtspserver
Esto se hizo para la raspicamera, pero debería funcionar con cualquier dispositivo V4L2 que proporcione H264.
fuente
Si entendí bien tu situación, ¿quieres que Raspberry transcodifique el video a H264? Creo que es por eso que obtienes un mal rendimiento, porque VLC está usando codificación de software y Raspberry no es poderoso para esa tarea.
Sugeriría probar con Gstreamer y
gst-omx
complementos . Hay un elemento para la codificación de video de hardware que sería un buen servidor desde su Raspberry.fuente