CN1210956C - 视讯会议流媒体实时接收存储方法 - Google Patents
视讯会议流媒体实时接收存储方法 Download PDFInfo
- Publication number
- CN1210956C CN1210956C CN 02124641 CN02124641A CN1210956C CN 1210956 C CN1210956 C CN 1210956C CN 02124641 CN02124641 CN 02124641 CN 02124641 A CN02124641 A CN 02124641A CN 1210956 C CN1210956 C CN 1210956C
- Authority
- CN
- China
- Prior art keywords
- media data
- data packet
- packet
- buffer memory
- information description
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
一种视讯会议流媒体实时接收存储方法,该方法包含下列步骤:在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组;当有媒体数据包来时,存储在空闲缓存中,得到相应媒体数据包实时传输协议包头序列号;依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;按媒体数据包信息描述数组单元队列中各单元存放的实时传输协议包头序列号的顺序取包、解包,进行格式转化成存储格式的数据。它有效解决了会议期间频繁分配内存带来的问题,减少了存储服务器工作量巨大时内存的分配和释放开销,并减小了排序重整引起的开销。
Description
技术领域
本发明属于视讯领域,尤其是一种视讯会议流媒体实时接收存储方法。
背景技术
在介绍视讯会议流媒体实时存储之前,首先要介绍目前流媒体会议电视系统的直播和点播系统。
图1标示了一个典型的会议电视流媒体直播和点播解决方案。其中,实箭头线表示流媒体直播时视音频媒体数据的走向,即:直播时,首先,视音频数据经会议电视终端1编解码处理形成码流,并发送给会议电视多点控制单元2;然后,多点控制单元2转发视音频码流数据到流媒体服务器3特定端口,客户端4根据需要点击相应会议链接;最后,流媒体服务器3响应链接请求转发相应端口的视音频数据并通过网络5给客户端4播放。可见直播的情况比较简单。
但,如果要在流媒体视讯系统中实现点播,即客户端可以通过在网络上点击链接来点播自己喜欢的节目,则必须对流媒体视音频数据进行实时的接收存储,以供客户端点播。为此,必须设置存储服务器6,以在直播时将流媒体视音频数据实时地接收、并存储到介质中,而完成视讯会议实时流媒体存储。直播过程中,当有流媒体存储需求时,流媒体服务器3会发送存储消息通知存储服务器6,并向存储服务器6特定端口转发视音频编码数据,存储服务器6接收到流媒体服务器消息后,就会在指定端口接收视音频编码数据,并存储已转化为可供点播的媒体文件于介质中。点播时,客户端4根据需要点击网页8上相应会议媒体文件链接,流媒体服务器3响应链接请求并向存储服务器及介质发送调用存储过的流媒体视音频数据的指令,从存储服务器的介质中调用存储的流媒体视音频数据通过网络5发送给客户端4,上述点播时的指令流向在图1中,用短虚箭头线表示,而点播时流媒体的数据流向用点划箭头线表示。上面描述的是一个完整的直播和点播过程,本发明只针对其中的存储服务器6中将流媒体视音频数据进行接收存储,以供点播时调用这一部分作改进。
对于该视讯会议实时流媒体接收存储,现有技术的方法是这样的:
1、当一个流媒体数据包来到时,首先为其动态分配一片缓存,并把这片缓存加入到已接收但未处理的媒体数据包链表中。
流媒体会议期间,流媒体服务器把流媒体存储服务器作为一个终端设备转发流媒体视音频数据包。由于整个会议期间媒体数据包的数量是不可预知的,因此现有技术常常采用动态分配内存的策略接收包,即当一个媒体数据包来到时,首先动态分配一片缓存接收。流媒体存储服务器开辟缓存通过套接字分别接收流媒体视音频数据包,由于路由选择问题,包的来到顺序和发送时的顺序可能不一致,因此,存储服务器必须用一个上述链表对包进行重整处理,即重新排列接收的流媒体数据包,使得重整后的顺序和发送端一致。
2、提取这些数据包的实时传输协议包头序列号,根据序列号进行流媒体数据包的链表排序。
这个过程实际上就是上面提到的重整,它是根据实时传输协议中包头序列号大小进行的。
3、流媒体存储服务器根据相应负载类型实时传输协议头含义进行剥离实时传输协议包头等解包操作,把解包的码流数据进行格式转换成存储格式的数据。
但是,上述技术却有如下缺点:
1、由于采用了排序重整的策略,而没有充分利用媒体数据实时传输协议包头序列号的特性,即:该技术是为流媒体数据包动态分配一片缓存,把这片缓存加入到已接收但未处理的媒体数据包链表中进行排序,而不是直接根据包头序列号排序,进而降低了存储服务器的效率,特别是在多路会议存储工作量巨大时,排序的开销太大。而实时传输协议规定:媒体数据实时传输协议包头序列号用于标示包的发送顺序,其初始值是随机的,发送的相邻包之间数值差值为一,各个数据包的序列号不重复。该技术没有充分利用媒体数据实时传输协议包头序列号的特性。
2、接收包采用了动态分配内存的策略,没有充分利用流媒体会议电视存储的特点。对于流媒体会议电视存储来说,流媒体存储服务器接收媒体数据并不像其他流媒体播放终端要求会场播放和实际会场尽可能少的延迟。对于多路会议或者长时间的流媒体会议而言,媒体数据包的数量是巨大的,尽管现有技术方案中在处理完一个数据包后都是释放掉了动态分配的内存空间,但是会议期间存储服务器的工作量巨大,特别是多路会议存储时,内存的分配和释放开销是不容忽视的,有可能导致媒体数据包处理不过来,从而产生丢包的情形,影响存储质量。且过于频繁的分配内存极易导致内存碎片,一旦内存碎片发生,将可能直接导致后期会议存储的失败或程序的崩溃。
发明内容
本发明的目的是提供一种视讯会议流媒体实时接收存储方法,它能够有效解决会议期间因频繁地动态分配内存而带来的问题,减少存储服务器工作量巨大时内存的分配和释放开销,并减小排序重整引起的开销。
为实现上述目的,本发明的解决方案是:一种视讯会议流媒体实时接收存储方法,该方法包含下列步骤:
a、在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组,建立缓存填充状态数组,其数据结构中包含缓存号和数据包有无的标志,缓存填充状态数组的单元个数为缓存空间能缓存的媒体数据包的最大个数,同时还建立起始和结束缓存位置的指针;
b、当有媒体数据包来到时,将媒体数据包存储在空闲缓存中,然后得到相应媒体数据包实时传输协议包头序列号;
c、依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;
d、按媒体数据包信息描述数组单元队列中各单元存放的实时传输协议包头序列号顺序地取包、解包,将媒体数据包的格式转化成存储格式的数据。
本发明的效果是:本发明一次开辟定长的且可接收多个包的缓存空间,有效解决了会议期间频繁分配内存带来的内存碎片等问题,另外,该缓存空间是定长的,初始化后不再分配缓存空间,减少了存储服务器工作量巨大时内存的分配和释放开销。虽然,针对不同的媒体类型存储时一次要处理的包个数可能不一致,如一帧图像根据打包方式的不同,可能含多个数据包,因此应该一次分配相对比较大的存储多个包的缓存空间,以防止缓存满时覆盖原来已接收的但还未处理的包,而大的缓存空间意味着实际处理时与实际会场延迟的增加,而由于上面提到的会场存储与实际会场延迟不重要的特性,实际上不影响存储。
另外,由于没有采用排序重整的策略,而是直接按实时传输协议包头序列号将当前媒体数据包设置到媒体数据包信息描述数组,借助于定长的内存分配方式,可以通过由序列号计算得到要放入的队列地址,从而减少排序操作及由排序重整引起的开销。
附图说明
图1是一个典型的会议电视流媒体直播和点播解决方案示意图。
图2是本发明的方法流程图。
具体实施方式
图2是本发明的方法流程图。该流程图比较详细,实际上本发明的实现主要可归纳为下面的过程:
一、在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组。同时,建立缓存填充状态数组。该定长的概念理解为多个媒体数据包缓存空间,缓存填充状态数组和媒体数据包信息描述数组的单元个数为缓存空间能缓存的媒体数据包最大个数。也就是说,分别对每一个数据包缓存空间建立数据结构来描述各个数据包信息状况,即:媒体数据包信息描述数据结构,数据结构如下所示,其中//后面的内容是该语句的汉语意思:
typedef struct RTPArray
{
long SeqNum;//实时传输协议包头的序列号
long OffNo;//缓存块号
long size;//数据包大小
long BufstateNum;//对应缓存填充状态数组单元号
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对应的缓存位置找到数据包。
Claims (8)
1.一种视讯会议流媒体实时接收存储方法,其特征在于该方法包含下列步骤:
a、在初始化时,分配定长的缓存空间,建立媒体数据包信息描述数组,建立缓存填充状态数组,其数据结构中包含缓存号和数据包有无的标志,缓存填充状态数组的单元个数为缓存空间能缓存的媒体数据包的最大个数,同时还建立起始和结束缓存位置的指针;
b、当有媒体数据包来到时,将媒体数据包存储在空闲缓存中,然后得到相应媒体数据包实时传输协议包头序列号;
c、依据媒体数据包实时传输协议包头序列号,计算得到该媒体数据包对应的媒体数据包信息描述数组单元号,并刷新该单元数据;
d、按媒体数据包信息描述数组单元队列中各单元存放的实时传输协议包头序列号顺序地取包、解包,将媒体数据包的格式转化成存储格式的数据。
2、根据权利要求1所述的视讯会议流媒体实时接收存储方法,其特征在于:步骤a所述的定长的媒体数据包缓存空间为多个媒体数据包缓存空间,媒体数据包信息描述数组的单元个数为缓存空间能缓存的媒体数据包的最大个数。
3、根据权利要求1或2所述的视讯会议流媒体实时接收存储方法,其特征在于:步骤a所述的媒体数据包信息描述数组的数据结构中包含有实时传输协议包头序列号、缓存块号、数据包大小、数据包有无的标志及缓存填充状态数组的单元号。
4、根据权利要求3所述的视讯会议流媒体实时接收存储方法,其特征在于,步骤b具体包括:
b1、定时检测媒体数据包,当检测到有数据包时,查找缓存填充状态数组,找到一个标示为空的缓存单元,用该缓存单元接收媒体数据包;
b2、接收正确后,将媒体数据包存储在空闲缓存中,并在对应的缓存填充状态数组单元中将相应的缓存单元数据设置为占用;如果接收不正确则不作处理,而进入等待状态;
b3、依据缓存填充状态数组的单元数据,找到相应的缓存数据包数据,得到相应媒体数据包实时传输协议包头序列号。
5、根据权利要求4所述的视讯会议流媒体实时接收存储方法,其特征在于:在步骤b2中将相应的缓存单元数据设置为占用,具体地说,是将对应的缓存填充状态数组单元数据结构中所包含的表示数据包有无的标志设置为1。
6、根据权利要求5所述的视讯会议流媒体实时接收存储方法,其特征在于,步骤c具体包括:
c1、由起始缓存位置指针指向的媒体数据包信息描述数组单元得到未处理数据包的最小实时传输协议包头序列号,并计算步骤b在缓存填充状态数组单元中暂存的当前媒体数据包的实时传输协议包头序列号与该最小序列号的差值;
c2、如果该差值为负,则丢弃该包,并在该缓存填充状态数组单元中设置该缓存单元为空闲;如果该差值为正,则相对起始位置指针指向的媒体数据包信息描述数组单元偏移该差值个单元得到要设置的媒体数据包信息描述数组单元;如果偏移后超出数组的最大数组单元位置,则回卷,即:回到最小序列号数组单元位置,偏移上述超出数-1个单元,得到要设置的媒体数据包信息描述数组单元;如果偏移后回卷前的数组单元位置大于结束位置指针指向的位置,则把该位置设为动态结束位置;
c3、在得到的媒体数据包信息描述数组单元中按当前媒体数据包设置该单元;
c4、处理完毕后,将媒体数据包信息描述数组单元以及缓存填充状态数组单元设置为空。
7、根据权利要求6所述的视讯会议流媒体实时接收存储方法,其特征在于:步骤c2所述的设置该缓存单元为空闲,具体地说,是将缓存填充状态数组数据结构中所包含的表明数据包有无的标志设置为0。
8、根据权利要求7所述的视讯会议流媒体实时接收存储方法,其特征在于:步骤c4所述的将媒体数据包信息描述数组单元以及缓存填充状态数组单元设置为空,具体地说,是将媒体数据包信息描述数组数据结构中的表明数据包有无的标志和缓存填充状态数组数据结构中的表明数据包有无的标志设置为0,另外,媒体数据包信息描述数组单元找到缓存填充状态数组单元是通过媒体数据包信息描述数组数据结构中的缓存填充状态数组单元号来找到缓存填充状态数组单元的。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02124641 CN1210956C (zh) | 2002-06-19 | 2002-06-19 | 视讯会议流媒体实时接收存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 02124641 CN1210956C (zh) | 2002-06-19 | 2002-06-19 | 视讯会议流媒体实时接收存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1466385A CN1466385A (zh) | 2004-01-07 |
CN1210956C true CN1210956C (zh) | 2005-07-13 |
Family
ID=34142740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 02124641 Expired - Fee Related CN1210956C (zh) | 2002-06-19 | 2002-06-19 | 视讯会议流媒体实时接收存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1210956C (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7558221B2 (en) * | 2004-02-13 | 2009-07-07 | Seiko Epson Corporation | Method and system for recording videoconference data |
CN100393068C (zh) * | 2004-12-24 | 2008-06-04 | 腾讯科技(深圳)有限公司 | 一种缓存流媒体数据的方法 |
CN1960520B (zh) * | 2006-09-30 | 2011-02-23 | 中兴通讯股份有限公司 | 一种在移动多媒体广播中传递辅助数据的方法 |
CN101110941B (zh) * | 2007-08-17 | 2010-10-13 | 中兴通讯股份有限公司 | 交互式网络电视与会议电视融合的系统及方法 |
CN101489090B (zh) * | 2009-02-20 | 2014-01-08 | 华为终端有限公司 | 多路媒体流传输和接收的方法、装置及系统 |
EP3039554A1 (en) | 2013-08-30 | 2016-07-06 | Hewlett Packard Enterprise Development LP | Completion packet return |
CN103702233B (zh) * | 2013-12-16 | 2017-11-10 | Tcl集团股份有限公司 | 一种实现网络虚拟直播的系统及方法 |
-
2002
- 2002-06-19 CN CN 02124641 patent/CN1210956C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1466385A (zh) | 2004-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1064500C (zh) | 临时存储数据包的方法和设备 | |
CN1166132C (zh) | 分组处理器 | |
CN1736066A (zh) | 用于流量处理的包存储系统 | |
CN1210956C (zh) | 视讯会议流媒体实时接收存储方法 | |
CN1255975C (zh) | 在路由设备中为分组选择路由的方法 | |
CN1267441A (zh) | 交换设备 | |
CN1949876A (zh) | 一种支持多种编码格式的媒体数据的方法及系统 | |
CN1934840A (zh) | 会话启动协议(sip)中或其相关的改进 | |
CN1472959A (zh) | 实现多种视音频流格式转换的装置和方法 | |
CN1933454A (zh) | 一种基于java消息服务的同步消息接口实现方法 | |
CN1461567A (zh) | 用于视频多处理器系统中频道的处理器分配 | |
CN1600013A (zh) | 用于压缩分组首部的方法和设备 | |
CN1878147A (zh) | 平衡网络文件系统服务器多网卡间负载的方法 | |
CN101039234A (zh) | 一种分布式dhcp中继的实现方法 | |
CN1120652C (zh) | 2n×n多路交换机 | |
CN103327129A (zh) | 针对多wan口网关设备的域名解析方法 | |
CN1402478A (zh) | 数据包控制系统和通信方法 | |
CN1271833C (zh) | 无需ip重组分发分组的装置和方法 | |
CN1499751A (zh) | 数据发射装置、发射和接收数据的方法及数据通信系统 | |
CN102868636A (zh) | 多核网络设备报文按流保序方法及系统 | |
CN1968398A (zh) | 一种iptv与流媒体设备的接口适配方法 | |
CN1642142A (zh) | 使用软件和硬件协议栈的多媒体通信设备及其通信方法 | |
CN101237405A (zh) | 数据缓存方法和装置 | |
CN1231052C (zh) | 数字电视系统中的分组标识符/区段滤波器 | |
CN1463125A (zh) | 一种实现缓存去抖的大容量实时流处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20050713 Termination date: 20170619 |
|
CF01 | Termination of patent right due to non-payment of annual fee |