本发明属于实时音视频处理技术领域,具体涉及一种动态调整发送码率方法及装置。
背景技术:
在线实时音视频处理系统中,音视频压缩数据用ts(transportstream,传送流)格式封装,网络用udp(userdatagramprotocol,用户数据包协议)打包发送,来实现系统间的音视频数据传递。一般是用固定码率(constantsbitsrate,cbr)的方式发送,具体就是单位时间内固定发送多少数据来实现的。由于各级系统间的参考时钟存在差异,所以系统接收信源码率和系统发送码率之间会存在差异,这样会导致系统输出码流出现音视频延时,音视频发空断流,后端系统误判丢包等问题。
为了解决此问题,一般会在整个音视频链路中部署同一个时钟服务器,如ntp(networktimeprotocol,网络时间协议)、ptp(precisiontimeprotocol,精确时钟同步协议)。所有链路中的系统都需要同步同一个唯一时钟服务器,这样各个系统中接收和发送码率控制就会统一。但是在实际实施中,这个唯一的时钟服务器往往是不具备的,就需要在固定码率(cbr)发送时,动态去调整发送的码率,修正由于时钟差异导致的数据发送过快或者过慢问题。
技术实现要素:
本发明要解决的技术问题是提供一种动态调整发送码率方法及装置。
为解决上述技术问题,本发明采用如下的技术方案:
本发明实施例的一个方面提供了一种动态调整发送码率方法,其特征在于,包括以下步骤:
在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;
设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;
udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
优选地,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算具体包括:对这n个时间值进行从小到大排序,然后去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
优选地,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
本发明实施例的又一方面提供了一种动态调整发送码率装置,包括:
初始填充数据模块,用于在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;
固定采样以及偏移值计算模块,用于设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;
udp发送模块,用于udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
优选地,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算具体包括:对这n个时间值进行从小到大排序,然后去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
优选地,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
采用本发明具有如下的有益效果:
(1)有效防止了由于前端编码器抖动引起udp发送抖动;
(2)解决了长时间运行由于系统间时钟差异导致的udp发送延时问题;
(3)解决了长时间运行由于系统间时钟差异导致的udp发送发空断流问题。
附图说明
图1为为码率调整前输出流状况示意图;
图2为码率调整后输出流状态示意图;
图3为本发明实施例的动态调整发送码率装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明公开了一种动态调整发送码率方法,包括以下步骤:
在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;填充数据是为防止音视频编码抖动引起的数据发空问题,如信源输入抖动,音视频编码处理抖动。
设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;
udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
具体应用实例中,初始填充数据可以用初始数据可发送时间时长(filltime)来衡量:
初始可发送时间时长filltime_init=初始数据填充buffersize/发送码率sendbitrate
比如初始填充数据为10m字节,发送码率为10mbps,那么数据可发送时间时长为10*1024*1024*8/10000000=8.388608秒。
具体应用实例中,由于发送udp包会非常频繁,可以控制每隔一段时间去采样,系统默认间隔时1秒,可以定义一个统计周期n秒,按照1秒采样间隔,n秒周期会出现n个采样值,计算其数据可发送时长:
filltime_1,filltime_2,filltime_3……filltime_n-2,filltime_n-1,filltime_n
对这n个时间值进行从小到大排序,然后去掉前四分之n和后四分之n个数据,留下中间二分之n个数据进行均值运算:
fillime_avg=(filltime_(1/4*n) filltime_(1/4*n 1)… filltime_(3/4*n-1) filltime_(3/4*n))/(n/2)
计算与初始初始填充数据时间偏差:
filltime_diff=filltime_avg–filltime_init
这个filltime_diff值可以衡量在这个统计周期内跟初始填充数据时间偏差有多大,设定一个偏差阈值,只要正负超过这个偏差阈值,就可以去加大或者减小udp固定码率的发送码率,使得这个偏差值维持在一个阈值的波动范围内,filltime_diff值也能反映系统总体输出流的延时状况,通过这个值的监控可以保证系统总体的输出延时控制在一个偏差阈值里,保证了输出流的稳定性。
本领域技术人员可以理解的是,具体应用实例中,对于头尾去掉的数据是一个可以选择的范围,如去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
具体应用实例中,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
通过本发明实施例方法实施例的动态调整发送码率方法,图1所示为码率调整前输出流状况示意图,图2所示为码率调整后输出流状态示意图,可以从填充数据可发送时间的统计状况,来看下调整前和调整后的输出流状况,以上两张图横坐标是采样时间点,纵坐标是填充数据中可发送时间,同一配置输出流,初始填充时间为1.5秒,运行10 小时统计状况,从图可以明显看到,如果没有加入调整机制,填充数据可发送时间越来越小了,长时间运行的话,可能会出现初始填充发空,数据发送断流的风险,加入调整机制的图,明显可以看到采样填充数据可发送时间围绕在1.5秒上下区间变动,这样整体发送流比较稳定,延时也比较恒定。
与本发明方法实施例对应的,本发明实施例提供了一种动态调整发送码率装置,包括:初始填充数据模块,用于在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;固定采样以及偏移值计算模块,用于设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;udp发送模块,用于udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
本领域技术人员可以理解的是,具体应用实例中,对于头尾去掉的数据是一个可以选择的范围,如去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
具体应用实例中,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
装置实施例的实施例细节与实现效果同方法实施例,此处不再赘述。
应当理解,本文所述的示例性实施例是说明性的而非限制性的。尽管结合附图描述了本发明的一个或多个实施例,本领域普通技术人员应当理解,在不脱离通过所附权利要求所限定的本发明的精神和范围的情况下,可以做出各种形式和细节的改变。
1.一种动态调整发送码率方法,其特征在于,包括以下步骤:
在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;
设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;
udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
2.如权利要求1所述的动态调整发送码率方法,其特征在于,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算具体包括:对这n个时间值进行从小到大排序,然后去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
3.如权利要求1所述的动态调整发送码率方法,其特征在于,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
4.一种动态调整发送码率装置,其特征在于,包括:
初始填充数据模块,用于在udp采用固定码率发送之前,设置初始填充数据,先把初始填充数据填满一个固定大小的缓冲区;
固定采样以及偏移值计算模块,用于设定固定采样周期,统计处理n个采样周期内的初始填充数据状况,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算,取得n个采样周期内的数据可发送时间时长,获取当前初始填充与最开始设定的初始填充之间的偏移值,同时设定一个偏移值阈值;
udp发送模块,用于udp固定码率发送,当前初始填充与最开始设定的初始填充之间的偏移值大于偏差阈值时,表示当前填充数据可发送时间大于初始填充数据可发送时间,进行加快发送速度调整;当前初始填充与最开始设定的初始填充之间的偏移值小于偏差阈值时,表示当前填充数据可发送时间小于初始填充数据可发送时间,进行减慢发送速度调整,通过当前初始填充与最开始设定的初始填充之间的偏移值的监控保证系统总体的输出延时控制在偏移值阈值内。
5.如权利要求4所述的动态调整发送码率装置,其特征在于,对n个填充时间数据进行从小到大排序,然后去掉固定数量的最大个数和最小个数,再对剩下数据做均值运算具体包括:对这n个时间值进行从小到大排序,然后去掉前1/10~1/3和后1/10~1/3个数据,对剩下数据进行均值运算。
6.如权利要求4所述的动态调整发送码率装置,其特征在于,每次加快或减慢发送速度调整为初始码率的十万分之五至万分之一之间。
技术总结