streaming ffmpeg webcam webm ffserver

Webcam de streaming de línea de comandos con audio del servidor de Ubuntu en formato WebM



ffmpeg ffserver (2)

Configuré esto recientemente, pero es un poco doloroso. Esto es lo que tuve que hacer:

En primer lugar, compile ffmpeg desde el origen para incluir los controladores libvpx (incluso si utiliza una versión que lo tiene, necesita los más nuevos (a partir de este mes) para transmitir webm porque simplemente agregaron la funcionalidad para incluir encabezados globales). Hice esto en un servidor y escritorio de Ubuntu, y esta guía me mostró cómo - las instrucciones para otros sistemas operativos se pueden encontrar aquí .

Una vez que haya obtenido la versión apropiada de ffmpeg / ffserver, puede configurarlos para la transmisión, en mi caso esto se hizo de la siguiente manera.

En el dispositivo de captura de video:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm

  • La porción "-f video4linux2 -estandard ntsc -i / dev / video0" de eso puede cambiar dependiendo de su fuente de entrada (la mía es para una tarjeta de captura de video).

Extracto de ffserver.conf relevante:

Port 8090 #BindAddress <server_ip> MaxHTTPConnections 2000 MAXClients 100 MaxBandwidth 1000000 CustomLog /var/log/ffserver NoDaemon <Feed 0.ffm> File /tmp/0.ffm FileMaxSize 5M ACL allow <feeder_ip> </Feed> <Feed 0_webm.ffm> File /tmp/0_webm.ffm FileMaxSize 5M ACL allow localhost </Feed> <Stream 0.mpg> Feed 0.ffm Format mpeg1video NoAudio VideoFrameRate 25 VideoBitRate 256 VideoSize cif VideoBufferSize 40 VideoGopSize 12 </Stream> <Stream 0.webm> Feed 0_webm.ffm Format webm NoAudio VideoCodec libvpx VideoSize 320x240 VideoFrameRate 24 AVOptionVideo flags +global_header AVOptionVideo cpu-used 0 AVOptionVideo qmin 1 AVOptionVideo qmax 31 AVOptionVideo quality good PreRoll 0 StartSendOnKey VideoBitRate 500K </Stream> <Stream index.html> Format status ACL allow <client_low_ip> <client_high_ip> </Stream>

  • Tenga en cuenta que esto está configurado para que un servidor en feeder_ip ejecute el comando ffmpeg antes mencionado, y para el servidor en server_ip así servidor para client_low_ip a través de client_high_ip mientras maneja la conversación de mpeg a webm en server_ip (continúa a continuación).

Este comando ffmpeg se ejecuta en la máquina anteriormente denominada server_ip (maneja la conversión real mpeg -> webm y la vuelve a introducir en el ffserver en un feed diferente):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm

Una vez que todos hayan sido iniciados (primero el ffserver, luego el proceso feeder_ip ffmpeg luego el proceso server_ip ffmpeg) debería poder acceder a la transmisión en vivo en http: //: 8090 / 0.webm y verificar el estado en http : //: 8090 /

Espero que esto ayude.

Estoy tratando de transmitir video y audio desde mi webcam conectada a mi servidor Ubuntu sin cabeza (ejecutando Maverick 10.10). Quiero poder transmitir en formato WebM (video VP8 + OGG). El ancho de banda es limitado, por lo que la transmisión debe ser inferior a 1 Mbps.

He intentado usar FFmpeg. Puedo grabar video de WebM desde la webcam con lo siguiente:

ffmpeg -s 640x360 / -f video4linux2 -i /dev/video0 -isync -vcodec libvpx -vb 768000 -r 10 -vsync 1 / -f alsa -ac 1 -i hw:1,0 -acodec libvorbis -ab 32000 -ar 11025 / -f webm /var/www/telemed/test.webm

Sin embargo, a pesar de experimentar con todo tipo de opciones vsync y asincrónicas, puedo dejar de sincronizar el audio, o un video de avance rápido estilo Benny Hill con audio rápido que hace juego. Tampoco he podido lograr que esto funcione realmente con ffserver (reemplazando la ruta de prueba y el nombre del archivo con el nombre del archivo de entrada correspondiente).

El objetivo es obtener un audio en vivo, video + feed que se pueda ver en un navegador moderno, en un ancho de banda ajustado, usando solo componentes de código abierto. (Ninguno de esos archivos de formato MP3 legales)

Por lo tanto, mis preguntas son: ¿cómo harías para transmitir webm desde una cámara web a través de Linux con audio sincronizado? ¿Qué software usas?

¿Has logrado codificar webm desde una cámara web con audio sincronizado a través de FFmpeg? Si es así, ¿qué comando emitió?

¿Vale la pena perseverar con FFmpeg + FFserver, o hay otras herramientas de línea de comando más adecuadas (por ejemplo, VLC que no parece estar muy bien construido para la codificación)?

¿Algo como Gstreamer + flumotion se puede configurar desde la línea de comando? Si es así, ¿dónde encuentro la documentación de la línea de comandos porque el documento de flumotion es bastante claro en los detalles de la línea de comando?

¡Gracias por adelantado!


Deberías considerar darle una oportunidad a flumotion. Puede configurar fácilmente una tubería de webm capturando desde una cámara web con flumotion-admin y dejar que se ejecute en segundo plano.