发明内容
本发明提供一种获取关键帧的系统及方法,能很好地解决基于HTTP直播模式下寻找关键帧的效率问题。
本发明提供一种获取关键帧的方法,包括:
在直播模式下生成媒体文件的过程中,在生成的每个分段中增加记录关键帧信息的字段,当查找关键帧时,通过所述记录关键帧信息的字段获取关键帧。
进一步地,在生成的每个分段中还增加指示所述记录关键帧信息的字段起始位置的字段。
进一步地,当采用ISO-14496-12定义的媒体文件格式作为生成的媒体文件格式时,在生成的媒体文件中的电影分段(moof)原子中增加记录关键帧信息的字段;
所述记录的关键帧信息包括:关键帧的录制时间、所述关键帧所属的轨道标识、轨道分段编号、轨道分段采样序列集编号以及采样编号。
进一步地,设所述记录关键帧信息的字段为轨道分段随机访问点(tfra)原子,所述分段中的每个轨道均对应一tfra原子,各tfra原子形成电影分段随机访问点(mfra)原子;
所述增加指示所述记录关键帧信息的字段起始位置的字段是指:
在所述moof原子中增加记录mfra原子相对于moof原子尾部偏移的原子。
进一步地,所述通过记录关键帧信息的字段获取关键帧是指:
当在直播模式下执行定位播放操作时,先根据定位时间计算出目标分段,并下载所述目标分段的moof原子和电影数据(mdat)原子,然后获取moof原子中的每个tfra原子,遍历每个tfra原子的关键帧信息,根据所述定位时间找到目标关键帧。
进一步地,所述通过记录关键帧信息的字段获取关键帧是指:
当在直播模式下执行快退操作时,从当前分段开始查找关键帧,下载当前分段的moof原子,读取所述moof原子中的tfra原子,当所述tfra原子中存在符合条件的关键帧时,以快退倍数为步长获取该tfra原子中的各关键帧信息,当所述tfra原子中不存在符合条件的关键帧时查找上一个分段;若正在查找的分段查找完成后继续查找上一个分段;
当查找到符合条件的关键帧信息后根据获取的关键帧信息找到对应的采样,进而下载并播放所述关键帧;
所述符合条件的关键帧指符合步长要求的关键帧。
进一步地,当在点播模式下执行快进操作时,以快进倍数为步长获取关键帧信息,并根据获取的关键帧信息找到对应的采样,进而下载并播放所述关键帧;
当在点播模式下执行快退操作时,以快退倍数为步长获取关键帧信息,并根据获取的关键帧信息找到对应的采样,进而下载并播放所述关键帧。
进一步地,所述获取moof原子中的每个tfra原子的方法为:
当生成的媒体文件中不包含指示记录mfra原子位置的电影分段随机访问点偏移(mfro)原子时,遍历目标分段中的moof原子,找到moof原子中的各tfra原子;
当生成的媒体文件中包含指示记录mfra原子位置的mfro原子时,先从所述moof原子尾部获取mfro原子,根据所述mfro原子指示的mfra原子相对traf原子尾部的偏移获取各tfra原子。
进一步地,所述根据所述定位时间找到目标关键帧是指,在每个tfra原子中查找录制时间与所述定位时间一致的关键帧,当不存在录制时间与所述定位时间一致的关键帧时,查找录制时间与所述定位时间最接近的关键帧。
本发明还提供一种获取关键帧的系统,包括生成模块、存储模块及查找模块;
所述生成模块,用于直播模式下生成媒体文件的过程中,在生成的每个分段中增加记录关键帧信息的字段;
所述存储模块,用于存储生成的媒体文件;
所述查找模块,用于查找关键帧时,通过所述记录关键帧信息的字段获取关键帧。
进一步地,所述生成模块还用于在生成的每个分段中生成指示所述记录关键帧信息的字段起始位置的字段。
进一步地,当采用ISO-14496-12定义的媒体文件格式作为生成的媒体文件格式时,在生成的媒体文件中的电影分段(moof)原子中增加记录关键帧信息的原子;
所述记录的关键帧信息包括:关键帧的录制时间、所述关键帧所属的轨道标识、轨道分段编号、轨道分段采样序列集编号以及采样编号。
进一步地,设所述记录关键帧信息的字段为轨道分段随机访问点(tfra)原子,所述分段中的每个轨道均对应一tfra原子,所述分段中的各tfra原子形成电影分段随机访问点(mfra)原子;
所述生成模块生成指示所述记录关键帧信息的字段起始位置的字段是指:
在所述moof原子中生成记录mfra原子相对于moof原子尾部偏移的原子。
进一步地,所述系统还包括下载模块;
当在直播模式下执行定位播放操作时,查找模块先根据定位时间计算出目标分段,然后查找所述目标分段的moof原子,并获取所述moof原子中的每个tfra原子,遍历每个tfra原子的关键帧信息,根据所述定位时间找到目标关键帧;
所述下载模块,用于下载所述目标分段的moof原子和电影数据(mdat)原子。
进一步地,所述系统还包括下载模块及播放模块;
当在直播模式下执行快退操作时,所述下载模块用于下载各分段的moof原子以及符合条件的关键帧;
所述查找模块用于读取所述moof原子中的tfra原子,当所述tfra原子中存在符合条件的关键帧时,以快退倍数为步长获取该tfra原子中的各关键帧信息,当所述tfra原子中不存在符合条件的关键帧时查找上一个分段中符合条件的关键帧,若正在查找的分段查找完成后继续查找上一个分段中符合条件的关键帧;
查找模块还用于当查找到符合条件的关键帧后根据获取的关键帧信息找到对应的采样;
所述播放模块,用于快退过程中播放下载的所述符合条件的关键帧;
所述符合条件的关键帧指符合步长要求的关键帧。
进一步地,所述系统还包括下载模块及播放模块;
所述查找模块还用于点播模式下执行快进操作时,以快进倍数为步长获取关键帧信息,并根据获取的关键帧信息找到对应的采样;以及点播模式下执行快退操作时,以快退倍数为步长获取关键帧信息,并根据获取的关键帧信息找到对应的采样;
所述下载模块,还用于点播模式下执行快进或快退操作的过程中下载查找的所述关键帧;
所述播放模块,还用于点播模式下执行快进或快退操作的过程中播放下载的所述关键帧。
进一步地,当生成的媒体文件中不包含指示记录mfra原子位置的电影分段随机访问点偏移(mfro)原子时,所述查找模块遍历目标分段中的moof原子,找到moof原子中的各tfra原子;
当生成的媒体文件中包含指示记录mfra原子位置的mfro原子时,所述查找模块先从所述moof原子尾部获取mfro原子,根据所述mfro原子指示的mfra原子相对traf原子尾部的偏移获取各tfra原子。
进一步地,所述查找模块根据所述定位时间找到目标关键帧是指,查找模块在每个tfra原子中查找录制时间与所述定位时间一致的关键帧,当不存在录制时间与所述定位时间一致的关键帧时,查找录制时间与所述定位时间最接近的关键帧。
本发明提供一种获取关键帧的系统及方法,能很好地克服现有技术中基于HTTP直播模式下定位播放或快退等时移操作中寻找关键帧的效率问题,从而提高服务器的处理能力,进而提升用户满意度。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明进行详细描述。
以下以ISO-14496-12定义的媒体文件格式详细描述本发明,但本发明所述方法不限于采用ISO-14496-12定义的媒体文件格式。
在提供HTTP Streaming服务时,不少厂家采用ISO-14496-12定义的媒体文件格式来作为流媒体服务器上的媒体文件格式。图1是ISO-14496-12定义的文件格式。该格式中定义的moof(电影分段)原子和mfra(电影分段随机访问点)原子能够很好的基于HTTP进行点播和直播。在直播模式下,moof原子和mdat(电影数据)原子作为一个分段成对增加。直播结束时生成mfra原子,用来索引全部分段的关键帧。图2是ISO-14496-12定义的moof原子的结构示意图。moof原子中没有存储关键帧的信息,在直播模式下,由于不能生成全局关键帧索引mfra原子,用户进行快退操作或者定位播放操作时,寻找关键帧的效率非常低下。
本发明的实施方式就是在ISO-14496-12定义的moof原子加入mfra原子,用于在直播模式下记录每个fragment中的各个轨道的关键帧的信息,以便在直播模式下进行快退,定位播放等时移操作时能够快速找到关键帧,提高服务器端的处理能力。mfra原子包含一个或多个tfra原子和一个mfro(电影分段随机访问点偏移)原子。每个轨道对应一个tfra(轨道分段随机访问点)原子,记录该轨道的关键帧信息。而mfro原子描述mfra原子相对于moof原子尾部的偏移。mfro原子放在每个moof原子的最后,下载moof原子后,可以从文件尾获取mfro原子,mfro原子记录mfra原子相对于moof原子尾的偏移。获取该偏移后,可以访问到mfra原子,而不需要遍历moof原子寻找mfra原子。如此可以提高访问mfra原子的效率。ISO中约定为mfra原子只能有一个。本发明中mfra原子可以有多个。并且本发明中的mfra原子可以不包含mfro原子。当mfra原子中不包含mfro原子时,通过遍历moof原子找到mfra原子。在moof原子包含的mfra原子描述的是该分段的各个轨道的关键帧信息,被媒体文件直接包含的mfra原子描述整个媒体文件的各个轨道的关键帧信息。图4是本发明定义的moof原子的结构示意图。在标准媒体文件格式上的moof原子增加了mfra原子。在直播模式下,每生成一个fragment就会生成该fragment下所有轨道的关键帧的信息,各轨道的关键帧信息记录在mfra原子的tfra原子中,每个轨道均对应一tfra原子。在定位或快退等时移操作中就可以根据存储的关键帧信息用来查找关键帧,大大提高查找关键帧的效率。
本实施例提供一种获取关键帧的系统,如图3所示,包括生成模块、存储模块、查找模块、下载模块及播放模块;
生成模块,用于直播模式下生成媒体文件的过程中,在生成的每个分段中增加记录关键帧信息的字段;
存储模块,用于存储生成的媒体文件;
查找模块,用于查找关键帧时,通过记录关键帧信息的字段获取关键帧。
进一步地,生成模块还用于在生成的每个分段中生成指示记录关键帧信息的字段起始位置的字段。
当采用ISO-14496-12定义的媒体文件格式作为生成的媒体文件格式时,在生成的媒体文件中的moof原子中增加记录关键帧信息的原子;
记录的关键帧信息包括:关键帧的录制时间、关键帧所属的轨道ID(标识)、traf_number(轨道分段编号)、trun_number(轨道分段采样序列集编号)以及sample_number(采样编号)。
进一步地,设所述记录关键帧信息的字段为tfra原子,分段中的每个轨道均对应一tfra原子,该分段中的各tfra原子形成mfra原子;生成模块生成指示记录关键帧信息的字段起始位置的字段是指:在moof原子中生成记录mfra原子相对于moof原子尾部偏移的原子。
进一步地,当在直播模式下执行定位播放操作时,查找模块先根据定位时间计算出目标分段,然后查找目标分段的moof原子,并获取moof原子中的每个tfra原子,遍历每个tfra原子的关键帧信息,根据定位时间找到目标关键帧;
下载模块,用于在直播模式下执行定位播放操作时下载目标分段的moof原子和mdat原子,以及下载目标关键帧。
进一步地,下载模块还用于快退过程中下载各分段的moof原子,以及下载查找的符合条件的关键帧;
查找模块还用于当在直播模式下执行快退操作时,读取下载的moof原子中的tfra原子,当所述tfra原子中存在符合条件的关键帧时,以快退倍数为步长获取该tfra原子中的各关键帧信息,当所述tfra原子中不存在符合条件的关键帧时查找上一个分段中符合条件的关键帧,若正在查找的分段查找完成后继续查找上一个分段中符合条件的关键帧;查找模块用于还用于当查找到符合条件的关键帧后根据获取的关键帧信息找到对应的sample。
符合条件的关键帧指符合步长要求的关键帧。
播放模块,用于直播模式下进行定位操作或快退操作时播放查找的关键帧。
查找模块还用于点播模式下执行快进操作时,以快进倍数为步长获取tfra原子中的关键帧信息,并根据获取的关键帧信息找到对应的sample;以及点播模式下执行快退操作时,以快退倍数为步长获取tfra原子中的关键帧信息,并根据获取的关键帧信息找到对应的sample;
下载模块还用于点播模式下执行快进或快退操作的过程中下载查找的关键帧;
播放模块,还用于点播模式下执行快进或快退操作的过程中播放下载的关键帧。
进一步地,当生成的媒体文件中不包含指示记录mfra原子位置的mfro原子时,查找模块遍历目标分段中的moof原子,找到moof原子中的各tfra原子;当生成的媒体文件中包含指示记录mfra原子位置的mfro原子时,查找模块先从moof原子尾部获取mfro原子,根据mfro原子指示的mfra原子相对traf原子尾部的偏移获取各tfra原子。
查找模块根据定位时间找到目标关键帧是指,查找模块在每个tfra原子中查找录制时间与所述定位时间一致的关键帧,当不存在录制时间与定位时间一致的关键帧时,查找录制时间与定位时间最接近的关键帧。
本实施例提供一种获取关键帧的方法,当直播模式下生成媒体文件的过程中,在生成的每个分段中增加记录关键帧信息的字段,当查找关键帧时,通过记录关键帧信息的字段获取关键帧。
如图5所示,使用本发明后在直播模式下生成分段索引的流程图。
步骤501,直播开始。
步骤502,生成ftyp原子,与现有技术保持一致。
步骤503,生成moov原子,与现有技术保持一致。
步骤504,判断直播是否结束,如果结束,则跳转到步骤515。如果直播没有结束,则跳转到步骤505。
步骤505,判断是否生成新的分段,如果是则跳转到步骤506,否则跳转到步骤507。
生成的每个fragment对应一个moof原子和一个mdat原子。
步骤506,生成mfhd原子,与现有技术保持一致。
步骤507,判断是否生成新的traf原子。如果是,则跳转到步骤508。否则跳转到步骤509。
步骤508,生成trhd原子,与现有技术保持一致。
步骤509,根据输入的采样(即当前输入的帧)填充trun原子,与现有技术保持一致。
步骤510,根据输入的采样(即当前输入的帧)填充mdat原子,与现有技术保持一致。
步骤511,判断分段是否结束,如果是,则跳转到步骤512,否则,则跳转到步骤504。
步骤512,生成该分段的mfra原子。
具体地,为该分段的生成一mfra原子,该mfra原子包含一个或多个记录轨道关键帧信息的字段,如tfra原子;每个tfra原子记录一个轨道的关键帧信息;
tfra原子记录的关键帧信息包括该关键帧的录制时间,该关键帧所属的轨道ID、traf_number、trun_number以及sample_number。
进一步地,mfra原子还可以包括指示记录关键帧信息字段(即tfra原子)的起始位置的字段,如mfro原子;mfro原子指示tfra原子的起始位置是指,mfro原子指示mfra原子相对于moof原子尾部的偏移,该偏移也即mfra原子头部、各tfra原子长度与mfro原子本身长度之和。
步骤513,生成最后一个分段的mfra原子。其方式同步骤512所述。
步骤514,生成整个媒体文件的mfra原子。与现有技术一致。
步骤515,结束。
如图6所示,使用本发明后在直播模式下执行定位播放进行时移的流程图。使用本发明之后可以加速对关键帧的查找。本实例中的直播假设只有视频流,即码流中只有一个轨道。
步骤601,客户端根据定位时间计算出目标fragment。
客户端的menifest里面记录了影片开始的绝对时间以及各个fragment的时长,因此可以计算出定位时间落在哪个fragment。
步骤602,判断定位时间是否超出时移范围,如果超出时移范围,则后跳转到步骤603。如果没有超出时移范围,则跳转到步骤604。
步骤603,提示用户定位时间超出时移范围,跳转到步骤611。
步骤604,从服务器上下载该目标fragment的moof原子和mdat原子。
步骤605,客户端读取下载的moof原子中的mfra原子。
具体地,若mfra原子中没有指示mfra原子起始位置的字段(即没有mfro原子)时,遍历moof原子获取mfra原子;
若moof原子中有指示mfra原子位置的字段(即有mfro原子)时,先从moof原子尾部获取mfro原子,根据mfro原子记录的mfra原子相对于moof原子尾部的偏移获取各tfra原子。
步骤606,遍历各tfra原子中的关键帧信息,根据定位时间找到目标关键帧信息的下列信息:轨道ID、traf_number,trun_number以及sample_number;
具体地,遍历各tfra原子中的关键帧信息,根据定位时间查找录制时间一致的关键帧,不完全一致则查找录制时间最接近的关键帧,并获取该目标关键帧的轨道ID、traf_number、trun_number以及sample_number。
步骤607,根据轨道ID找到该关键帧对应的轨道,进而根据traf_number找到对应的traf原子。
步骤608,根据trun_number在traf原子中找到对应的trun原子;
步骤609,根据sample_number在trun原子中找到对应的sample。获取该采样的偏移和长度。
步骤610,客户端从该关键帧开始播放。
步骤611,定位播放操作完成。
当一个分段中有多个轨道,即存在多个记录关键帧的tfra原子时,按照上述方法获取每个tfra原子中符合条件的关键帧,当获取的多个关键帧的录制时间不完全一致时,则从录制时间靠前的关键帧开始播放,当播放到录制时间与其余的关键帧一致时同时播放。
如图7所示,使用该发明后,在直播模式下执行快退进行时移的流程图。使用本发明之后可以加速对关键帧的查找。
步骤701,开始执行快退操作,从当前fragmen开始查找符合条件的关键帧;
步骤702,判断快退操作是否完成。如果是,则跳转到步骤714。否则,跳转到步骤703。
步骤703,判断该fragment在客户端是否有缓存,如果有,则跳转到步骤705。如果没有缓存,则跳转到步骤704。
步骤704,下载该fragment的moof原子。
步骤705,读取moof原子的tfra原子。
步骤706,根据一定步长判断该分段是否存在符合条件的关键帧,如果存在则跳转到步骤707。如果不存在则跳转到步骤713。
上述步长为快退倍数。
步骤707,以一定步长获取tfra原子中符合条件的关键帧信息,即关键帧的轨道ID、traf_number、trun_number以及sample_number。
符合条件的关键帧是指符合步长要求的关键帧。
上述步长为快退倍数。
步骤708,根据轨道ID找到该关键帧对应的轨道,进而根据traf_number找到对应的traf原子。
步骤709,根据trun_number在traf原子中找到对应的trun原子。
步骤710,根据sample_number在trun原子中找到对应的sample。获取该采样(即关键帧)的偏移和长度。
步骤711,下载符合条件的关键帧,并播放下载的关键帧。
此处,快退过程中仅下载并播放关键帧,而不是下载该分段的所有帧,可显著提高快退速率。
步骤712,判断该fragment内符合条件的关键帧是否全部下载,如果已经全部下载,则跳转到步骤713。否则跳到步骤702。
步骤713,移向上一个fragment。跳转到步骤702。
步骤714,结束。
在点播模式下执行快进操作时,以快进倍数为步长获取tfra原子中的关键帧信息,并根据获取的关键帧信息找到对应的sample,之后仅下载并播放查找的关键帧,而不是下载和播放分段的所有帧;
在点播模式下执行快进退操作时,以快退倍数为步长获取tfra原子中的关键帧信息,并根据获取的关键帧信息找到对应的sample,之后仅下载并播放查找的关键帧,而不是下载和播放分段的所有帧。
快退或快进过程中,仅下载并播放关键帧可有效提高快退或快进操作的效率。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。
以上所述仅是本发明的优选实施方式,应当指出,本地播放或网上点播多媒体文件进行多分支播放都在本发明的保护范围内。对于本技术领域的技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。