如何流媒体视频没有延迟(ffplay,mplayer)和什么样的包装可以用于ffplay?

use*_*014 12 video ffmpeg video-streaming gstreamer mplayer

我一直在测试使用不同的播放器播放多个直播流,因为我想获得最低的延迟值.我尝试了gstreamer播放器(gst-launch-0.01),mplayer,totem和ffmpeg播放器(ffplay).我使用不同的配置值来获得每个配置值的最低延迟,例如:

ffplay -fflags nobuffer 
mplayer -benchmark
Run Code Online (Sandbox Code Playgroud)

我流媒体的协议是udp,我使用ffplay比mplayer或gst-launch获得更好的价值.说实话,我不知道我需要什么样的配置才能让gstreamer获得更低的延迟.现在,我需要的是两件事:

  1. 我想知道是否有人有更好的建议来流式传输低延迟<100毫秒的直播流.我现在高于100毫秒,这对我来说效率不高.

  2. 由于我目前正在使用ffplay,因为它是目前为止最好的.我想做一个带有播放和录制按钮的简单gui和3个屏幕从不同的视频服务器流,我只是不知道使用什么样的包装(应该真的很快)!

Wil*_*Wil 10

那么,对于真正低延迟的流媒体场景,您可以尝试NTSC.理想情况下,它的延迟可以低于63us(微秒).

对于质量接近NTSC和40ms延迟预算的数字流媒体,请参阅rsaxvc在120hz的答案.如果你需要Over The Air流媒体,这是我见过的最好的低延迟选项,它经过深思熟虑,分辨率将随着硬件功能而扩展.

如果您的意思是数字流,并且您希望获得良好的压缩率,即通过wifi获得1080p,那么如果您希望使用当今的商用硬件时延迟少于100毫秒,那么您就不幸了,因为为了使压缩算法具有良好的压缩比,它需要很多背景.例如,Mpeg 1在ipbbpbbbbbpb GOP(图片组)排列中使用12帧,其中i是'帧内'帧,其实际上是jpeg静止,ap是预测帧,其编码i帧和p帧之间的一些运动,以及b帧编码一些现场修正,其中预测不能很好地工作.无论如何,即使在60fps的情况下,12帧仍然是200ms,所以200ms只是为了捕获数据,然后是一段时间来编码它,然后一段时间来传输它,然后一段时间来解码它,然后有一段时间来缓冲音频,这样当CPU向DMA存储区发送一个新块时,声卡不会耗尽数据,同时2-3帧视频需要排队等待发送给视频显示器,以防止在数字显示器上撕裂.所以真的至少有15帧或250毫秒,加上传输延迟.NTSC没有这样的延迟,因为它是传输模拟的唯一'压缩'是两个偷偷摸摸的技巧:隔行扫描,每次只有一半的帧作为交替行传输,即使在一帧,奇数在下一帧,然后第二个技巧是色彩空间压缩,使用3个黑白像素加上相位鉴别来确定显示的颜色,所以颜色以亮度(亮度)信号带宽的1/3传输.很酷吗?我猜你可以说音频有一种"压缩",因为自动增益控制可以用来使20dB的模拟音频信号看起来更接近60dB的体验由于AGC在节目和商业广告之间的2-3秒静音期间增加音量,所以广告.后来,当我们获得更高保真度的音频电路时,广告实际上比节目更响亮,但这只是他们提供与旧电视给广告商相同的影响的方式.同样,自动增益控制可用于使20dB模拟音频信号看起来通过在商业广告中将我们的耳朵从我们的头部爆破而提供接近60dB的体验,因为AGC在2-3秒内将音量提升到音量.节目和商业之间的沉默.后来,当我们获得更高保真度的音频电路时,广告实际上比节目更响亮,但这只是他们提供与旧电视给广告商相同的影响的方式.同样,自动增益控制可用于使20dB模拟音频信号看起来通过在商业广告中将我们的耳朵从我们的头部爆破而提供接近60dB的体验,因为AGC在2-3秒内将音量提升到音量.节目和商业之间的沉默.后来,当我们获得更高保真度的音频电路时,广告实际上比节目更响亮,但这只是他们提供与旧电视给广告商相同的影响的方式.

