媒体报文传输方法及装置的制作方法

文档序号:7926606阅读:95来源:国知局
专利名称:媒体报文传输方法及装置的制作方法
技术领域
本发明涉及网络电视技术,尤其涉及一种媒体报文传输方法及装置。
背景技术
随着互联网协议电视(Internet Protocol Television,简称IPTV)系统的快速发展,快速频道切换(Fast Channel Change,简称FCC)业务为用户提供了快速频道切换的良好体验,丢包重传(Retransmission)业务为用户提供了丢包重传的良好体验。为了支持 FCC业务和RET业务,媒体增强业务服务器需要实时同步地缓存一定时间段的媒体报文。在媒体报文的编码格式中,将用于传输媒体报文的各帧分为关键帧和其它数据帧。关键帧可以是起始内部编码帧(Intra-coded Frame,简称I帧),其它数据帧可以是 预知中贞(Previous Frame,简称P中贞)禾口双向预知中贞(Bidirection Previous Frame,简称 B帧)等。其中,关键帧为显示一个完整的画面所需的控制信息,而其它数据帧记录的是相对于关键帧的变化信息,其它数据帧需根据关键帧的信息进行正确解码。因此,终端需要接收到包括有关键帧的媒体报文才能显示画面。从一个关键帧开始到下一个关键帧之前的所有帧,构成了一个帧序列,称为GOP (Group of Pictures,简称图像组)序列,一个GOP序列是一组连续的画面。IPTV系统中,FCC服务器接收组播设备发送的媒体报文,对接收到媒体报文进行深度解析,识别并标识每个帧的帧类型,之后按接收顺序将媒体报文写入缓存。当接收到终端的FCC请求时,从缓存中当前写入媒体报文的位置向前查找,从当前位置的前两个关键帧位置开始,向终端推送该频道的媒体报文,以保证能推送给机顶盒一个完整的G0P。按照顺序依次存储媒体报文,在FCC切换时,查找关键帧消耗时间较长,不能快速定位到关键帧,因而影响了 FCC的效果。丢包重传时,遍历缓存中的报文,将丢失报文的序列号与遍历到的媒体报文的序列号进行比较,如果丢失报文的序列号与遍历到的媒体报文的序列号相同,将当前遍历到的报文进行重传。因此,在丢包重传过程中,查找丢失媒体报文的效率较低。现有技术按照顺序在缓存中依次存储待发送的媒体报文,查找待发送的报文时消耗的时间较长,不能快速定位到待发送的报文,影响了发送效果。

