OBS-rtmp中的音视频数据包发送阻塞时的丢包策略

OBS-rtmp源码剖析之rtmp常用结构体介绍(一)
OBS-rtmp源码剖析之rtmp客户端通信介绍(二)
OBS-rtmp源码剖析之rtmp客户端通信介绍(三)
OBS-rtmp源码剖析之rtmp网络数据流读写操作(四)
OBS-rtmp源码剖析之rtmp网络数据流读写操作(五)
OBS-rtmp源码剖析之rtmp发送元数据和音视频包头(六)
OBS-rtmp源码剖析之rtmp发送音频和视频数据(七)
OBS-rtmp中的音视频数据包发送阻塞时的丢包策略

在rtmp推流过程中,总会遇到网络情况差的情况,这样如何才能保证推送数据包的稳定性,这时就需要舍弃前面阻塞在队列中的包了,但又该如何舍弃呢?

视频数据包丢包方法如下

1、当一个新的数据包准备入数据包循环缓冲区(一个既含音频又含视频的循环缓冲区)时,首先会判断包队列中P帧数据包是否阻塞了以及B帧是否阻塞了,其中P帧的阻塞阀值是900ms,B帧的阻塞阀值是700ms,如果当前时间与第一帧非关键帧时间差超过了这个阀值,则把循环缓冲区全部清空,并把所有的关键帧和音频帧写入新的循环缓冲区中,作为流的数据包的新队列。并把流的最低优选级权值设置为P帧的优先级(数值为3)或B帧的优先级(数值为2)。

2、当这个新的数据包优选级低于流的最低优选级时,则继续丢掉该帧

3、当这个新的数据包优选级大于等于流的最低优选级时,则把流的最低优选级权值设置为0,即最低,丢帧过程结束,将该新数据包入数据包队列中。

猜你喜欢

转载自blog.csdn.net/tong5956/article/details/84344547