发明内容
本发明提供了一种媒体流处理方法及其装置,用以解决在未知媒体流格式的情况下,现有技术无法处理媒体流的问题。
本发明提供的一种媒体流处理方法,包括:
接收媒体流数据包,并记录每个数据包的接收时间和数据包的长度;其中,每当设定时长到达时,将在该时长内接收到的数据包以及所记录的数据包接收时间信息和数据包长度信息,作为一个数据单元存储至媒体文件的数据区域。
上述方法中,在将数据单元存储至媒体文件的数据区域中时,将数据包接收时间信息和数据包长度信息设置于相应数据包的头区域,或设置于相应数据包负荷部分的头区域中。
上述方法中,将数据单元存储至媒体文件的数据区域时,还包括:将数据单元的总长度信息设置于数据单元的头区域;或/和,将数据单元中包含的数据包数量信息记录在所述数据区域中。
上述方法中,所述媒体文件还包括索引区域,该方法还包括:以所述设定时长的时间单位作为索引,将每个设定时长内接收到的数据包数量作为索引项设置于所述索引区域。
上述方法,还包括:当需要播放所述媒体文件时,从媒体文件数据区域的数据单元中获取媒体流数据包,并将获取到的数据包发送至媒体播放装置,其中,按照数据包的接收时间顺序,在每个所述设定时长内发送从相应数据单元中获取到的媒体流数据包。
上述方法中,在一个设定时长内发送从相应数据单元中获取到的媒体流数据包的步骤,包括:
根据相应数据单元中每个数据包的接收时间和数据包长度,分别获取所述数据单元中每个时间单元内接收到的数据包,并在每个时间单元内仅发送该时间单元内接收到的数据包,所述时间单元的长度小于所述设定时长。
上述方法中,其特征在于,所述媒体文件为高级系统格式ASF文件,所述数据单元为I帧组。
本发明提供的媒体流数据处理装置,其特征在于,包括:
接收单元,用于接收媒体流数据包;
记录单元,与所述接收单元连接,用于记录所述接收单元接收到的每个数据包的接收时间和数据包的长度;
存储单元,分别与所述接收单元和所述记录单元连接,用于每当设定时长到达时,将所述接收单元在该时长内接收到的数据包以及所述记录单元所记录的数据包接收时间信息和数据包长度信息,作为一个数据单元存储至媒体文件的数据区域。
上述装置中,所述存储单元具体用于,在将数据单元存储至媒体文件的数据区域中时,将数据包接收时间信息和数据包长度信息设置于相应数据包的头区域,或设置于相应数据包负荷部分的头区域中。
上述装置中,所述存储单元具体用于,在将数据单元存储至媒体文件的数据区域中时,将数据单元中包含的数据包数量信息记录在所述数据区域中;或/和,将数据单元的总长度信息设置于数据单元的头区域。
上述装置中,所述媒体文件还包括索引区域,所述存储单元还用于,以所述设定时长的时间单位作为索引,将每个设定时长内接收到的数据包数量作为索引项设置于所述索引区域。
上述装置,还包括:
获取单元,用于当需要播放所述媒体文件时,从媒体文件数据区域的数据单元中获取媒体流数据包;
发送单元,用于将所述获取单元获取到的媒体流数据包发送至媒体流播放装置,其中,按照数据包的接收时间顺序,在每个所述设定时长内发送从相应数据单元中获取到的媒体流数据包。
上述装置中,所述发送单元在一个设定时长内发送从相应数据单元中获取到的媒体流数据包时具体用于,根据相应数据单元中每个数据包的接收时间和数据包长度,分别获取所述数据单元中每个时间单元内接收到的数据包,并在每个时间单元内仅发送该时间单元内接收到的数据包,所述时间单元的长度小于所述设定时长。
本发明的有益技术效果包括:
通过在接收媒体流数据包时,记录每个数据包的接收时间和数据包长度,并每当设定时长到达时,将在该时长内接收到的数据包以及所记录的数据包接收时间信息和数据包长度信息,作为一个数据单元存储至媒体文件的数据区域,从而提供了一种通用的数据存储方式,而不用关心媒体流的数据格式。
本发明提供的另一种媒体流处理方法,包括:
从媒体文件数据区域的数据单元中获取媒体流数据包,其中,按照数据包的接收时间顺序,每个数据单元中存储的是相应设定时长内接收到的媒体流数据包;
将获取到的数据包发送至媒体播放装置,其中,按照数据包的接收时间顺序,在每个所述设定时长内发送从相应数据单元中获取到的媒体流数据包。
上述方法中,在一个设定时长内发送从相应数据单元中获取到的媒体流数据包的步骤,包括:根据相应数据单元中每个数据包的接收时间和数据包长度,分别获取所述数据单元中每个时间单元内接收到的数据包,并在每个时间单元内仅发送该时间单元内接收到的数据包,所述时间单元的长度小于所述设定时长。
上述方法中,所述媒体文件为ASF文件,所述数据单元为I帧组。
本发明提供的另一种媒体流数据处理装置,包括:
获取单元,用于从媒体文件的数据区域的数据单元中获取媒体流数据包,其中,按照数据包的接收时间顺序,每个数据单元中存储的是相应设定时长内接收到的媒体流数据包;
发送单元,用于将所述获取单元获取到的媒体流数据包发送给媒体流播放装置,其中,按照数据包的接收时间顺序,在每个所述设定时长内发送从相应数据单元中获取到的媒体流数据包。
上述装置中,所述发送单元在一个设定时长内发送从相应数据单元中获取到的媒体流数据包时具体用于,根据相应数据单元中每个数据包的接收时间和数据包长度,分别获取所述数据单元中每个时间单元内接收到的数据包,并在每个时间单元内仅发送该时间单元内接收到的数据包,所述时间单元的长度小于所述设定时长。
本发明的有益技术效果包括:
通过从媒体文件数据区域的数据单元获取数据包并发送到媒体播放装置时,按照数据包的接收时间顺序,在每个设定时长内发送从相应数据单元中获取到的媒体流数据包,从而提供了一种通用的媒体流数据回放方式,而不用关心媒体流数据的格式。
具体实施方式
为了解决现有技术存在的上述问题,本发明实施例通过在接收媒体流数据包时,记录每个数据包的接收时间和数据包的长度,其中,每当设定时长到达时,将在该时长内接收到的数据包以及所记录的数据包接收时间信息和数据包长度信息,作为一个数据单元存储至媒体文件的数据区域,从而在未知媒体流格式的情况下,提供了一种通用的存储方式。当需要播放以上述方式存储的媒体文件时,从媒体文件数据区域的数据单元中获取媒体流数据包,并将获取到的数据包发送至媒体播放装置,其中,按照数据包的接收时间在每个设定时长内发送从相应数据单元中获取到的媒体流数据包,从而在未知媒体流格式的情况下,提供了一种通用的回放方式。
为了更清楚的说明本发明实施例的实现过程,下面以ASF(AdvancedStreaming Format,高级串流格式)作为存储格式进行详细阐述。
ASF格式是一种可扩展文件格式,用于存储同步的多媒体数据。它支持通过各种网络和协议的数据传递,同时适用于本地播放。ASF格式分为三个部分:文件头区域、数据区域、索引区域。每个部分又包括头信息、具体数据两部分,如图1所示。其中:
文件头区域,记录有整个文件的属性,如播放的时间等;
数据区域,存储的是媒体流数据。数据按Data Packet(数据包)来管理,每个Data Packet包含有不同大小的Payload(负荷),Payload用来存储具体的数据。数据部分是以I帧组(GOP)为单位组织的,每一个存储I帧数据的Payload都有一个标志位,用来说明该Payload存储的是I帧数据;
索引区域,包括索引头和索引项,索引头中指出了索引区域的大小,索引项是以秒为单位组织的,每秒对应一个索引项,每个索引项中包含了要查找的Data Packet的号码,以及Data Packet的数量。
本发明实施例中,对于未知格式的媒体流数据,依然使用ASF格式的基本结构来存储,但是对数据区域所存储的内容进行了改进。
如图2所示,在本发明实施例所提供的ASF结构中数据区域中,数据以本发明实施例定义的GOP为单位组织,为区别现有GOP,将本发明实施例定义的GOP称为虚拟GOP。虚拟GOP内可包含多个Data Packet,一个虚拟GOP由1秒钟(该时长也可根据文件格式的规定自定义,对于ASF文件格式可定义为1秒)内收到的多个Data Packet组成,在一个虚拟GOP最前面是当前虚拟GOP的数据长度,在每一个Data Packet前面(即Data Packet头区域)分别记录有收到Data Packet时的时间戳(Object Time)和该Data Packet的长度(Object Size)。Data Packet的媒体流数据可存放在Payload中。
此外,该媒体流数据存储结构中,文件头区域可存储文件的属性信息;索引区域可存储索引信息(文件头区域和索引区域未在图2中示出)。
基于图2所示的媒体流数据存储结构,图3示出了数据存储流程。当接收到未知格式的媒体流的实况数据时,将接收到的媒体流数据存储到图2所示的存储结构中的过程,可包括:
步骤301、调用媒体流接口,获取媒体流数据。
该步骤中,可通过调用第三方实况收流接口(即接收媒体流的接口)来获取媒体流数据。
步骤302、在接收Data Packet时,针对接收到的每个Data Packet记录当前的系统时间(此处以time(n)表示,即接收第n个Data Packet时的系统时间),该时间可精确到毫秒,还记录Data Packet的长度(此处以length(n)表示,即第n个Data Packet的长度),并在缓存中保存接收到的Data Packet和对应于每个接收到的Data Packet所记录的系统时间和包长度。
步骤303、是否到达1秒,如果到达1秒,则执行步骤304;否则,参照步骤302的描述继续接收Data Packet以及进行相关记录(步骤305)。
该步骤中,由于图2所示的数据存储结构中的索引区域是以秒进行索引的,因此此处设置为1秒,即每经历1秒钟时执行步骤304。
步骤304、将上述1秒钟内接收到的Data Packet以及记录的系统时间和Data Packet的长度从缓存中读出,并写入图2所示的数据存储结构中的一个虚拟GOP。
该步骤中,在将缓存的数据写入图2所示的数据存储结构时,可在该虚拟GOP的头部的Size区域写入上述1秒中内接收到的所有Data Packet的长度,该值可通过每个Data Packet的长度计算得到;并针对上述1秒钟内缓存中保持的每个Data Packet,以第n个Data Packet为例,执行以下步骤:从缓存读出Data Packet n写入一个虚拟GOP的Data Packet区域中的Object Data区域,并在Data Packet n区域头部的Object Time区域写入Data Packet n的接收时间time(n),在Object Size区域写入Data Packet n长度length(n)。
步骤305、继续参照步骤302接收Data Packet以及进行相关记录。
当所有Data Packet接收完成之后,本流程结束。
进一步的,还可以在该数据存储结构中的文件头区域写入媒体流的属性信息,如媒体流的长度和媒体流的时长;流媒体的长度可根据文件头区域的长度、数据区域的长度和索引区域的长度计算得到,即三个区域长度之和;媒体流的时长即为接收该媒体流所用的时长。还可以在索引区域写入索引信息,其中,索引区域的索引头可指出该索引区域的长度,索引项可以是以秒为单位组织的,每秒对应一个索引项,每个索引项中包含了1秒钟内接收到的Data Packet的数量。
经过以上流程后,接收到的媒体流数据将以图2所示的数据存储结构存储,该数据存储结构基本与ASF文件结构相同,即以ASF文件格式方式存储接收到的媒体流数据,但数据区域是以虚拟GOP组织的,即以1秒钟内接收到的Data Packet进行组织,Data Packet对应的Object Time是接收到该DataPacket的系统时间。
需要说明的是,在执行步骤303以及步骤304的过程中,并不中断对DataPacket的接收和相关的记录操作。
图4示出了基于图2所示的媒体流数据存储结构所存储的媒体流的回放流程。当需要回放以图2所示的媒体流数据存储结构存储的媒体流时,如图4所示,该流程可包括:
步骤401、找到需要回放的媒体流数据的起始位置和结束位置。
该步骤中,由于图2所示的数据存储结构基本与ASF格式相同,因此可按照ASF格式方式找到需要回放的数据的起始位置和结束位置。具体的,如果回放的起始位置为媒体流的起始位置,则在图2所示的数据存储结构的数据区域中找到第一个虚拟GOP;如果回放的起始位置不是媒体流的起始位置,则可根据所选择的回放时间起点,在索引区域找到对应的索引项(索引项是以时间单位进行索引的),根据该索引项找到对应的虚拟GOP。由于本发明实施例中,虚拟GOP中记录的是1秒钟内接收到的Data Packet,而索引项也是以秒为单位进行索引的,因此,GOP和索引项存在一定的对应关系。这样,可通过回放时间起点找到对应的索引项,进而找到对应的虚拟GOP。同理,结束位置所对应的虚拟GOP也可以根据该方式确定。
步骤402、读取回放起始位置的虚拟GOP的长度,根据该长度读取一个虚拟GOP内的Data Packet到缓存中。
该步骤中,由于ASF Payload格式的关系,如果一个虚拟GOP包含多个Data Packet,则在读取Data Packet时需要过滤头信息,如过滤掉各Data Packet的Object Size信息和Object Time信息。
步骤403、将读入到缓存中的Data Packet发送给媒体播放装置进行回放。
该步骤中,可根据每个Data Packet的接收时间和Data Packet长度,分别获取虚拟GOP中每个时间单元内接收到的Data Packet,并在每个时间单元内仅发送该时间单元内接收到的Data Packet。本发明实施例中的虚拟GOP是以特定时间长度内接收到的Data Packet进行组织的,因此,上述每个时间单元都小于该特定时间长度,优选的,可以将该特定时间长度进行n(n为整数)等分,所得到的每个时间段就是一个时间单元。该时间单元可根据系统的时钟函数的精确度来确定。
以系统的时钟处理函数能够精确到25ms为例(即时间单元为25ms),步骤303的具体实现可以是:根据缓存中的每一个Data Packet前的时间戳和长度,找到虚拟GOP所包含的Data Packet中第一个25ms内的所有Data Packet,在第一个25ms内连续发送这些Data Packet,如果这些Data Packet发送完成了,但还未到25ms,则可等到到达25ms时再发送第二个25ms内的DataPacket,以此来控制媒体流的回放速度。以此类推,在一个25ms内的所有DataPacket发送完毕后,再发送下一个25ms内的所有Data Packet,直到一个虚拟GOP内的Data Packet发送完毕。
步骤404、在下一秒钟到达时,读取下一个虚拟GOP所包含的Data Packet到缓存,并按照步骤403的方式发送给媒体播放装置。当然,也可以预先将下一个虚拟GOP所包含的Data Packet读取到缓存中,在下一秒钟达到时,发送该预先读取的虚拟GOP所包含的Data Packet。
针对每个虚拟GOP重复以上操作,即在完成一个虚拟GOP所包含的DataPacket的回放操作后,将下一秒钟对应的虚拟GOP所包含的Data Packet进行回放,直到到达回放结束位置。
可以看出,对于接收到的媒体流实况数据按照本发明实施例提供的方式存储后,在回放时,再按照上述方式发送给媒体播放装置进行回放,其发送给媒体播放装置的方式与其接收媒体流实况数据的方式相应,对于媒体播放装置来说,可以基本还原该媒体流实况数据。
在本发明的另一实施例中,对于ASF格式文件,在向其存储媒体流数据时,可以不必在每个Data Packet之前记录时间戳和包长度信息,而只在Payload头区域中进行记录,这样可以节省存储空间,这是因为:根据ASF格式的规定,需要在Payload头区域中记录相关信息,如Data Packet的长度,因此就没有必要在每个Data Packet之前(即Data Packet头区域中)重复记录了。
在本发明的另一实施例中,对于ASF格式文件,在向其存储媒体流数据时,可以不必记录GOP的总长度,因为通过记录在Data Packet头区域中的Payload个数(该Payload个数也就是Data Packet个数)以及每个Data Packet的长度可以计算得到GOP的总长度,以便在媒体流回放时根据GOP长度读取其中的Data Packet,这样可以节省存储空间。
通过以上描述可以看出,本发明实施例通过将1秒钟内接收到的DataPacket作为一个GOP保存在ASF格式文件中的数据区域,从而不需要关心具体的媒体流格式,实现了统一存储。当需要进行媒体流回放时,可从该ASF中获取Data Packet,并按照接收的时间进行回放,从而实现了统一回放,并且对于具体的存储格式没有要求,且基本无需变化。
基于相同的技术构思,本发明实施例还提供了实现上述流程的媒体流数据处理装置。
如图5所示,媒体流数据处理装置1O可应用于图3所示流程,该装置可包括:接收单元301、记录单元302和存储单元303,其中:
接收单元301,用于接收媒体流数据包;
记录单元302,与接收单元301连接,用于记录接收单元301接收到的每个数据包的接收时间和数据包的长度;
存储单元303,分别与接收单元301和记录单元302连接,用于每当设定时长到达时,将接收单元301在该时长内接收到的数据包以及记录单元302所记录的数据包接收时间信息和数据包长度信息,作为一个数据单元存储至媒体文件的数据区域。
上述装置中,存储单元303可在将数据单元存储至媒体文件的数据区域中时,将数据包接收时间信息和数据包长度信息设置于相应数据包的头区域,或设置于相应数据包负荷部分的头区域中。
上述装置中,存储单元303还可在将数据单元存储至媒体文件的数据区域中时,将数据单元中包含的数据包数量信息记录在所述数据区域中。
上述装置中,数据单元包括头区域,相应的,存储单元303可在将数据单元存储至媒体文件的数据区域时,将数据单元的总长度信息设置于数据单元的头区域。
上述装置中,所述媒体文件还包括索引区域,相应的,存储单元303还可用于,以所述设定时长的时间单位作为索引,将每个设定时长内接收到的数据包数量作为索引项设置于所述索引区域。
如图6所示,媒体流数据处理装置20可应用于图4所示流程,该装置可包括:
获取单元601,用于从媒体文件的数据区域的数据单元中获取媒体流数据包,其中,按照数据包的接收时间顺序,每个数据单元中存储的是相应设定时长内接收到的媒体流数据包;
发送单元602,用于将获取单元601获取到的媒体流数据包发送给媒体流播放装置,其中,按照数据包的接收时间顺序,在每个设定时长内发送从相应数据单元中获取到的媒体流数据包。
上述装置中,发送单元602在一个设定时长内发送从相应数据单元中获取到的媒体流数据包时,可根据相应数据单元中每个数据包的接收时间和数据包长度,分别获取所述数据单元中每个时间单元内接收到的数据包,并在每个时间单元内仅发送该时间单元内接收到的数据包,所述时间单元的长度小于所述设定时长。
图5所示的媒体流数据处理装置10和图6所示的媒体流数据处理装置20相结合,可得到如图7所示的媒体流数据处理装置30,该装置中的各功能模块的具体功能和实现,分别与图5和图6中所示的功能模块相同或相似,在此不再赘述。
需要说明的是,以上实施例仅以ASF文件为例描述,本领域技术人员根据以上实施例的描述,可采用其它格式的文件实现上述技术方案。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者核心网节点设备等)执行本发明各个实施例所述的方法。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。