发明内容
本发明实施例提供一种媒体报文传输方法及装置,用以解决现有技术中查找待发送的报文消耗时间较长的缺陷。本发明实施例提供一种媒体报文传输方法,包括将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中;监测到终端请求所述频道的快速频道切换请求时,在为所述频道分配的GOP空间中查找参考G0P,所述参考GOP为在所述终端请求时刻之前最后一个写入所述缓存的GOP ;
若所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP中的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文;若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中,读取并向所述终端发送所述参考GOP的前一个GOP的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文。本发明实施例还提供一种媒体报文传输装置,其特征在于,包括写入模块,用于将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中;查找模块,用于监测到终端请求所述频道的快速频道切换请求时,在为所述频道分配的GOP空间中查找参考G0P,所述参考GOP为在所述终端请求时刻之前最后一个写入所述缓存的GOP ;判断模块,用于判断所述参考GOP包括的报文数量是否达到预设报文数;第一发送模块,用于若所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP中的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文;第二发送模块,用于若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中,所述参考GOP的前一个GOP中的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文。本发明实施例的媒体报文传输方法及装置,网络侧设备将接收到的各频道的媒体报文,以包含关键帧的GOP为单位在缓存中写入各频道的媒体报文。接收到终端的快速频道切换请求时,网络侧设备可在缓存中快速查找到在该终端请求时刻之前切换后频道最后一个被写入的G0P。由于每个GOP中均包括关键帧,因此,网络侧设备在接收到终端的快速频道切换请求时,可快速定位到在终端请求时刻之前最后一个写入缓存的关键帧,不需要为识别关键帧引入查找算法,缩短了在快速频道切换过程中查找最近关键帧的时间。另外, 网络侧设备根据参考GOP中报文数量,确定从最后一个被写入的GOP开始向终端推送媒体报文,还是从最后一个被写入的GOP的前一个GOP开始向终端推送媒体报文,从而终端在接收到网络侧推送的媒体报文后可及时解码并显示画面。本发明实施例还提供另一种媒体报文传输方法,包括将待发送的媒体报文以GOP为单位存入缓存中的GOP空间中;接收到接收端的丢包重传请求时,根据所述丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,所述丢失报文的序列号小于等于所述关键GOP中媒体报文的最大序列号且大于等于所述关键GOP中媒体报文的最小序列号;在所述关键GOP中定位与所述丢失报文的序列号的媒体报文,并向所述接收端发送。本发明实施例还提供另一种媒体报文传输装置,其特征在于,包括写缓存模块,用于将待发送的媒体报文以GOP为单位存入缓存中的GOP空间中;GOP查找模块,用于接收到接收端的丢包重传请求时,根据所述丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,所述丢失报文的序列号小于等于所述关键GOP中媒体报文的最大序列号且大于等于所述关键GOP中媒体报文的最小序列号;报文发送模块,用于在所述关键GOP中定位与所述丢失报文的序列号的媒体报文,并向所述接收端发送。本发明实施例的媒体报文传输方法及装置,媒体报文以GOP为单位顺序存储在缓存中的GOP空间。媒体报文传输过程中发生丢包时,根据丢包重传请求中丢失报文的序列号,先在缓存中查找关键G0P,丢失报文的序列号在关键GOP中媒体报文的最大序列号和最小序列号之间。之后,在关键GOP中直接定位与丢失报文的序列号相匹配的媒体报文。由于本实施例不需要在缓存顺序查找与丢包重传请求中丢失报文的序列号相匹配的媒体报文, 因此本发明实施例提高了查找丢失报文的效率。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图IA为本发明实施例提供的一种媒体报文传输方法流程图;图IB为以循环队列存储GOP的缓存结构示意图;图2A为本发明实施例提供的另一种媒体报文传输方法中在一个GOP中写入接收到媒体报文的方法流程图;图2B为本发明实施例提供的又一种媒体报文传输方法中在一个GOP中写入接收到媒体报文的方法流程图;图3为本发明实施例提供的再一种媒体报文传输方法流程图;图4为本发明实施例提供的一种GOP的数据结构示意图;图5为本发明实施例提供的一种媒体报文传输装置结构示意图;图6为本发明实施例提供的另一种媒体报文传输装置结构示意图;图7为本发明实施例提供的又一种媒体报文传输装置结构示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。如下各实施例中,网络侧设备可为计算机等设备,用户终端可以是手机,笔记本电脑,数字机顶盒、个人数字助理等。网络侧设备执行的各步骤以及媒体报文传输装置各模块执行的功能均可由计算机等设备的处理器执行。图IA为本发明实施例提供的一种媒体报文传输方法流程图,图IB为以循环队列存储GOP的缓存结构示意图。本实施例中的执行主体为IPTV系统中的网络侧设备,例如 FCC服务器。如图IA所示,本实施例提供的媒体报文传输方法包括步骤11 网络侧设备将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为该频道分配的GOP空间中。网络侧设备在缓存中分别为每个频道分配有预设个数的GOP空间,一个频道的每个GOP的空间大小相同,但实际存储过程中每个GOP存储的报文数量可能不同,即GOP时间长度是可配的。一个频道的最大GOP个数根据cache时间和GOP时间而定,cache时间除以 GOP时间,为该频道分配的最大GOP个数。如果cache时间过长,Cache中会有多个G0P,而在快速频道切换过程中时间上太陈旧的GOP不需要推送给终端,从而造成存储空间浪费; 如果cache时间过短,整个Cache空间都不足以存储一个G0P,而且一个GOP的播放时间有可能过短,无法满足终端的快速频道切换需求。如果GOP时间过长,造成空间浪费;如果GOP 时间过短,有可能不能完全保存媒体报文,从而产生丢失报文的现象。如果关键帧在GOP的第一个位置不会被丢失,但关键帧后面的报文丢失后,终端接收到网络侧设备从缓存中推送的单播媒体报文时,有可能产生花屏现象。GOP的空间大小可根据频道速率和缺省GOP时间设定,GOP个数根据缓存时间和GOP时间而定,以保证一个GOP的空间可以存储一个完整的GOP序列。网络侧设备从每个频道对应的组播设备获取每个频道的媒体报文,将每个频道的媒体报文以GOP为单位,分别写入为每个频道分配的GOP空间中,每个OOP均包括关键帧。 一个GOP中可只包括一个关键帧。随着媒体报文的接收,每个频道的GOP空间中缓存的媒体报文被循环覆盖。如图IB所示,在缓存中为某频道默认分配有4个GOP空间,4个GOP以环形队列结构存储。在接收到该频道的媒体报文时,将媒体报文以GOP为单位依次写入到 G0PUG0P2和G0P3以及G0P4。在G0P4中也存储数据后,在没有终端请求频道时,将后续接收到的媒体报文再依次写入到G0P1、G0P2和G0P3以及G0P4,依次循环。步骤12 监测到终端请求该频道的快速频道切换请求时,在为该频道分配的GOP 空间中查找参考G0P,参考GOP为在终端请求时刻之前最后一个写入缓存的G0P。网络侧设备监测到终端的快速频道切换时,在为终端请求的频道的所分配的GOP 空间中,查找在所述终端请求时刻之前最后一个写入所述缓存的G0P,即参考G0P。步骤13 若参考GOP包括的报文数量达到预设报文数,在为该频道分配的GOP空间中,读取参考GOP的媒体报文和在参考GOP之后写入缓存的该频道的媒体报文,并向终端发送读取的媒体报文。网络侧设备在为该频道分配的GOP空间中查找参考GOP时,首先确定在终端请求时刻之前最后一个写入缓存的G0P,判断最后一个写入缓存的GOP其中包括的报文数量是否达到预设报文数,即最后一个写入缓存的GOP的播放时间是否达到预设时间。如果最后一个写入缓存的GOP中包括的报文数量达到预设报文数,终端接收到最后一个写入缓存的 GOP中的媒体报文后,可以对接收到媒体报文进行解码并播放。如果最后一个写入缓存的 GOP中包括的报文数量未达到预设报文数,终端接收到最后一个写入缓存的GOP后,需要等待一定数量的媒体报文,才能进行解码。因此,如果最后一个写入缓存的GOP中包括的报文数量未达到预设报文数,终端不能对接收到的媒体报文及时进行解码。参考GOP包括的报文数量达到预设报文数时,在为所述频道分配的GOP空间中,依次读取所述参考GOP的媒体报文和在所述参考GOP之后缓存的所述频道的媒体报文后,向终端单播发送从GOP中读取的媒体报文,从而终端在发送请求之后的最短时间内播放媒体报文。进一步,由于终端在视频解码时,必须要有关键帧才能开始解码,如果关键帧不在第一个位置,在向终端推送媒体报文时需要在GOP中查找关键帧。为提高向终端推送媒体报文的效率,可将关键帧置于GOP的第一个位置。步骤14 若参考GOP包括的报文数量未达到预设报文数,在为该频道分配的GOP 空间中,读取参考GOP的前一个GOP的媒体报文和在参考GOP的前一个GOP之后写入缓存的该频道的媒体报文,并向终端发送读取的媒体报文。如果参考GOP包括的报文数量未达到预设报文数,为使终端接收到媒体报文后能及时开始解码,从参考GOP的前一个GOP开始向终端发送媒体报文。因此,本发明实施例中在缓存中分别可为每个频道预设至少两个G0P,从参考GOP的前一个GOP开始向终端发送媒体报文具体如下在为该频道分配的GOP空间中查找参考GOP的前一个G0P,依次读取参考 GOP的前一个GOP的媒体报文和在所述参考GOP的前一个GOP之后缓存的所述频道的媒体报文,并向终端单播发送。本发明实施例的媒体报文传输方法,网络侧设备将接收到的各频道的媒体报文, 以包含关键帧的GOP为单位在缓存中写入各频道的媒体报文。接收到终端的快速频道切换请求时,网络侧设备可在缓存中快速查找到在该终端请求时刻之前切换后频道最后一个被写入的G0P。由于每个GOP中均包括关键帧,因此,网络侧设备在接收到终端的快速频道切换请求时,可快速定位到在终端请求时刻之前最后一个写入缓存的关键帧,不需要为识别关键帧引入查找算法,缩短了在快速频道切换过程中查找最近关键帧的时间。另外,网络侧设备根据参考GOP中报文数量,确定从最后一个被写入的GOP开始向终端推送媒体报文,还是从最后一个被写入的GOP的前一个GOP开始向终端推送媒体报文,从而终端在接收到网络侧推送的媒体报文后可及时解码并显示画面。图2A为本发明实施例提供的另一种媒体报文传输方法中在一个GOP中写入接收到媒体报文的方法流程图。本实施例主要说明在读取一个GOP时若发生写该G0P,如何处理写GOP的方法。如图2A所示,本实施例包括步骤21 在缓存中确定待写入接收到媒体报文的GOP后,判断待写入GOP的引用计数是否为零。从一个GOP中读取媒体报文时有可能会向该GOP中写入从组播设备处接收到的媒体报文,即在读取一个GOP时有可能产生写该GOP的现象。由于在GOP中写入媒体报文时需要先清空该GOP中所有媒体报文,在读取一个GOP时若写该G0P,向终端推送的媒体报文会发生错误。另外,网络侧设备有可能会同时向多个发生快速频道切换的终端,单播推送一个频道的媒体报文。因此,为在读GOP时避免发生写该GOP的现象,本实施例为缓存每个GOP 分别建立一个引用计数,通过引用计数可记录网络侧设备正向多少个终端单播推送该GOP 中的媒体报文,引用计数的初始值可为零。网络侧设备向终端发送一个GOP中的媒体报文之前,先从该GOP中读取媒体报文, 从一个GOP中读取数据的过程如下先将该GOP对应的引用计数加一;之后在该GOP中读取媒体报文。在该GOP中读取完媒体报文后,将该GOP对应的引用计数减一。进一步,可为每个引用计数建立自旋锁。在修改引用计数时先通过与该引用计数对应的自旋锁,判断该引用计数是否已被锁定。若已被锁定,待解锁后才可修改该引用计数。只有在该引用计数没有被锁定时,才可修改该引用计数。具体地,判断所述参考GOP的引用计数所对应的自旋锁是否已被锁定;所述缓存中每个GOP分别对应一个引用计数,每个引用计数对应一个自旋锁;若所述引用计数对应的自旋锁没有被锁定,将所述引用计数对应的自旋锁锁定后,将所述参考GOP对应的引用计数加一;从所述参考GOP中读取媒体报文;将所述参考GOP对应的引用计数减一,之后将所述引用计数对应的自旋解锁。向多个终端同时推送同一个GOP中数据时,对该GOP的引用计数进行同时修改,通过自旋锁可防止对该GOP的引用计数进行同时修改,在同一时刻允许一个终端对引用计数进行修改。步骤22 在待写入GOP对应的引用计数为零时,将接收到的媒体报文写入待写入 GOP。在待写入GOP中写入媒体报文时,可通过可待写入GOP对应的引用计数来判断当前是否有读取该GOP的操作,并可获知当前有多少个终端正在单播接收该GOP中媒体报文。 在一个GOP的引用计数为零时,表明网络侧设备没有向任何终端推送该GOP中媒体报文,此时可在该GOP中写入新接收到的媒体报文。步骤23a 在待写入GOP对应的引用计数不为零时,在待写入GOP之前增加一个新 G0P,将接收到的媒体报文写入新G0P。在一个GOP的引用计数不为零时,表明网络侧设备正在读取该GOP中媒体报文并向终端发送。此时,可在待写入GOP之前为该待写入GOP对应的频道增加一个新G0P,将接收到的媒体报文写入所述新GOP中,从而可避免由于GOP空间个数过少而产生一个GOP时发生写该GOP的现象。进一步,如图2B所示,在待写入GOP对应的引用计数不为零时,还可执行以下步骤步骤23b 待写入GOP对应的引用计数不为零时,判断缓存中待写入GOP对应频道的GOP空间的个数是否达到GOP增加阈值。如果是,执行步骤M ;否则执行步骤25。步骤M 若缓存中待写入GOP对应频道的GOP空间的个数达到GOP增加阈值,将待写入GOP转入到临时GOP空间,在待写入GOP所在位置为频道增加一个新G0P,并将接收到的媒体报文写入新G0P。若缓存中待写入GOP对应频道的GOP空间的个数达到GOP增加阈值,将待写入GOP 转入到临时GOP空间即将待写入GOP作为临时GOP空间,临时GOP空间不属于为频道分配的GOP空间。网络侧设备需要读取该临时GOP中媒体报文时,从临时GOP空间中读取媒体报文向终端推送。当该临时GOP空间的引用计数为零时,即网络侧设备不再向任何终端推送该临时GOP空间中媒体报文,可清空该临时GOP空间中媒体报文并释放该临时GOP空间。 将待写入GOP转入到临时GOP空间后,在待写入GOP所在位置为频道增加一个新G0P,并将接收到的媒体报文写入新G0P。在缓存中待写入GOP对应频道的GOP空间的个数达到GOP增加阈值时还有一种处理方法将待写入GOP中的媒体报文写入到临时GOP空间,将接收到的媒体报文写入待写入GOP中。此情况下,临时GOP空间也不属于为频道分配的GOP空间,可以在待写入GOP对应频道的GOP空间的个数达到GOP增加阈值时即时建立,也可以预先建立。网络侧设备需要读取该临时GOP中媒体报文时,从临时GOP空间中读取媒体报文向终端推送。当该临时 GOP空间的引用计数为零时,即网络侧设备不再向任何终端推送该临时GOP空间中媒体报文,可清空该临时GOP空间中媒体报文并且释放该临时GOP空间。
步骤25 若缓存中待写入GOP对应频道的GOP空间的个数未达到GOP增加阈值,在待写入GOP之前为待写入GOP对应频道增加一个新G0P,将接收到的媒体报文写入新G0P。进一步,为频道分配新的GOP空间后,该频道的GOP空间利用率较低时,可减少该频道的GOP空间,以节省存储空间。具体方法如下在一个GOP中写入接收到的媒体报文之前,统计缓存中该GOP对应频道的非空闲GOP的个数;在非空闲GOP的个数小于缓存中为该频道分配的预设GOP个数时,释放空闲GOP空间,使为该频道占用的GOP空间个数达到该频道分配的预设GOP个数。本实施例,在待写入GOP中写入媒体报文时,通过待写入GOP对应的引用计数可确定当前是否已存在读该待写入GOP的操作。在待写入GOP对应的引用计数为零时,将接收到的媒体报文写入待写入GOP中。在所述待写入GOP对应的引用计数不为零时,在待写入 GOP之前增加一个新G0P,将接收到的媒体报文写入新GOP中。因此,本实施例通过动态增加GOP空间的方法,避免了读GOP时发生写该GOP的现象。另外,本实施例在一个频道的一个GOP中写入接收到的媒体报文之前,还根据统计到的该频道的非空闲GOP的个数,动态释放该频道的空闲GOP空间,节省了缓存空间。图3为本发明实施例提供的再一种媒体报文传输方法流程图。本实施例主要说明媒体报文传输过程发生丢包时如何进行丢包重传。如图3所示,本实施例包括步骤31 发送端将媒体报文以GOP为单位顺序存入缓存中的GOP空间中。每个GOP中媒体报文按照序列号从最小到大依次存储。步骤32 发送端接收到接收端的丢包重传请求时,根据丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,丢失报文的序列号小于等于关键GOP中媒体报文的最大序列号且大于等于关键GOP中媒体报文的最小序列号。遍历缓存中每个G0P,将所述丢包重传请求中携带的丢失报文的序列号,与GOP中媒体报文的最大序列号和最小序列号进行比较,如果丢失报文的序列号在当前比较的GOP 中媒体报文的最大序列号和最小序列号之间,则确定当前比较的GOP为关键G0P。步骤33 发送端在关键GOP中定位与所述丢失报文的序列号的媒体报文,并向接收端发送。本实施例,媒体报文以GOP为单位顺序存储在缓存中的GOP空间。媒体报文传输过程中发生丢包时,根据丢包重传请求中丢失报文的序列号,先在缓存中查找关键G0P,丢失报文的序列号在关键GOP中媒体报文的最大序列号和最小序列号之间。之后,在关键GOP 中直接定位与丢失报文的序列号相匹配的媒体报文。由于本实施例不需要在缓存顺序查找与丢包重传请求中丢失报文的序列号相匹配的媒体报文,因此本实施例提高了查找丢失报文的效率。图4为本发明实施例提供的一种GOP的数据结构示意图。缓存中GOP可组织成循环队列,该循环队列可采用链表形式存储。如图4所示,RING_DLL_S节点为循环队列中一个 G0P,包括 pstGOPPtr、usSeqMin, usSeqMax, pstPre 和 pstNext 等指针。其中,UsSeqMin 存储该GOP中媒体报文的最小序列号,udeqMax存储该GOP中媒体报文的最大序列号,pstPre 存储环形队列中该GOP的前一个GOP的地址,pstNext存储循环队列中该GOP的下一个GOP 的地址,通过pstNext两个指针,在读/写GOP过程中,可查找到下一个GOP的存储位置。 pstGOPPtr 指针指向节点 G0P_N0DE_S。
pstGOPPtr指针指向节点G0P_N0DE_S。G0P_N0DE_S用于存储该GOP的具体信息,包括引用计数refCnt、refCnt的自旋锁spinlock、该GOP中写入的媒体报文的个数ulWritehdex、该GOP中第一报文的地址pPktBuf和读时发生写的标志overwrite等。 RING_DLL_S通过pstGOPPtr指针,可在RING_DLL_S节点中灵活删除或连接一个GOP的具体信息。pHitBuf放报文的指针的一个数组。数组中元素的个数是ulfeitelndex。uskqMax 与usSeqMin的差值加一等于ulWritehdex。下面以图4中提供的GOP数据结构为例说明在一个GOP中写入接收到的媒体报文的过程和从一 GOP中读取媒体报文的过程。 如图4所示,当前读指针已循环到G0P2,先通过G0P2对应RING_DLL_S_2中 pstGOPPtr指针确定存储G0P2的具体信息的G0P_N0DE_S_2节点,通过spinlock值判断 refCnt是否正在被修改即判断refCnt是否已被锁定。若是等待,否则修改spinlock的值以锁定refCnt,将refCnt的数值加一,之后修改spinlock值以对refCnt开锁。然后从G0P_ N0DE_S_2节点中pPktBuf指针所指针的地址中读取数据,在读取数据后将refCnt的数值减一。同样,修改refCnt前,需先通过spinlock的值判断refCnt是否已被锁定。如图4所示,当前写指针已循环到G0P2,即需要在G0P2写入接收到的媒体报文。 此时,通过G0P2对应RING_DLL_S_2节点中pstGOPPtr指针确定存储G0P2的具体信息的 G0P_N0DE_S_2节点,判断G0P_N0DE_S_2节点中refCnt的数值是否为零。若是,表明当前没有向终端推送G0P2,直接将接收到的媒体报文写入到G0P_N0DE_S_2节点中pPktBuf指针所指的地址中。若refCnt的值不为零,表明当前正向终端推送G0P2。为避免读时发生写的标志, 在RING_DLL_S_2节点之前增加一个RING_DLL_S节点,修改RING_DLL_S_2节点的pstPre 指针使其指向新增的RING_DLL_S节点,修改RING_DLL_S_1节点的pstNext指针使其指向新增的RING_DLL_S节点,将接收到的媒体报文写入到新增的RING_DLL_S中pPktBuf指针所指的地址中。进一步,若refCnt的值不为零且G0P2对应频道的GOP空间的个数达到GOP增加阈值,修改G0P2对应RING_DLL_S_2节点中pstGOPPtr指针,使其指向临时G0P_N0DE_S节点,从而取消G0P_N0DE_S_2节点与RING_DLL_S_2节点的连接。分配一个新的G0P_N0DE_ S节点,使RING_DLL_S_2节点中pstGOPPtr指针指向新的G0P_N0DE_S节点,将所述待写入 G0P2中媒体报文写入新的G0P_N0DE_S节点中pPktBuf指针所指的地址中。取消G0P_N0DE_S_2节点与RING_DLL_S_2节点的连接,可使G0P2中媒体报文从原有的GOP空间中转存到临时GOP空间中。在向终端推送G0P2中媒体报文时,可继续从G0P_ N0DE_S_2节点读取媒体报文。当G0P_N0DE_S_2节点的引用计数refCnt为零时,即不再向任何终端推送G0P_N0DE_S_2节点中媒体报文时,可清空G0P_N0DE_S_2节点中媒体报文或释放 G0P_N0DE_S_2 节点。下面以图4中提供的GOP数据结构为例说明在GOP中查找丢失媒体报文过程。从GOPl开始匹配丢失报文的序列号,如果丢失报文的序列号小于等于RING_DLL_ S_1节点中USkqMax且大于等于RING_DLL_S_1节点中uskqMin,则表明丢失的媒体报文存储在GOPl中,则在GOPl中查找丢失报文的序列号相等的媒体报文;如果丢失报文的序列号不在RING_DLL_S_1节点中usSeqMin和UsSeqMax之间,则通过RING_DLL_S_1节点的pstNext指针查找RING_DLL_S_2节点,继续与点RING_DLL_S_2节点中的uskqMin和 UsSeqMax进行比较。在GOPl中查找丢失报文的序列号相等的媒体报文过程如下通过RING_DLL_S_1 节点的pstGOPPtr指针,查找G0P_N0DE_S_1节点,根据G0P_N0DE_S_1节点中的pPktBuf指针,可查找到存储在GOPl的第一个媒体报文,将丢失报文的序列号依次与GOPl中媒体报文的序列号进行比较,由于GOPl中媒体报文按照媒体报文的序列号进行升序排列,因此可通过顺序查找方法在GOPl快速查找到与丢失报文的序列号相等的媒体报文。图5为本发明实施例提供的一种媒体报文传输装置结构示意图。媒体报文传输装置,可以是网络侧设备,例如FCC服务器。如图5所示,本实施例提供的媒体报文传输装置包括写入模块51、查找模块52、判断模块53和第一发送模块M以及第二发送模块55。写入模块51,用于将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中。进一步,GOP中的关键帧位于GOP的第一个位置。查找模块52,用于监测到终端请求所述频道的快速频道切换请求时,在为所述频道分配的GOP空间中查找参考G0P,所述参考GOP为在所述终端请求时刻之前最后一个写入所述缓存的GOP。判断模块53,用于判断查找模块52查找到的所述参考GOP包括的报文数量是否达到预设报文数。第一发送模块54,用于若判断模块53确定所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP的媒体报文和在所述参考GOP 之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文。第二发送模块55,用于若判断模块53确定所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中,读取参考GOP的前一个GOP中的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文。以上各模块实现的功能可参见图IA对应实施例中描述,在此不再赘述。本发明实施例的媒体报文传输装置接收到的各频道的媒体报文,以包含关键帧的 GOP为单位在缓存中写入各频道的媒体报文。接收到终端的快速频道切换请求时,媒体报文传输装置可在缓存中快速查找到在该终端请求时刻之前切换后频道最后一个被写入的 G0P。由于每个GOP中均包括关键帧,因此,媒体报文传输装置在接收到终端的快速频道切换请求时,可快速定位到在终端请求时刻之前最后一个写入缓存的关键帧,不需要为识别关键帧引入查找算法,缩短了在快速频道切换过程中查找最近关键帧的时间。另外,网络侧设备根据参考GOP中报文数量,确定从最后一个被写入的GOP开始向终端推送媒体报文,还是从最后一个被写入的GOP的前一个GOP开始向终端推送媒体报文,从而终端在接收到网络侧推送的媒体报文后可及时解码并显示画面。其中,第一发送模块M包括第一读取单元和第一发送单元。第一读取单元,用于若所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文。第一发送单元,用于向所述终端发送所述第一读取单元读取的媒体报文。
其中,所述第二发送模块55包括第二读取单元和第二发送单元。第二读取单元, 用于若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中, 读取所述参考GOP的前一个GOP的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文。第二发送单元,用于向所述终端发送所述第二读取单元读取的媒体报文。进一步,第一读取单元或第二读取单元,具体用于将所述参考GOP对应的引用计数加一;从所述参考GOP中读取媒体报文,之后将所述参考GOP对应的引用计数减一;所述缓存中每个GOP分别对应一个引用计数。更进一步,所述第一读取单元,具体用于判断所述参考GOP的引用计数所对应的自旋锁是否已被锁定;若所述引用计数对应的自旋锁没有被锁定,将所述引用计数对应的自旋锁锁定后,将所述参考GOP对应的引用计数加一;从所述参考GOP中读取媒体报文;将所述参考GOP对应的引用计数减一,之后将所述引用计数对应的自旋解锁;所述缓存中每个GOP分别对应一个引用计数,每个引用计数对应一个自旋锁。第一读取单元或第二读取单元实现的功能可参见图2A和图4对应实施例中描述, 在此不再赘述。其中,写入模块51,具体用于在缓存中确定待写入接收到媒体报文的G0P,判断待写入GOP的引用计数是否为零;所述缓存中每个GOP分别对应一个引用计数;所述待写入 GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ;所述待写入GOP对应的引用计数不为零时,在所述待写入GOP之前增加一个新G0P,将接收到的媒体报文写入所述新G0P。此处,写入模块51实现的功能可参见图2A和图4对应实施例中描述,在此不再赘述。或者,写入模块51,具体用于在缓存中确定待写入接收到媒体报文的G0P,判断待写入GOP的引用计数是否为零;所述缓存中每个GOP分别对应一个引用计数;所述待写入 GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ;所述待写入GOP对应的引用计数不为零时,判断所述缓存中所述待写入GOP对应频道的GOP空间的个数是否达到GOP增加阈值;若所述缓存中所述待写入GOP对应频道的GOP空间的个数未达到GOP 增加阈值,在所述待写入GOP之前为所述频道增加一个新G0P,将接收到的媒体报文写入所述新GOP ;若所述缓存中所述待写入GOP对应频道的GOP空间的个数达到GOP增加阈值,将所述待写入GOP转入到临时GOP空间,在所述待写入GOP所在位置为频道增加一个新G0P, 并将接收到的媒体报文写入所述新G0P。此处,写入模块51实现的功能可参见图2B和图4 对应实施例中描述,在此不再赘述。图6为本发明实施例提供的另一种媒体报文传输装置结构示意图。如图6所示, 为节省存储空间,在图5的基础上还包括空间调整模块56。空间调整模块56,用于在一个GOP中写入接收到的媒体报文之前,统计所述缓存中所述频道的非空闲GOP的个数,非空闲GOP的引用计数为零;在所述非空闲GOP的个数小于缓存中为所述频道分配的预设GOP个数时,释放所述频道的空闲GOP空间,使为所述频道占用的GOP空间个数达到预设GOP个数。频道分配新的GOP空间后,空间调整模块56确定该频道的GOP空间利用率较低时,释放频道的空闲GOP空间,从而减少该频道的GOP空间,图7为本发明实施例提供的又一种媒体报文传输装置结构示意图。如图7所示,本实施例提供的媒体报文传输装置包括写缓存模块71,用于将待发送的媒体报文以GOP为单位存入缓存中的GOP空间中。GOP查找模块72,用于接收到接收端的丢包重传请求时,根据所述丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,所述丢失报文的序列号小于等于所述关键GOP中媒体报文的最大序列号且大于等于所述关键GOP中媒体报文的最小序列号。报文发送模块73,用于在所述关键GOP中定位GOP查找模块72查找到的、与所述丢失报文的序列号的媒体报文,并向所述接收端发送。上述模块实现的功能可参见图3和图4对应实施例中描述,在此不再赘述。由于本实施例不需要在缓存顺序定位与丢包重传请求中丢失报文的序列号相匹配的媒体报文, 因此本实施例提高了查找丢失报文的效率。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
权利要求
1.一种媒体报文传输方法,其特征在于,包括将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中;监测到终端请求所述频道的快速频道切换请求时,在为所述频道分配的GOP空间中查找参考G0P,所述参考GOP为在所述终端请求时刻之前最后一个写入所述缓存的GOP ;在所述参考GOP包括的报文数量达到预设报文数时,在为所述频道分配的GOP空间中, 读取所述参考GOP中的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文, 并向所述终端发送读取的媒体报文;若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中, 读取所述参考GOP的前一个GOP中的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文,并向所述终端发送读取的媒体报文。
2.根据权利要求1所述的方法,其特征在于,所述GOP中的关键帧位于所述GOP的第一个位置。
3.根据权利要求1所述的方法,其特征在于,所述缓存中每个GOP分别对应一个引用计数,读取所述参考GOP的媒体报文包括将所述参考GOP对应的引用计数加一; 从所述参考GOP中读取媒体报文; 将所述GOP对应的引用计数减一。
4.根据权利要求1所述的方法,其特征在于,所述缓存中每个GOP分别对应一个引用计数,每个引用计数对应一个自旋锁,读取所述参考GOP的媒体报文包括判断所述参考GOP的引用计数所对应的自旋锁是否已被锁定; 若所述引用计数对应的自旋锁没有被锁定,将所述引用计数对应的自旋锁锁定后,将所述参考GOP对应的引用计数加一; 从所述参考GOP中读取媒体报文;将所述参考GOP对应的引用计数减一,之后将所述引用计数对应的自旋解锁。
5.根据权利要求3或4所述的方法,其特征在于,将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中包括在缓存中确定待写入接收到媒体报文的GOP ; 判断待写入GOP的引用计数是否为零;所述待写入GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ; 所述待写入GOP对应的引用计数不为零时,在所述待写入GOP之前增加一个新GOPJf 接收到的媒体报文写入所述新G0P。
6.根据权利要求3或4所述的方法,其特征在于,将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中包括在缓存中确定待写入接收到媒体报文的GOP ; 判断待写入GOP的引用计数是否为零;所述待写入GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ; 所述待写入GOP对应的引用计数不为零时,判断所述缓存中所述待写入GOP对应频道的GOP空间的个数是否达到GOP增加阈值;若所述缓存中所述待写入GOP对应频道的GOP空间的个数未达到GOP增加阈值,在所述待写入GOP之前为所述频道增加一个新G0P,将接收到的媒体报文写入所述新GOP ;若所述缓存中所述待写入GOP对应频道的GOP空间的个数达到GOP增加阈值,将所述待写入GOP转入到临时GOP空间,在所述待写入GOP所在位置为所述频道增加一个新G0P, 并将接收到的媒体报文写入所述新G0P。
7.根据权利要求5所述的方法,其特征在于,在一个GOP中写入接收到的媒体报文之前,还包括统计所述缓存中所述频道的非空闲GOP的个数;所述非空闲GOP的引用计数为零; 在所述非空闲GOP的个数小于缓存中为所述频道分配的预设GOP个数时,释放所述频道的空闲GOP空间,使为所述频道占用的GOP空间个数达到预设GOP个数。
8.一种媒体报文传输装置,其特征在于,包括写入模块,用于将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为所述频道分配的GOP空间中;查找模块,用于监测到终端请求所述频道的快速频道切换请求时,在为所述频道分配的GOP空间中查找参考G0P,所述参考GOP为在所述终端请求时刻之前最后一个写入所述缓存的GOP ;判断模块,用于判断所述参考GOP包括的报文数量是否达到预设报文数; 第一发送模块,用于若所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取发送所述参考GOP中的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文,并向终端发送读取到的媒体报文;第二发送模块,用于若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP的前一个GOP中的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文。
9.根据权利要求8所述装置,其特征在于,所述GOP中的关键帧位于所述GOP的第一个位置。
10.根据权利要求9所述装置,其特征在于 所述第一发送模块包括第一读取单元,用于若所述参考GOP包括的报文数量达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP的媒体报文和在所述参考GOP之后写入缓存的所述频道的媒体报文;第一发送单元,用于向所述终端发送所述第一读取单元读取的媒体报文; 所述第二发送模块包括第二读取单元,用于若所述参考GOP包括的报文数量未达到预设报文数,在为所述频道分配的GOP空间中,读取所述参考GOP的前一个GOP的媒体报文和在所述参考GOP的前一个GOP之后写入缓存的所述频道的媒体报文;第二发送单元,用于向所述终端发送所述第二读取单元读取的媒体报文。
11.根据权利要求10所述装置,其特征在于所述第一读取单元或第二读取单元,具体用于将所述参考GOP对应的引用计数加一; 从所述参考GOP中读取媒体报文,之后将所述参考GOP对应的引用计数减一;所述缓存中每个GOP分别对应一个引用计数。
12.根据权利要求10所述装置,其特征在于所述第一读取单元或第二读取单元,具体用于判断所述参考GOP的引用计数所对应的自旋锁是否已被锁定;若所述引用计数对应的自旋锁没有被锁定,将所述引用计数对应的自旋锁锁定后,将所述参考GOP对应的引用计数加一;从所述参考GOP中读取媒体报文;将所述参考GOP对应的引用计数减一,之后将所述引用计数对应的自旋解锁;所述缓存中每个GOP分别对应一个引用计数,每个引用计数对应一个自旋锁。
13.根据权利要求11或12所述装置,其特征在于所述写入模块,具体用于在缓存中确定待写入接收到媒体报文的G0P,判断待写入GOP 的引用计数是否为零;所述缓存中每个GOP分别对应一个引用计数;所述待写入GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ;所述待写入GOP对应的引用计数不为零时,在所述待写入GOP之前增加一个新G0P,将接收到的媒体报文写入所述新 GOP ;或,所述写入模块,具体用于在缓存中确定待写入接收到媒体报文的G0P,判断待写入GOP 的引用计数是否为零;所述待写入GOP对应的引用计数为零时,将接收到的媒体报文写入所述待写入GOP ;所述待写入GOP对应的引用计数不为零时,判断所述缓存中所述待写入 GOP对应频道的GOP空间的个数是否达到GOP增加阈值;若所述缓存中所述待写入GOP对应频道的GOP空间的个数未达到GOP增加阈值,在所述待写入GOP之前为所述频道增加一个新G0P,将接收到的媒体报文写入所述新GOP ;若所述缓存中所述待写入GOP对应频道的 GOP空间的个数达到GOP增加阈值,将所述待写入GOP转入到临时GOP空间,在所述待写入 GOP所在位置为所述频道增加一个新G0P,并将接收到的媒体报文写入所述新G0P。
14.根据权利要求13所述装置,其特征在于,还包括空间调整模块,用于在一个GOP 中写入接收到的媒体报文之前,统计所述缓存中所述频道的非空闲GOP的个数,所述非空闲GOP的引用计数为零;在所述非空闲GOP的个数小于缓存中为所述频道分配的预设GOP 个数时,释放所述频道的空闲GOP空间,使为所述频道占用的GOP空间个数达到预设GOP个数。
15.一种媒体报文传输方法,其特征在于,包括将待发送的媒体报文以GOP为单位存入缓存中的GOP空间中;接收到接收端的丢包重传请求时,根据所述丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,所述丢失报文的序列号小于等于所述关键GOP中媒体报文的最大序列号且大于等于所述关键GOP中媒体报文的最小序列号;在所述关键GOP中定位与所述丢失报文的序列号的媒体报文,并向所述接收端发送。
16.一种媒体报文传输装置,其特征在于,包括写缓存模块,用于将待发送的媒体报文以GOP为单位存入缓存中的GOP空间中;GOP查找模块,用于接收到接收端的丢包重传请求时,根据所述丢包重传请求中携带的丢失报文的序列号在所述缓存中查找关键G0P,所述丢失报文的序列号小于等于所述关键 GOP中媒体报文的最大序列号且大于等于所述关键GOP中媒体报文的最小序列号;报文发送模块,用于在所述关键GOP中定位与所述丢失报文的序列号的媒体报文,并向所述接收端发送。
全文摘要
本发明提供一种媒体报文传输方法及装置。其中一种方法包括将接收到的频道的媒体报文,以包含关键帧的GOP为单位循环写入缓存中为频道分配的GOP空间中;监测到终端请求频道的快速频道切换请求时,在为频道分配的GOP空间中查找参考GOP,即为终端请求时刻之前最后一个写入缓存的GOP;若参考GOP包括的报文数量达到预设报文数,在为频道分配的GOP空间中,读取并向终端发送参考GOP的媒体报文和在参考GOP之后写入缓存的频道的媒体报文;否则,在为频道分配的GOP空间中,读取并向终端发送参考GOP的前一个GOP的媒体报文和在参考GOP的前一个GOP之后写入缓存的频道的媒体报文。本发明可快速定位到待发送的报文,提高了发送效率。
文档编号H04N21/647GK102355604SQ20111029568
公开日2012年2月15日 申请日期2011年9月28日 优先权日2011年9月28日
发明者于勇, 郭杰 申请人:华为数字技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1