本发明涉及互联网相关技术领域,尤其是指一种rtmp直播码率自适应方法。
背景技术:
现有rtmp直播技术适合上行网速比较恒定的情况,比如固网,对于移动设备的直播,设备位置的移动对网络状况影响较大,没有码率自适应技术,无论网络状况如何,都是用预先设置的码率发送数据表,导致直播卡顿比较严重,严重影响观看体验。
技术实现要素:
本发明是为了克服现有技术中存在上述的不足,提供了一种隔热效果好且隔音材料寿命长及隔音效果好的rtmp直播码率自适应方法。
为了实现上述目的,本发明采用以下技术方案:
一种rtmp直播码率自适应方法,具体包括如下步骤:
(1)编码线程根据帧率定时编码视频帧放到发送缓冲队列;
(2)发送线程不停的从发送缓冲队列获取数据包发送,发送一帧就从发送缓存队列删除一帧;
(3)根据发送缓冲队列的视频帧数情况来判断网络状况,并设定视频帧数参数bufcount_min,bufcount_max;
(4)编码线程把编好的视频帧放到发送缓冲队列后会获得当前发送缓冲队列的视频帧数;
(5)在当前发送缓冲队列的视频帧数达到bufcount_max时,降低视频编码码率;在当前发送缓冲队列的视频帧数小于bufcount_min时,增加视频编码码率;若当前发送缓冲队列的视频帧数在bufcount_min和bufcount_max之间,则保持当前码率。
本发明的方法是:根据网络状况,快速调整视频的编码码率,以适应不同的网络状况,rtmp协议没有网络状况指示,我们根据发送缓冲队列的视频帧数堆积情况来初略估计网络状况,堆积越多说明网络越差,算法核心:设定参数bufcount_min和bufcount_max,在缓冲帧数达到bufcount_max时降低视频编码码率,在缓冲帧数小于bufcount_min时增加编码码率,若缓冲帧数在bufcount_min和bufcount_max之间,保持当前码率;bufcount_min和bufcount_max可以根据情况调整达到最优的直播效果。本发明在网络差的情况下降低码率,保持直播流畅,在网络变好后,提升码率提高视频质量。
作为优选,在步骤(3)中,网络好的时候,发送线程从发送缓冲队列取走视频帧的速度比编码线程放入发送缓冲队列的速度快,那么发送缓冲队列视频帧数在0~2帧之间波动;但是网络差时,发送线程从发送缓冲队列取走视频帧的速度慢于编码线程编码视频帧的速度,发送缓冲队列里视频帧的数量就会迅速堆积,即通过发送缓冲队列视频帧数量知道网络状况。
作为优选,在步骤(4)中,每过3-5秒钟检测一次发送缓冲队列的视频帧数。
作为优选,在步骤(5)中,如果当前发送缓冲队列的视频帧数大于bufcount_max时,编码线程重设编码器参数,把编码码率降低100kbps到150kbps,每过3-5秒钟后再次检测当前发送缓冲队列的视频帧数仍旧大于bufcount_max时,则再次将编码码率降低100kbps到150kbps,直到当前发送缓冲队列的视频帧数小于等于bufcount_max。
作为优选,在步骤(5)中,如果当前发送缓冲队列的视频帧数低于bufcount_min时,编码线程重设编码器参数,把编码码率提升10kbps到15kbps,每过3-5秒钟后再次检测当前发送缓冲队列的视频帧数仍旧低于bufcount_min时,则再次将编码码率提升10kbps到15kbps,直到当前发送缓冲队列的视频帧数大于等于bufcount_min。
本发明的有益效果是:根据网络状况,快速调整视频的编码码率,以适应不同的网络状况;在网络差的情况下降低码率,保持直播流畅;在网络变好后,提升码率提高视频质量;根据情况调整达到最优的直播效果。
附图说明
图1是本发明一种实施例的示意图。
具体实施方式
下面结合附图和具体实施方式对本发明做进一步的描述。
一种rtmp直播码率自适应方法,具体包括如下步骤:
(1)编码线程根据帧率定时编码视频帧放到发送缓冲队列;
(2)发送线程不停的从发送缓冲队列获取数据包发送,发送一帧就从发送缓存队列删除一帧;
(3)根据发送缓冲队列的视频帧数情况来判断网络状况,并设定视频帧数参数bufcount_min,bufcount_max;网络好的时候,发送线程从发送缓冲队列取走视频帧的速度比编码线程放入发送缓冲队列的速度快,那么发送缓冲队列视频帧数在0~2帧之间波动;但是网络差时,发送线程从发送缓冲队列取走视频帧的速度慢于编码线程编码视频帧的速度,发送缓冲队列里视频帧的数量就会迅速堆积,即通过发送缓冲队列视频帧数量知道网络状况;
(4)编码线程把编好的视频帧放到发送缓冲队列后会获得当前发送缓冲队列的视频帧数;每过3-5秒钟检测一次发送缓冲队列的视频帧数;
(5)在当前发送缓冲队列的视频帧数达到bufcount_max时,降低视频编码码率;具体为:如果当前发送缓冲队列的视频帧数大于bufcount_max时,编码线程重设编码器参数,把编码码率降低100kbps到150kbps,每过3-5秒钟后再次检测当前发送缓冲队列的视频帧数仍旧大于bufcount_max时,则再次将编码码率降低100kbps到150kbps,直到当前发送缓冲队列的视频帧数小于等于bufcount_max;
在当前发送缓冲队列的视频帧数小于bufcount_min时,增加视频编码码率;具体为:如果当前发送缓冲队列的视频帧数低于bufcount_min时,编码线程重设编码器参数,把编码码率提升10kbps到15kbps,每过3-5秒钟后再次检测当前发送缓冲队列的视频帧数仍旧低于bufcount_min时,则再次将编码码率提升10kbps到15kbps,直到当前发送缓冲队列的视频帧数大于等于bufcount_min;
若当前发送缓冲队列的视频帧数在bufcount_min和bufcount_max之间,则保持当前码率。
如图1所示,实际使用中,设定bufcount_min为3,bufcount_max为60,编码线程把编好的视频帧放到发送缓冲队列后会获得当前发送缓冲队列的视频帧数,每过3秒钟检测一次发送缓冲队列帧数,如果大于60帧,编码线程重设编码器参数,把编码码率降低100kbps,3秒后再次检测发送缓冲队列帧数仍旧大于60帧,则再次将编码码率降低100kbps,直到发送缓冲队列帧数小于60。随着编码码率降低,网络发送速度逐渐快于编码产生数据的速度,发送缓冲队列里视频帧数逐步减少,当发送缓冲队列帧数低于3帧时,认为网络状况较好,可提升编码码率从而提升视频质量,每次提升10k以避免反复波动,让发送缓冲队列缓冲视频帧数始终大于3帧且小于60帧,取得良好的流畅度和视频质量。