使用ffmpeg获得类似webrtc的延迟?


11

我一直在Chrome和手机之间使用它:

http://www.webrtc.org/demo

延迟真的很好-不到1秒。

我一直试图在计算机上复制它,但没有成功。

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

然后在另一侧使用ffplay。

它仍然有几秒钟的滞后时间。

最终,我想从我的计算机流式传输到Android手机,但是延迟必须很好。

编辑 -效果明显更好。如果我可以将其剃光一点,我会很高兴的:

ffmpeg -vcodec rawvideo -f video4linux2 -i /dev/video0  -s 320x200 -r 25 -vcodec libvpx -f rtp -deadline realtime rtp://10.0.0.55:9002

1
链接已死。基本上,您想转换视频并将其流式传输到手机上吗?在wifi还是外部?
jiggunjer

我想要做的是从连接到设备的相机中获取数据流,并将其显示在通过USB连接的Android平板电脑(Nexus 10)上。
David N. Welton,2015年

1
我对这些编解码器了解不多,但是您是否检查过它们是否在硬件上加速过?那是我对为什么看到超过1秒的延迟的猜测。
snoopen,2015年

vpx接近实时将非常棘手,我知道x264具有“低延迟”或类似FWIW的
音调

Answers:


1

问题主要是由于您使用的是软件转码,而不是硬件转码

根据经验,如果转换使用硬件加速,则延迟将小于一秒(通常为毫秒)。如果以软件完成,则延迟将超过一秒。

FFmpeg支持硬件加速,但是要使其适合您通常很难。

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

另一方面,您的计算机和Android手机上的Google Chrome浏览器都支持VP8和H264(如果有)硬件编码/解码:

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


1
不过,这不仅仅与硬件加速有关。编解码器配置在延迟中起着更大的作用。需要调整编解码器以保持较低的等待时间,但会降低质量和带宽。无论是否使用硬件加速编解码器,都可以完成此操作。
布拉德(Brad)

该链接专门指出,Chrome浏览器不支持台式机的硬件编码,而仅支持android。
davr

抱歉,布拉德是对的,答案是完全错误的:只要您设置相同的编解码器设置,就可以使用硬件或软件进行编码(只要您有足够的CPU能力来进行实时编码)就没有任何区别。编解码器设置)。正确的是,这不仅与视频编解码器设置有关,而且还与解码器的传输类型和缓冲行为有关。WebRTC之所以起作用,是因为它针对低延迟进行了调整。典型的Webm解码器无意执行低延迟
哈利(Harry)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.