Nostalgia(tm)为您带来了这条记忆通道.买Nostalgia品牌香皂!;-)


rsa*_*xvc 5

传统媒体播放器(例如VLC,ffmpeg和某种程度上为mplayer)的问题在于,它们将尝试以一致的帧速率播放,并且这需要一定的缓冲,这会杀死延迟目标。另一种方法是尽可能快地渲染传入的视频,而不关心其他任何事情。

@genpfault和我制作了一个自定义UDP协议,计划用于飞行RC汽车和四轮摩托车。它的目标是低延迟,但会牺牲很多其他东西(分辨率,比特率,数据包率,压缩效率)。在较小的分辨率下,我们可以在115200波特UART和XBEE上运行它,但是在这些限制下的视频并没有我们希望的有用。今天,由于我不再具有原始设置,因此我正在笔记本电脑(Intel i5-2540M)上以320x240的配置进行测试。

您需要计划延迟预算,这是我花在这里的地方:

  1. 采集-我们选择了125FPS PS3 Eye相机。因此,我们的延迟最多不超过8mS。避免使用在机载压缩(“ h264”或“ MJPEG”)的“更智能”的摄像机。另外,如果您的相机具有任何自动曝光定时,则需要将其禁用以将其锁定在最快的帧率或提供充足的照明(由于自动曝光,如今我的内置网络摄像头仅以8 FPS的速度运行)。
  2. 转换-如有可能,让相机发出可以直接压缩的格式的帧(通常是Eye本身支持的YUV格式)。然后,您可以跳过此步骤,但是我在这里花费0.1mS。
  3. 编码-我们使用了经过特别调整的H.264。它需要约2.5mS,并且不需要压缩未来的帧,而以压缩率为代价。
  4. 传输-我们在正常工作时使用了WiFi上的UDP,<5mS,没有其他无线电干扰。
  5. 解码-这在很大程度上受接收器CPU的限制。编码器可以通过发送可解码多线程的工作来提供帮助。这通常比编码更快。今天约1.5毫秒。
  6. 转换-解码器可能会为您执行此步骤,但是通常,编码器/解码器使用YUV,显示器使用RGB,因此必须在它们之间进行转换。我的笔记本电脑上为0.1mS。
  7. 显示-如果没有VSYNC,一台60 FPS显示器的延迟高达17mS,另外还有一些LCD延迟,可能是6ms?这实际上取决于显示器,我不确定这台笔记本电脑有哪个面板。

总计为:40.2mS。

编码方式:

当时,X264是我们能找到的最好的H264-AnnexB编码器。我们必须控制比特率,slice-max-size,vbv-bufsize,vbv-maxrate。从“ superfast”和“ zerolatency”的默认值开始,这将禁用B帧。

此外,必须进行帧内刷新!有效地,这允许切碎正常的“ I”帧并将其与随后的P帧混合。否则,您的比特率需求将出现“泡沫”,这将暂时阻塞您的传输,增加延迟。

编码-运输计划:

调整编码器以生成UDP大小的H264 NALU。这样,当一个UDP数据包被丢弃时,整个H264 NALU被丢弃了,而我们不必重新同步,解码器只是……被……弄乱了……并继续出现一些图形损坏。

最终结果320x240

在此处输入图片说明

它...比我将手机对准指向我的笔记本电脑的相机可靠地测量的速度快。压缩率320x240x2B = 150kB /帧,压缩到3kB /帧以上。

  • 3 年前推出的 SmoothVision 电视就是一个很好的例子。为其提供 24FPS 源,它将使用 3 个缓冲帧来插值 60FPS(或更高)输出。仅插值引擎就会产生 125 毫秒的输入延迟。大多数电视默认启用 Smoothvision(肥皂剧效果)。许多人使用电视作为显示器。最近(过去三年)游戏玩家的意识正在上升。电视制造商已开始添加低延迟“游戏”模式 (ALLM),有些甚至支持 FreeSync,以获得 &lt;8 毫秒的输入延迟。 (3认同)