降低点播实况媒体流时I帧重叠的方法及视频管理服务器
技术领域
本发明涉及视频监控技术领域,具体涉及降低点播实况媒体流时I帧重叠的方法及视频管理服务器(VM,Video Management)。
背景技术
为方便理解,首先给出如下词语解释:
VM:位于监控系统中,可以集中管理控制监控系统中的所有设备,调度各种视频监控业务,以及管理分配监控用户权限。
编码器(EC,Encoder):位于监控系统前端,可以将模拟视频信号按照指定格式、指定码率进行编码,并可以将编码后的视频数据单播或组播给其它客户端点播。
视频客户端(VC,Video Client):位于监控系统中,作为监控客户端可以进行实况视频监控,也可以通过指定时间段来对EC上的历史视频进行回放,也可以对EC制定存储计划。
动态图像专家组(MPEG,Moving Pictures Experts Group)-2、MPEG-4、H.264:压缩编码标准,分别于1995、1999、2003年正式发布。
画面组(GOP,Group of Pictures):一个GOP就是一组连续的画面。
真双流:前端EC编码后得到2股媒体流,一股是实况媒体流,另一股媒体流用于存储。
随着数字视频技术和网络技术的发展,网络视频监控系统突破原有模拟监控系统和数字监控系统的局限,借助无处不在的网络,将模拟视频经过编码压缩后在网络上承载,并在远端解码呈现,这已经成为网络监控技术的发展趋势。
但是由于视频信息的信息量太大,要使视频得到有效的应用,必须首先解决视频压缩编码的问题。在这种迫切需求的背景下,多种编码标准应运而生,如主流的MPEG-2、MPEG-4以及被称为新一代视频编码标准的H.264,以它们出色的性能受到了广泛的重视和欢迎。
当前主流的几种视频编码标准通常对采集的视频数据进行I、P帧编码。其中I帧为原始帧图像序列的第一帧数据,包含庞大的数据信息,需要大量数据包承载;相对于I帧而言,P帧是一个参考帧,是对前I帧或前一个P帧的数据进行预测编码,P帧的码流偏低,只需少量的数据包。图1给出了采用现有的视频编码标准对视频数据进行编码后,I帧与P帧的对比图,从图1可以看出:I帧的数据信息量相对较大,P帧的数据信息量相对较小。
图2给出了现有的典型视频监控系统组网图,如图2所示,在真双流的监控系统中,实况媒体流通常是经网络设备的多个下行端口接入,再由一个上行出端口转发。随着媒体流路数的增加,大量I帧数据容易重合、甚至叠加,网络设备就很容易出现拥塞现象,引发实况媒体流的丢包问题,这势必会影响到用户区视频画面的呈现效果。
解码端出现丢包情况,可能是多条媒体I帧数据包的重合乃至叠加,引发网络拥塞,而造成的媒体流丢包。如图2中,某台EC与其它多个EC同时发送媒体流数据,如果多条媒体流的I帧数据发生重叠,就容易造成网络设备的上游接口出现拥塞现象,会造成点播这几路媒体流的多个VC都会出现丢包、画面卡顿的问题。
发明内容
本发明提供降低点播实况媒体流时I帧重叠的方法及VM、监控客户端、前端设备,以降低点播实况媒体流时I帧重叠现象的发生。
本发明的技术方案是这样实现的:
一种降低点播实况媒体流时I帧重叠的方法,该方法包括:
视频管理服务器VM周期性统计上报丢包的监控客户端,并确定上报丢包的各监控客户端对应的前端设备;其中,所述监控客户端周期性检测来自前端设备的实况媒体流是否丢包,当检测到丢包时,向所述VM发送丢包通知消息;
当VM完成一次统计后,向上报丢包的监控客户端对应的前端设备发送I帧调整通知消息,以使得:接收到I帧调整通知消息的各前端设备调整自身的实况媒体流的I帧编码时间或发送时间。
所述VM向上报丢包的监控客户端对应的前端设备发送I帧调整通知消息包括:
VM对上报丢包的监控客户端对应的前端设备,按照点播频率的从高到低进行排序,从排序结果中挑选出部分前端设备,向挑选出的各前端设备发送I帧调整通知消息。
所述前端设备调整自身的实况媒体流的I帧编码时间包括:
前端设备在当前画面组GOP中,随机增编一定数量的P帧后,再对下一个GOP进行编码。
所述数量为:1~(GOP-1)中的任意数值。
所述前端设备调整自身的实况媒体流的I帧发送时间包括:
前端设备将缓存中的下一个待发送的实况媒体流的I帧数据包,随机延迟一定时长后再发送给监控客户端。
所述时长为:(1~(GOP-1)/2)*1000/GOP ms中的任意数值,且相邻两个取值的间隔为1000/GOP ms。
所述监控客户端周期性检测来自前端设备的实况媒体流是否丢包进一步包括:当监控客户端在一个检测周期内未检测到丢包时,将当前检测周期延长;
当监控客户端在一个检测周期内检测到丢包时,将当前检测周期恢复为初始检测周期。
VM预设I帧调整次数到达上限的前端设备列表,该列表初始时为空;
所述VM完成一次统计后进一步包括:
VM查看I帧调整次数到达上限的前端设备列表,对于本次统计到的上报丢包的监控客户端对应的前端设备,若有前端设备位于所述列表中,则确定该前端设备不参与本次I帧调整;
且,所述VM向上报丢包的监控客户端对应的前端设备发送I帧调整通知消息进一步包括:VM更新各前端设备的I帧调整次数,且若一个前端设备的I帧调整次数到达预设最大调整次数,则将该前端设备标识放入所述列表中。
一种VM,位于监控系统中,包括:
丢包统计模块:周期性统计上报丢包的监控客户端,并确定上报丢包的各监控客户端对应的前端设备,将各前端设备标识发送给I帧调整通知模块;
I帧调整通知模块:当接收到丢包统计模块发来的各前端设备标识时,向各前端设备发送I帧调整通知消息,以使得:接收到I帧调整通知消息的各前端设备调整自身的实况媒体流的I帧编码时间或发送时间。
所述I帧调整通知模块进一步用于,当接收到丢包统计模块发来的各前端设备标识时,按照点播频率的从高到低对所有前端设备进行排序,从排序结果中挑选出部分前端设备,向挑选出的各前端设备发送I帧调整通知消息。
所述VM进一步包括:调整次数监控模块:用于存储I帧调整次数到达上限的前端设备列表,该列表初始时为空;
且,所述丢包统计模块进一步用于,在确定上报丢包的各监控客户端对应的前端设备后,查看调整次数监控模块中的列表,对于所确定的任一前端设备,若该前端设备位于所述列表中,则不将该前端设备标识发送给I帧调整通知模块;
所述I帧调整通知模块进一步用于,当向各前端设备发送I帧调整通知消息后,更新各前端设备的I帧调整次数,且若一个前端设备的I帧调整次数到达预设最大调整次数,则将该前端设备标识放入所述列表中。
一种监控客户端,位于监控系统中,包括:
丢包检测模块:周期性检测来自前端设备的实况媒体流是否丢包,当检测到丢包时,向VM发送丢包通知消息。
所述丢包检测模块进一步用于,当在一个检测周期内未检测到丢包时,将当前检测周期延长;当在一个检测周期内检测到丢包时,将当前检测周期恢复为初始检测周期。
一种前端设备,位于监控系统中,包括:
I帧调整模块:当接收到VM发来的I帧调整通知消息时,调整本设备的实况媒体流的I帧编码时间或发送时间。
一种前端设备,位于监控系统中,包括:
I帧调整模块:当接收到VM发来的I帧调整通知消息时,在当前GOP中,随机增编一定数量的P帧后,再对下一个GOP进行编码。
一种前端设备,位于监控系统中,包括:
I帧调整模块:当接收到VM发来的I帧调整通知消息时,将缓存中的下一个待发送的实况媒体流的I帧数据包,随机延迟一定时长后再发送给监控客户端。
与现有技术相比,本发明可降低点播实况媒体流时I帧重叠现象的发生,降低拥塞发生的概率,提升网络可承载的实况媒体流数量,提高带宽的利用率,并优先保证了被较多用户点播的媒体流的传输质量。
附图说明
图1为现有的采用现有的视频编码标准对视频数据进行编码后,I帧与P帧的对比图;
图2为现有的典型视频监控系统组网图;
图3为本发明实施例提供的降低监控系统中点播实况媒体流时I帧重叠的方法流程图;
图4为本发明实施例提供的VM的组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
图3为本发明实施例提供的降低监控系统中点播实况媒体流时I帧重叠的方法流程图,如图3所示,其具体步骤如下:
步骤301:VC在每个丢包检测周期内检测来自EC的实况媒体流是否丢包,当检测到丢包时,向VM发送丢包通知消息。
初始时,可将丢包检测周期设为10s,即,每隔10s检测一次实况媒体流是否丢包;当在某个周期内未检测到丢包时,可将丢包检测周期延长,如:延长一倍;为了避免丢包检测周期被无限制地延长,可设置一个最大丢包检测周期,如:100s,当丢包检测周期达到最大丢包检测周期时,停止延长;当检测到丢包、且当前丢包检测周期大于初始丢包检测周期时,可将当前丢包检测周期恢复为初始丢包检测周期,如:10s。
本步骤中的丢包通知消息可通过拓展会话发起协议(SIP,SessionInitiation Protocol)的Notify消息得到,在Notify消息体中增加“VCInformation”字段。“VC Information”字段用于携带VC的IP地址以及发生丢包的信息。“VC Information”字段由“IP Address”字段+Discard”字段组成,其中,“IP Address”字段值为VC的IP地址,“Discard”字段值为“1”时,表示VC检测到丢包。
步骤302:VM在每个丢包统计周期内,统计上报丢包的VC,并将上报丢包的VC的IP地址记录到Info表中;同时,VM根据上报丢包的VC的IP地址,获取到对应的前端EC的IP地址,将该前端EC的IP地址记录到该VC的IP地址所在的表项中。
VM每作一次统计前,会清空Info表。
为了得到更准确的统计结果,VM的丢包统计周期最好大于VC的初始丢包检测周期,例如:VM的丢包统计周期可以设为VC的初始丢包检测周期的2倍。
表1给出了Info表的一个示例,如表1所示,Info表中共包含n条表项,每个表项中包含:上报丢包的VC的IP地址、该VC对应的前端EC的IP地址。
索引 |
VC的IP地址 |
EC的IP地址 |
1 |
192.168.1.3 |
192.168.100.3 |
2 |
192.168.2.22 |
192.168.101.56 |
3 |
192.168.3.13 |
192.168.100.189 |
4 |
192.168.3.21 |
192.168.133.93 |
5 |
192.168.1.218 |
192.168.100.3 |
6 |
192.168.1.73 |
192.168.101.56 |
7 |
192.168.2.33 |
192.168.101.56 |
... |
... |
... |
n |
192.168.1.64 |
192.168.100.3 |
表1Info表
步骤303:当VM完成一次统计后,对当前Info表中的EC,按照点播频率的从高到低进行排序,按照预设比例,从排序结果中挑选出部分EC。
如表1所示,设n=16,预设比例为50%,则对Info表中的EC按照点播频率的从高到低进行排序后,挑选出排在前面的8个EC。
从Info表中挑选出点播频率较高的EC是因为:
一:被大量用户点播的EC的媒体流的传输质量必须优先得到保证,避免出现丢包问题;
二、部分EC完成I帧调整后,可能会避开与其它同样发生丢包的EC的I帧数据的重合,这样其它EC的丢包问题也会得到缓解,从而VM不必通知所有的EC进行I帧调整,降低了实现成本。
步骤304:VM向挑选出的各EC发送I帧调整通知消息。
I帧调整通知消息也可以通过拓展SIP的Notify消息得到,在Notify消息体中增加“I Frame Adjust”字段,可设置当“I Frame Adjust”字段值为“1”时,表示EC需要进行I帧调整。
步骤305:EC接收I帧调整通知消息,调整自身的实况媒体流的I帧编码时间或I帧发送时间。
EC可通过以下两种方式之一调整I帧时间:
方式一、称为“调整I帧编码时间”方法
在当前GOP中,随机增编一定数量的P帧后,再对下一个GOP进行编码。
这里,只对当前GOP的大小作一次加长处理,后续GOP仍保持原大小不变。
随机增编的P帧的数量可为:1~(GOP-1)个,即当EC接收到I帧调整通知消息时,从1~(GOP-1)中随机取出一个数值,在当前GOP中增编该数值的P帧。例如:若GOP=25,也就是将下一个I帧编码的时间,延时40~960ms。
由于在下一个GOP的I帧前增加了P帧的编码时长,也就达到了避开与其它EC的I帧数据重叠的效果。
方式二、称为“调整I帧发送时间”方法
将缓存中的下一个待发送的实况媒体流的I帧数据包,随机延迟一定时长后再发送给VC,以达到避开与其它EC的I帧数据重叠的效果。
随机延时时长可为:(1~(GOP-1)/2)*1000/GOP ms,相邻两个取值的间隔为1000/GOP ms,即当EC接收到I帧调整通知消息时,从1000/GOP~((GOP-1)/2)*1000/GOP中随机取出一个数值,将缓存中下一个待发送的I帧数据包延时该数值后再发送。例如:设EC的GOP为25,则当该EC收到I帧调整通知消息时,会在40ms、80ms、120ms、160ms、...、440ms、480ms中随机选取一个数值,将缓存中的下一个待发送I帧数据包延时选取的数值后再发送。
上述方式一、二都适用于不同GOP的前端EC。
一般经1次或者多次I帧调整后,就会很大程度上缓解因多条媒体流的I帧重叠而引发的网络拥塞、丢包问题。
为了避免出现持续震荡调整、不能收敛的情况,可以对图1所示实施例进行如下优化处理:
首先,VM预先配置一个最大调整次数,且预先设置一张I帧调整次数到达上限的EC列表,该列表初始时为空。
其次,在步骤303中,当VM完成一次统计后,要查看一下I帧调整次数到达上限的EC列表,将位于该列表中的EC的IP地址从Info表中删除,然后再对Info表中的EC,按照点播频率的从高到低进行排序;
在步骤304中,VM向挑选出的各EC发送I帧调整通知消息时,要判断是否已为该EC设置了I帧调整次数计数器,若是,将计数器的值加1;否则,为该EC设置一个I帧调整次数计数器,并将计数器的值设为1。同时,当一个EC的I帧调整次数计数器的值等于最大调整次数时,将该EC的IP地址放入I帧调整次数到达上限的EC列表中。
图4为本发明实施例提供的VM的组成示意图,该VM位于监控系统中,如图4所示,其主要包括:丢包统计模块41和I帧调整通知模块42,其中:
丢包统计模块41:周期性统计上报丢包的监控客户端,并确定上报丢包的各监控客户端对应的前端设备,将各前端设备标识发送给I帧调整通知模块42。
I帧调整通知模块42:当接收到丢包统计模块41发来的各前端设备标识时,按照点播频率的从高到低对所有前端设备进行排序,从排序结果中挑选出部分前端设备,向挑选出的各前端设备发送I帧调整通知消息,以使得:接收到I帧调整通知消息的各前端设备调整自身的实况媒体流的I帧编码时间或发送时间。
VM还可进一步包括:调整次数监控模块,用于存储I帧调整次数到达上限的前端设备列表,该列表初始时为空;
且,丢包统计模块41进一步用于,在确定上报丢包的各监控客户端对应的前端设备后,查看调整次数监控模块中的列表,对于所确定的任一前端设备,若该前端设备位于该列表中,则不将该前端设备标识发送给I帧调整通知模块42;
同时,I帧调整通知模块42进一步用于,当向挑选出的各前端设备发送I帧调整通知消息后,更新各前端设备的I帧调整次数,且若一个前端设备的I帧调整次数到达预设最大调整次数,则将该前端设备标识放入调整次数监控模块的列表中。
以下给出本发明实施例提供的监控客户端的组成,该监控客户端位于监控系统中,包括:丢包检测模块,用于周期性检测来自前端设备的实况媒体流是否丢包,当检测到丢包时,向VM发送丢包通知消息。
丢包检测模块还可进一步用于,当在一个检测周期内未检测到丢包时,将当前检测周期延长;当在一个检测周期内检测到丢包时,将当前检测周期恢复为初始检测周期。
以下给出本发明实施例一提供的前端设备的组成,该前端设备位于监控系统中,包括:I帧调整模块,用于当接收到VM发来的I帧调整通知消息时,调整本设备的实况媒体流的I帧编码时间或发送时间。
以下给出本发明实施例二提供的前端设备的组成,该前端设备位于监控系统中,包括:I帧调整模块,用于当接收到VM发来的I帧调整通知消息时,在当前GOP中,随机增编一定数量的P帧后,再对下一个GOP进行编码。
以下给出本发明实施例三提供的前端设备的组成,该前端设备位于监控系统中,包括:I帧调整模块,用于当接收到VM发来的I帧调整通知消息时,将缓存中的下一个待发送的实况媒体流的I帧数据包,随机延迟一定时长后再发送给监控客户端。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。