Video 如何在没有延迟的情况下流式传输实时视频(ffplay、mplayer)以及ffplay可以使用何种包装器?

Video 如何在没有延迟的情况下流式传输实时视频(ffplay、mplayer)以及ffplay可以使用何种包装器?,video,ffmpeg,video-streaming,gstreamer,mplayer,Video,Ffmpeg,Video Streaming,Gstreamer,Mplayer,我一直在测试使用不同的播放器播放多个实时流,因为我希望获得最低的延迟值。我试过gstreamer播放器(gst-launch-0.01)、mplayer、totem和ffmpeg播放器(ffplay)。我使用了不同的配置值来获得每个配置的最低延迟,例如: ffplay -fflags nobuffer mplayer -benchmark 我正在使用的协议是udp,与mplayer或gst启动相比,我使用ffplay获得了更好的值。老实说,我不知道我需要什么样的配置才能使gstreamer获

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

ffplay -fflags nobuffer 
mplayer -benchmark
我正在使用的协议是udp,与mplayer或gst启动相比,我使用ffplay获得了更好的值。老实说,我不知道我需要什么样的配置才能使gstreamer获得更低的延迟。 现在,我需要的是两件事:

  • 我想知道是否有人对延迟小于100毫秒的实时流有更好的建议。我现在的延迟大于100毫秒,这对我来说不是很有效

  • 因为我目前正在使用ffplay,因为它是迄今为止最好的。我想做一个简单的图形用户界面,有一个播放和录制按钮,有3个屏幕可以从不同的视频服务器播放视频,我只是不知道该使用哪种包装器(应该很快)


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

    对于质量接近NTSC且延迟预算为40ms的数字流,请参阅rsaxvc在120hz时的回答。如果您需要空中流媒体,这是我见过的最好的低延迟选项,经过深思熟虑,分辨率将随硬件能力而扩展

    如果您是指数字流,并且希望获得良好的压缩比,即通过wifi的1080p,那么如果您希望在今天的商品硬件上获得小于100ms的延迟,那么您就不走运了,因为为了使压缩算法获得良好的压缩比,它需要大量的上下文。例如,Mpeg 1在IPBBPBBBPB GOP(图片组)安排中使用了12帧,其中i是“帧内”帧,实际上是jpeg静止图像,p是预测帧,对i帧和p帧之间的一些运动进行编码,b帧对预测效果不太好的一些点修正进行编码。无论如何,即使以60fps的速度12帧仍然是200ms,所以这是200ms,用于捕获数据,然后进行编码,然后进行传输,然后进行解码,然后缓冲音频,以便在CPU向DMA内存区域发送新块时声卡不会耗尽数据,同时,2-3帧视频需要排队发送到视频显示器,以防止在数字显示器上撕裂。所以实际上至少有15帧或250毫秒,加上传输过程中产生的延迟。NTSC没有这样的延迟,因为它是模拟传输的,唯一的“压缩”是两个诡计:隔行扫描,每次只有一半的帧作为交替行传输,即使在一帧上,在下一帧上是奇数,然后第二个技巧是颜色空间压缩,使用3个黑白像素加上它的相位鉴别来确定显示的颜色,因此颜色以亮度(luma)信号带宽的1/3传输。酷吧?我猜你也可以说音频有一种“压缩”,因为自动增益控制可以用来使20分贝的模拟音频信号看起来更接近60分贝,因为AGC在节目和播放之间的2-3秒的沉默中提高了音量,所以在商业广告中我们的耳朵会被震得鼓鼓的广告。后来,当我们有了高保真度的音频电路时,商业广告实际上比电视节目播放的声音更大,但这正是他们提供与老式电视给广告商同样影响的方式

    这条由怀旧(tm)带给你的记忆之路。购买怀旧牌香皂!;-)

    以下是我在Ubuntu18.04下通过股票
    ffmpeg
    mpv
    所取得的最好成绩。这需要第3代Intel Core处理器或更高版本。请参阅ffmpeg站点,了解使用NVidia硬件编码的说明

    ffmpeg -f x11grab -s 1920x1080 -framerate 60 -i :0.0 \
      -vaapi_device /dev/dri/renderD128 \
      -vf 'format=nv12,hwupload,scale_vaapi=w=1920:h=1080' \
      -c:v h264_vaapi -qp:v 26 -bf 0 -tune zerolatency -f mpegts \
      udp://$HOST_IP:12345
    
    然后在媒体盒上:

    mpv --no-cache --untimed --no-demuxer-thread --video-sync=audio \
      --vd-lavc-threads=1 udp://$HOST_IP:12345 
    
    这将实现大约250毫秒的延迟1080p@60hz在3Mbps左右,这对于通过wifi的流媒体节目来说是可以的<代码>mpv可以调整唇形同步(在播放过程中按CTRL+-键)。它可以用于流式桌面鼠标/键盘交互以实现媒体控制,但不能用于实时游戏(请参阅NVidia Shield,远程游戏的Google Stadia)

    还有一件事:LCD/OLED/Plasma电视,以及一些LCD显示器具有帧插值功能,可以通过去隔行扫描,也可以通过SmoothVision(“肥皂剧效果”)。这种处理增加了输入滞后。您通常可以在显示器的设置中关闭它,或者连接到“PC”或“Console”输入端口(如果显示器有这样标记的端口)。有些显示器可以重命名输入。在这种情况下,选择“PC”或“Console”可能会减少输入延迟,但您可能会注意到由于关闭额外处理而导致的色带、闪烁等


    CRT监视器有效地实现了零输入滞后。但你会被电离辐射烤焦。选择你的毒药。

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

    我做了,计划要飞RC车和四轮车。它的目标是低延迟,而几乎牺牲了其他一切(分辨率、比特率、打包率、压缩效率)。在较小的分辨率下,我们可以运行115200波特的UART和XBEE,但在这些限制下的视频并不像我们希望的那样有用。今天,我在一台笔记本电脑(英特尔i5-2540M)上运行320x240配置,因为我不再有原始设置