¿Obtiene latencia tipo webrtc con ffmpeg?

11

He estado usando esto entre Chrome y mi teléfono:

http://www.webrtc.org/demo

Y la latencia es realmente buena, menos de 1 segundo.

He estado tratando de replicar eso en mi computadora sin éxito.

ffmpeg -f video4linux2 -i /dev/video0  -s 320x200 -r 50 -deadline realtime -vcodec libvpx -f webm -fflags nobuffer udp://10.0.0.55:9002

Y luego usando ffplay en el otro lado.

Todavía tiene un par de segundos de retraso.

Finalmente, me gustaría transmitir desde mi computadora al teléfono Android, pero la latencia tiene que ser buena.

Editar : esto funciona significativamente mejor. Si pudiera afeitarme un poco de esto, sería feliz:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002
David N. Welton
fuente
1
El enlace está muerto. Básicamente, ¿quieres convertir el video y transmitirlo a tu teléfono? ¿En wifi o externo?
jiggunjer
Lo que quiero hacer es transmitir desde una cámara conectada a un dispositivo y hacer que aparezca en una tableta Android (Nexus 10) que está conectada a través de USB.
David N. Welton
1
No sé mucho acerca de estos códecs, pero ¿ha verificado que son acelerados por hardware siempre que sea posible? Esa sería mi suposición de por qué ves una latencia de más de 1 segundo.
abre
vpx va a ser difícil cerrar en tiempo real, sé que x264 tiene una melodía de "baja latencia" o algo así FWIW
rogerdpack

Respuestas:

1

El problema se debe principalmente al hecho de que está utilizando la transcodificación de software , en lugar de la transcodificación de hardware .

Como regla general, si la conversión usa la aceleración de hardware, la latencia será de menos de un segundo orden (generalmente milisegundos). Si se realiza en software, la latencia será de más de un segundo orden.

FFmpeg admite la aceleración de hardware, pero generalmente es difícil hacer que funcione para usted.

https://trac.ffmpeg.org/wiki/HWAccelIntro

Por otro lado, Google Chrome admite la codificación / decodificación de hardware VP8 y H264 (donde está disponible), tanto en su computadora como en su teléfono Android:

http://code.google.com/p/chromium/issues/detail?id=428223

Ho1
fuente
1
Sin embargo, no se trata solo de la aceleración de hardware ... la configuración del códec juega un papel mucho más importante en la latencia. El códec debe ajustarse para mantener baja la latencia, a expensas de la calidad y el ancho de banda. Esto se puede hacer si está utilizando códecs acelerados por hardware o no.
Brad
Ese enlace dice específicamente que Chrome NO admite la codificación de hardware en el escritorio, SOLO en Android.
davr
Lo sentimos, pero Brad tiene razón, la respuesta es totalmente incorrecta: siempre y cuando establezca la misma configuración de códec, no hay ninguna diferencia si realiza la codificación de hardware o software (siempre que tenga suficiente potencia de CPU para realizar la codificación en tiempo real con su configuración de códec). Lo correcto es que no se trata solo de la configuración del códec de video, sino principalmente del tipo de transporte y el comportamiento de almacenamiento en búfer del decodificador. WebRTC funciona porque está ajustado para baja latencia. El decodificador Webm típico no está diseñado para hacer baja latencia
Harry