直播间新手常见技术问题解答--延时高

直播间新手常见技术问题解答--延时高

    延时高问题分析

我们看看可能产生延时的模块有哪些:

1)图像处理延时,比如画面剪裁、美颜、特效处理

2)视频编码/解码延时

3)网络传输的延时

4)业务代码中的缓冲区


一般图像处理、数据拷贝、编解码带来的延时,都是 ms 级别的,真正会产生比较大延时的地方,一个是互联网上的网络传输延时,另一个就是业务代码中的缓冲区了。


1 编码延时

很多人可能不知道 H.264 的解码器正常情况下会在显示之前缓存一定的视频帧,对于 QCIF 分辨率大小的视频(176 × 144)一般会缓存 16 帧,对于 720P 的视频则缓存 5 帧。对于第一帧的读取来说,这是一个很大的延迟。


视频中 B 帧的解码依赖于前后的视频帧,会增加延迟。Codec 一般都会有低延迟优化的开关,对于 H.264 来说其效果尤其明显。


如果使用了 FFmpeg,降低「-probesize 」和「 -analyze duration」参数的值,这两个值用于视频帧信息监测和用于监测的时长,这两个值越大对编码延迟的影响越大。

网络传输延时

数据在网络上传输,从一个节点经过多级服务器转发到达另一个节点,是不可避免有物理延时的,下面这个表格给出了理论上数据在光纤中的网络传输的时间(实际场景中的延时往往比这个要大很多,因为涉及到带宽、网络抖动等干扰):

业务代码中的缓冲区

业务代码中的缓冲区,主要是推流端的缓冲区和播放端的缓冲区,一个 30 fps 的视频流,缓冲区每滞留 30 帧,延时就会增大 1s,


那么,它们是怎么产生缓冲数据的呢 ?


推流端的数据怎么积累起来的呢 ?


采集 -> 编码 -> 数据发送 -> 服务器


当网络产生抖动的时候,数据发送会因此减慢,产生一定的阻塞,从而导致这些数据会被积累在了推流端的发送缓冲区中。


播放端的数据怎么积累起来的呢 ?


服务器-> 数据接收 -> 解码 -> 渲染


当网络产生抖动的时候,服务器的数据无法及时地传输到播放端,而由于 TCP 协议的可靠性,所有的数据都会被服务端积累起来,在网络恢复良好的时候,会快速传输到播放端,这些数据会被动地积累在接收缓冲区中。

怎么消除业务缓冲区的累计延时呢 ?

推流端的发送缓冲区,可以在网络恢复良好的时候,快送发送出去,从而消除掉这个累计延时。

播放端的接收缓冲区,可以通过丢帧或者加速播放的方式快速消费掉缓冲区中的数据,从而消除累计延时。

协议延时

通常标准的直播协议有 RTMP,HLV,HLS 三种,一般 RTMP/HLV 协议的延时在 1~3s,HLS 协议的直播延时则会更大,注重延时的直播应用,大都会选择 RTMP/HLV 协议,这些协议均是基于 tcp 的协议,tcp 协议的多个特性导致其延时明显要高于基于 udp 的私有协议,主要有如下方面:


• 建立连接的三次握手

• ACK 机制

• 丢包重传

因此,如果想从本质上解决直播延时问题,还是要换成基于 udp 的私有协议来传输数据。

————————————————

版权声明:本文为CSDN博主「步基」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/wangbuji/article/details/121661187

================================

【新闻】

999999.jpg

微信图片_20230804194631.jpg

   中国e直播带货供应链金融13306003307(V同),
一件代发共享云仓
:主播减去了自己先采购囤货的问题,可以无压力的开播卖货。主播只要选定生厂商的抖音小店产品链接或快手小店产品链接,在自己直播间上了链接就可以卖,卖完由厂家小店订单结算,厂家网店直接收款;直播带货主播直接分佣金;MCN机构直接分管理费。

     中国E直播带货供应链机构协调厂家按规则48小时内一件代发!

1633584154541554.png