物联网智能视频服务(消费版) 如何实现码率自适应

这篇说说腾讯云P2P SDK实现码率自适应的三种方法:水位告警回调、查询缓存水位、查询瞬时与平均网速,用户可结合这些方法自行开发策略,例如水位超限时降码率或根据平均网速调整码率。 水位告警:通过初始化参数设置高中低三挡水位,到达时触发回调。 网速查询:调用接口获取瞬时与1秒平均网速,用于码率控制。 实现思路:建议用平均网速队列计算后,低于视频码率时主动降低码率。

相关产品
物联网智能视频服务(消费版) 产品页,含版本规格、价格与购买入口。

一、详细描述

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

二、解决方法

方法 说明
方法一 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_watermark,iv_avt_p2p_get_send_buf,iv_avt_p2p_get_send_status接口,具体实现思路类似。

赞 (0)
上一篇 4天前
下一篇 4天前