有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

详细描述

实际网络环境波动较大,如何实现码率自适应。

解决方法

方法
说明
方法一
iv_avt_init初始化参数 pstInitParm > congestion 中可以设置是否启用水位告警以及告警的有高中低三挡水位值,当 p2p 内部缓存的水位到达这个值的时候会收到 iv_avt_notify_cb回调。
方法二
使用过程中主动调用 iv_avt_get_send_stream_buf查询当前水位值。
方法三
使用过程中主动调用 iv_avt_get_send_stream_status查询当前的瞬时网速和1秒内的平均网速。
用户根据以上三种方法的查询结果自行开发并实现码率自适应。
下面给出一种实现思路,仅供参考。
当发现 p2p 的水线超过一定值时,降低视频码率。
例如当水位超过低水位时将视频码率降为原来的80%。网络正常的情况下 p2p 水位值很低,2mbps码率的视频水位值一般在100KB以下。该数值仅供参考,送入体积较大的 I 帧、网络波动等都会影响水位值。
推流过程中每间隔一定时间(例如1秒)调用 iv_avt_get_send_stream_status 获取网速信息。
由于瞬时速度的波动较大,这里建议使用1秒内的平均传输速度,设置一定长度的队列(例如长度为5,如果调用间隔比较短可以适当加长窗口),将该数值存入队列同时删除队列内最旧的一个数值,去掉一个最高值去掉一个最低值,计算平均值。算出的平均值可用于控制码率,一般而言此数值与视频码率相近,当发现平均网速低于视频码率时主动降低视频码率到一个比平均网速更低的值。
用户可结合以上方法实现或借鉴 cubic 拥塞控制算法等的思想实现自己的码率自适应策略。对于 p2p 透传数据请参考 iv_avt_p2p_set_buf_watermarkiv_avt_p2p_get_send_bufiv_avt_p2p_get_send_status接口,具体实现思路类似。


http://www.vxiaotou.com