视讯会议流媒体实时接收存储方法

文档序号:7694383阅读:222来源:国知局
专利名称:视讯会议流媒体实时接收存储方法
技术领域
本发明属于视讯领域,尤其是一种视讯会议流媒体实时接收存储方法。


图1标示了一个典型的会议电视流媒体直播和点播解决方案。其中,实箭头线表示流媒体直播时视音频媒体数据的走向,即直播时,首先,视音频数据经会议电视终端(1)编解码处理形成码流,并发送给会议电视多点控制单元(2);然后,多点控制单元(2)转发视音频码流数据到流媒体服务器(3)特定端口,客户端(4)根据需要点击相应会议链接;最后,流媒体服务器(3)响应链接请求转发相应端口的视音频数据并通过网络(5)给客户端(4)播放。可见直播的情况比较简单。
但,如果要在流媒体视讯系统中实现点播,即客户端可以通过在网络上点击链接来点播自己喜欢的节目,则必须对流媒体视音频数据进行实时的接收存储,以供客户端点播。为此,必须设置存储服务器(6),以在直播时将流媒体视音频数据实时地接收、并存储到介质(7)中,而完成视讯会议实时流媒体存储。直播过程中,当有流媒体存储需求时,流媒体服务器(3)会发送存储消息通知存储服务器(6),并向存储服务器(6)特定端口转发视音频编码数据,存储服务器(6)接收到流媒体服务器消息后,就会在指定端口接收视音频编码数据,并存储已转化为可供点播的媒体文件于介质(7)中。点播时,客户端(4)根据需要点击网页8上相应会议媒体文件链接,流媒体服务器(3)响应链接请求并向存储服务器及介质发送调用存储过的流媒体视音频数据的指令,从存储服务器的介质中调用存储的流媒体视音频数据通过网络(5)发送给客户端(4),上述点播时的指令流向在图1中,用短虚箭头线表示,而点播时流媒体的数据流向用点划箭头线表示。上面描述的是一个完整的直播和点播过程,本发明只针对其中的存储服务器(6)中将流媒体视音频数据进行接收存储,以供点播时调用这一部分作改进。
对于该视讯会议实时流媒体接收存储,现有技术的方法是这样的1、当一个流媒体数据包来到时,首先为其动态分配一片缓存,并把这片缓存加入到已接收但未处理的媒体数据包链表中。
流媒体会议期间,流媒体服务器把流媒体存储服务器作为一个终端设备转发流媒体视音频数据包。由于整个会议期间媒体数据包的数量是不可预知的,因此现有技术常常采用动态分配内存的策略接收包,即当一个媒体数据包来到时,首先动态分配一片缓存接收。流媒体存储服务器开辟缓存通过套接字分别接收流媒体视音频数据包,由于路由选择问题,包的来到顺序和发送时的顺序可能不一致,因此,存储服务器必须用一个上述链表对包进行重整处理,即重新排列接收的流媒体数据包,使得重整后的顺序和发送端一致。
2、提取这些数据包的实时传输协议包头序列号,根据序列号进行流媒体数据包的链表排序。
这个过程实际上就是上面提到的重整,它是根据实时传输协议中包头序列号大小进行的。
3、流媒体存储服务器根据相应负载类型实时传输协议头含义进行剥离实时传输协议包头等解包操作,把解包的码流数据进行格式转换成存储格式的数据。
但是,上述技术却有如下缺点1、由于采用了排序重整的策略,而没有充分利用媒体数据实时传输协议包头序列号的特性,即该技术是为流媒体数据包动态分配一片缓存,把这片缓存加入到已接收但未处理的媒体数据包链表中进行排序,而不是直接根据包头序列号排序,进而降低了存储服务器的效率,特别是在多路会议存储工作量巨大时,排序的开销太大。而实时传输协议规定媒体数据实时传输协议包头序列号用于标示包的发送顺序,其初始值是随机的,发送的相邻包之间数值差值为一,各个数据包的序列号不重复。该技术没有充分利用媒体数据实时传输协议包头序列号的特性。
2、接收包采用了动态分配内存的策略,没有充分利用流媒体会议电视存储的特点。对于流媒体会议电视存储来说,流媒体存储服务器接收媒体数据并不像其他流媒体播放终端要求会场播放和实际会场尽可能少的延迟。对于多路会议或者长时间的流媒体会议而言,媒体数据包的数量是巨大的,尽管现有技术方案中在处理完一个数据包后都是释放掉了动态分配的内存空间,但是会议期间存储服务器的工作量巨大,特别是多路会议存储时,内存的分配和释放开销是不容忽视的,有可能导致媒体数据包处理不过来,从而产生丢包的情形,影响存储质量。且过于频繁的分配内存极易导致内存碎片,一旦内存碎片发生,将可能直接导致后期会议存储的失败或程序的崩溃。

