弱网环境下的RTMP推流策略

在弱网环境下为了保证推流的流畅性和低延时我们需要弄一些策略使推流更流畅一般有如下策略:

 

(1) 降帧率

 

     网络发送层发现发送速度过慢,反馈给camera采集模块,通过抽帧的方式来降帧率,降低整体发送的码率

 

(2) 降编码码率

 

  网络发送层发现发送速度过慢,反馈给视频编码模块,通过动态调整编码器码率,来减小视频编码的输出码率。Android上的MediaCodec4.3+版本上都是支持动态调整码率的; x264以及ios上的VideoToolbox也是支持的

 

(3) 丢帧

 

   上面两种方法,反射弧比较长一点,它们从pipeline上来看,操作的模块比较前面,生效比如慢一点,取决于各个模块间的缓冲的大小。丢帧策略的话直接作用于pipeline的末端,立即生效。

 

RTMP发送线程循环从一个缓冲队列里面读取帧,然后发送。为了方便作丢帧处理,encoder采用baselineprofile,这样,缓冲队列里面只存在I帧和P

 

如下 mVideoCount是这个缓冲队列里面视频帧的个数,

mVideoCapbility是这个缓冲队列总的大小

 

if(mVideoCount >= mVideoCapbility/2){

dropFrame(0.3f);

}

elseif(mVideoCount >= mVideoCapbility/3){

dropFrame(0.1f);

}

elseif(mVideoCount >= mVideoCapbility/4){

dropFrame(0.05f);

}

elseif(mVideoCount >= mVideoCapbility/5){

dropFrame(0.02f);

}

 

 

dropFrame的参数是丢帧的百分比,意思是相临两个gop之前丢掉的P帧的百分比。为了播放端不花屏,从一个GOP的最后面的P帧开始丢

 

比如dropFram(0.3f),如下序列,红色的P帧被丢弃

 

 I P P P P P P P P P P I P P P P P P P P P PI P P …

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值