发明内容
本发明的目的是提供一种视讯会议流媒体实时接收存储方法,它能够有效解决会议期间因频繁地动态分配内存而带来的问题,减少存储服务器工作量巨大时内存的分配和释放开销,并减小排序重整引起的开销。
为实现上述目的,本发明的解决方案是 一种视讯会议流媒体实时接收存储方法,该方法包含下列步骤a、在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组;b、当有媒体数据包来到时,存储在空闲缓存中,然后得到相应媒体数据包实时传输协议包头序列号;c、依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;d、按媒体数据包信息描述数组单元队列顺序取包、解包,进行格式转化成存储格式的数据。
本发明的效果是本发明一次开辟定长的且可接收多个包的缓存空间,有效解决了会议期间频繁分配内存带来的内存碎片等问题,另外,该缓存空间是定长的,初始化后不再分配缓存空间,减少了存储服务器工作量巨大时内存的分配和释放开销。虽然,针对不同的媒体类型存储时一次要处理的包个数可能不一致,如一帧图像根据打包方式的不同,可能含多个数据包,因此应该一次分配相对比较大的存储多个包的缓存空间,以防止缓存满时覆盖原来已接收的但还未处理的包,而大的缓存空间意味着实际处理时与实际会场延迟的增加,而由于上面提到的会场存储与实际会场延迟不重要的特性,实际上不影响存储。
另外,由于没有采用排序重整的策略,而是直接按实时传输协议包头序列号将当前媒体数据包设置到媒体数据包信息描述数组,借助于定长的内存分配方式,可以通过由序列号计算得到要放入的队列地址,从而减少排序操作及由排序重整引起的开销。
图2是本发明的方法流程图。
bool bIsFill;//是否有数据包的标志}RTPArray;也就是说,该数据结构中包含实时传输协议包头序列号、缓存块号、数据包大小、是否有数据包的标志、对应缓存填充状态数组单元号的内容。其中,实时传输协议包头的序列号是指放入该媒体数据包信息描述数组中的实时传输协议包的包头序列号,缓存块号是接收到的实时传输协议数据包数据存放的缓存块号,如果分配了120个缓存块的话,取值范围0-119,由于每个数据包缓存是定长的,因此该缓存号实际上也是缓存地址;数据包大小即接收到的这个实时传输协议包数据大小;是否有数据包的标志用于标示该缓存块是否有媒体数据,便于丢包处理;对应缓存填充状态数组单元号在后面叙述。
由于媒体数据包中序列号必须在包接收到后才能获知,必须首先给出缓存地址,因此还需要与上述缓存空间数相同的数据结构记录每个数据包缓存填充状态,即缓存填充状态数组,数据结构如下typedef struct BufState{long OffNo;//缓存号(地址)bool bIsFill;//是否有数据包的标志} BufState;也就是说,缓存填充状态数组数据结构中包含缓存号和该缓存块是否有数据包的标志。
在初始化时,还需要两个动态指针标示当前实时传输协议数组队列中未处理数据包的起始和结束,以便于存储服务器分清处理与未处理的媒体数据块的位置或进行一些特殊处理,如丢弃某些滞后的数据包。
二、当有媒体数据包来到时,存储在空闲缓存中,得到相应媒体数据包实时传输协议包头序列号。其具体包括1、定时检测媒体数据包,当检测到有数据包时,查找缓存填充状态数组,找到一个标示为空的缓存单元,用该缓存单元接收媒体数据包。
2、接收正确后,存储在空闲缓存中,在对应的缓存填充状态数组单元中设置相应的缓存单元数据为占用,具体地说,是设置对应的缓存填充状态数组单元数据结构中包含的是否有数据包的标志为1,接收不正确则不作处理,等待。
3、依据缓存填充状态数组单元数据,找到相应的缓存数据包数据,得到相应媒体数据包实时传输协议包头序列号。
三、依据媒体数据包实时传输协议包头序列号,以缓存填充状态数组在记录其缓存状态,然后计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据。其具体过程是1、由起始缓存位置指针指向的媒体数据包信息描述数组单元得到未处理数据包的实时传输协议包头最小序列号,计算步骤二在缓存填充状态数组中暂存的当前媒体数据包的实时传输协议包头序列号与最小序列号的差值。
2、如果该差值为负,则丢弃该包,并在缓存填充状态数组中设置该缓存单元为空闲,具体地说,是设置缓存填充状态数组单元数据结构中包含的是否有数据包的标志为0;如果该差值为正,则相对起始位置指针指向的媒体数据包信息描述数组单元偏移该差值个单元得到要设置的媒体数据包信息描述数组单元;如果偏移后超出数组的最大数组单元位置,则回卷回到最小序列号数组单元位置,偏移上述超出数-1个单元,得到要设置的媒体数据包信息描述数组单元,如起始单元为70,差值为40,有80个数组单元,则取第30(70+40-80=30)个数组单元,第30个数组单元正好是偏移第一个数组单元30-1=29个数组单元。如果偏移后回卷前的数组单元位置大于结束位置指针指向的位置,则把该位置设为动态结束位置。
3、在得到的媒体数据包信息描述数组单元中按当前媒体数据包数据设置该单元。
当存储处理n个包时,都由起始位置指针指向的媒体数据包信息描述数组单元开始向后处理n个数据包(若回卷,处理同上)。
4、处理完毕后,设置媒体数据包信息描述数组单元以及缓存填充状态数组单元为空,实际上是设置媒体数据包信息描述数组数据结构中的是否有数据包的标志和缓存填充状态数组数据结构中的是否有数据包的标志为0,由媒体数据包信息描述数组单元找到缓存填充状态数组单元是通过媒体数据包信息描述数组数据结构中的缓存填充状态数组单元号来找到缓存填充状态数组单元。
四、按媒体数据包信息描述数组单元队列的各单元存放的实时传输协议包头序列号的顺序取包、解包,进行格式转化成存储格式的数据。该顺序一般是按照逐个递增的顺序。关于解包和转换格式的内容相当于现有技术的步骤3,其实现是现有技术中的内容。
现在举一个例子,说明本发明的实现。假设分配了120个缓存决,起始指针指向的单元是70,结束指针指向的单元是110。起始指针指向的单元对应的未处理数据包的实时传输协议报头最小序列号假设为35。定时检测媒体数据包,当检测到有数据包时,查找缓存填充状态数组发现17号单元的是否有数据包的标志是0,于是以17号缓存接收媒体数据包,接收正确后将是否有数据包的标志设1,接收后由该媒体数据包得到该数据包的实时传输协议包头序列号51。51减去未处理数据包的实时传输协议包头最小序列号35得到16,则由起始指针指向的单元70偏移16个单元要设置的媒体数据包信息描述数组单元86;按刚刚接收到、暂存在17号缓存中的媒体数据包设置媒体数据包信息描述数组单元86,处理完毕后,设置媒体数据包信息描述数组数组单元以及缓存填充状态数组单元的是否有数据包的标志为0。按媒体数据包信息描述数组单元队列的各单元存放的实时传输协议包头序列号的逐个递增顺序取包、解包,当排到51时,就按照信息描述数组单元86对应的缓存位置找到数据包。
权利要求
1.一种视讯会议流媒体实时接收存储方法,其特征在于该方法包含下列步骤a、在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组;b、当有媒体数据包来到时,将媒体数据包存储在空闲缓存中,然后得到相应媒体数据包实时传输协议包头序列号;c、依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;d、按媒体数据包信息描述数组单元队列中各单元存放的实时传输协议包头序列号顺序地取包、解包,将媒体数据包的格式转化成存储格式的数据。
2.根据权利要求1所述的视讯会议流媒体实时接收存储方法,其特征在于步骤a所述的定长的媒体数据包缓存空间为多个媒体数据包缓存空间,媒体数据包信息描述数组的单元个数为缓存空间能缓存的媒体数据包的最大个数。
3.根据权利要求1或2所述的视讯会议流媒体实时接收存储方法,其特征在于步骤a所述的媒体数据包信息描述数组的数据结构中包含有实时传输协议包头序列号、缓存块号、数据包大小、数据包有无的标志及缓存填充状态数组的单元号。
4.根据权利要求1所述的视讯会议流媒体实时接收存储方法,其特征在于在步骤a中,还建立缓存填充状态数组,其数据结构中包含缓存号和数据包有无的标志,缓存填充状态数组的单元个数为缓存空间能缓存的媒体数据包的最大个数。
5.根据权利要求4所述的视讯会议流媒体实时接收存储方法,其特征在于,步骤b具体包括b1、定时检测媒体数据包,当检测到有数据包时,查找缓存填充状态数组,找到一个标示为空的缓存单元,用该缓存单元接收媒体数据包;b2、接收正确后,将媒体数据包存储在空闲缓存中,并在对应的缓存填充状态数组单元中将相应的缓存单元数据设置为占用;如果接收不正确则不作处理,而进入等待状态;b3、依据缓存填充状态数组的单元数据,找到相应的缓存数据包数据,得到相应媒体数据包实时传输协议包头序列号。
6.根据权利要求5所述的视讯会议流媒体实时接收存储方法,其特征在于在步骤b2中将相应的缓存单元数据设置为占用,具体地说,是将对应的缓存填充状态数组单元数据结构中所包含的表示数据包有无的标志设置为1。
7.根据权利要求4所述的视讯会议流媒体实时接收存储方法,其特征在于步骤a中,还建立起始和结束缓存位置的指针。
8.根据权利要求7所述的视讯会议流媒体实时接收存储方法,其特征在于,步骤c具体包括c1、由起始缓存位置指针指向的媒体数据包信息描述数组单元得到未处理数据包的最小实时传输协议包头序列号,并计算步骤b在缓存填充状态数组单元中暂存的当前媒体数据包的实时传输协议包头序列号与该最小序列号的差值;c2、如果该差值为负,则丢弃该包,并在该缓存填充状态数组单元中设置该缓存单元为空闲;如果该差值为正,则相对起始位置指针指向的媒体数据包信息描述数组单元偏移该差值个单元得到要设置的媒体数据包信息描述数组单元;如果偏移后超出数组的最大数组单元位置,则回卷,即回到最小序列号数组单元位置,偏移上述超出数-1个单元,得到要设置的媒体数据包信息描述数组单元;如果偏移后回卷前的数组单元位置大于结束位置指针指向的位置,则把该位置设为动态结束位置;c3、在得到的媒体数据包信息描述数组单元中按当前媒体数据包设置该单元;c4、处理完毕后,将媒体数据包信息描述数组单元以及缓存填充状态数组单元设置为空。
9.根据权利要求8所述的视讯会议流媒体实时接收存储方法,其特征在于步骤c2所述的设置该缓存单元为空闲,具体地说,是将缓存填充状态数组数据结构中所包含的表明数据包有无的标志设置为0。
10.根据权利要求8所述的视讯会议流媒体实时接收存储方法,其特征在于步骤c4所述的将媒体数据包信息描述数组单元以及缓存填充状态数组单元设置为空,具体地说,是将媒体数据包信息描述数组数据结构中的表明数据包有无的标志和缓存填充状态数组数据结构中的表明数据包有无的标志设置为0,另外,媒体数据包信息描述数组单元找到缓存填充状态数组单元是通过媒体数据包信息描述数组数据结构中的缓存填充状态数组单元号来找到缓存填充状态数组单元的。
全文摘要
一种视讯会议流媒体实时接收存储方法,该方法包含下列步骤在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组;当有媒体数据包来时,存储在空闲缓存中,得到相应媒体数据包实时传输协议包头序列号;依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;按媒体数据包信息描述数组单元队列中各单元存放的实时传输协议包头序列号的顺序取包、解包,进行格式转化成存储格式的数据。它有效解决了会议期间频繁分配内存带来的问题,减少了存储服务器工作量巨大时内存的分配和释放开销,并减小了排序重整引起的开销。
文档编号H04N7/15GK1466385SQ0212464
公开日2004年1月7日 申请日期2002年6月19日 优先权日2002年6月19日
发明者盛馥钟, 熊联欢 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1