视音频流数据恢复iso媒体文件的方法

文档序号:7974587阅读:207来源:国知局
专利名称:视音频流数据恢复iso媒体文件的方法
技术领域
本发明涉及媒体文件格式转换方法,尤其涉及视音频流数据恢复ISO媒体文件的方法。
背景技术
通常流媒体文件格式有IS014496-14定义的MP4文件格式,IS014496-15定义的AVC文件 格式,3GPP TS26. 244定义的3GPP文件格式,3GPP2 C. S0050-0定义的3GPP2文件格式。这 些格式的流媒体文件(视音频流数据)支持媒体播放器本地播放以及通过流媒体服务器远程 点播,本文中提到的视音频流数据就是指通过RTP (实时传输协议)传输的视音频流数据。
在流媒体、视讯以及视频监控等领域中通常都有以下需求
1、 流媒体服务器为了实现直播节目的时移播放以及直播后的录播功能,流媒体服务器需 要把从直播编码器接收的视音频数据包存储下来。存储视音频流数据供后续使用。
2、 流媒体客户端为了实现PVR(个人录像)功能,需要对流媒体视音频数据进行实时接收 和存储,以供客户后续本地点播。
3、 数字视频监控系统中为了将监控内容存档,需要将摄像头采集的视频信息编码发送到 监控中心进行录制。
以上描述的功能需求都涉及到一个关键的步骤存储视音频流数据供后续使用。传统的 做法是用自定义的文件格式保存所有接收到的视音频流数据,在软件系统里面有对自定义缓 存文件格式读取发包。但是自定义的文件格式为私有格式,无法在多个厂商系统之间交换使 用,而且也无法提供给用户下载到本地播放。

发明内容
为了克服上述缺陷,本发明的目的在于提供一种可以将实时接收或已经缓存在本地的流 数据录制成可供流媒体服务器发送及媒体播放器本地播放的视音频流数据恢复ISO媒体文件
的方法。
为达到上述目的,本发明视音频流数据恢复ISO媒体文件的方法,包括如下歩骤
(1) 获取视音频流数据的媒体轨数、各媒体轨标识(媒体轨ID)、时标、负载类型以及 描述信息,确定大块(chunk)的划分方法,并为每个媒体轨创建一个媒体大块(chunk)链表和 一个流化大块(chunk)链表;
(2) 依次生成每个轨道的每个大块(chunk),并且同步对应生成所述视音频流数据的媒 体轨道大块(chunk)和流化轨道大块(chunk);
(3) 所有轨道的所有大块(chunk)生成完毕,完成整个媒体原子(mdat box)的写入;
(4) 根据大块(chunk)链表中的信息以及会话描述协议(sdp)中的信息,恢复电影原子 (moov box)信息,并写入文件。
所述歩骤(1)中划分大块(chunk)的方法为按时间划分或者按数据包的个数划分。 所述歩骤(2)中生成媒体轨道大块(chunk)和流化轨道大块(chunk)的方法为复原媒
体轨道大块(chunk)和流化轨道大块(chunk)中所有采样(sample)数据及其索引,包括如下歩

(21) 确定每个大块(chunk)中流化采样(sample)边界;
(22) 复原媒体采样(sample),并生成媒体采样(sample)数据和信息;
(23) 生成流化采样(sample)数据和信息;
(24) 将流化采样(sample)数据和信息写入流化采样(sample)链表;
(25) 将媒体采样(sample)数据和信息写入媒体采样(sample)链表;
(26) 遍历媒体采样(sample)链表,写入媒体大块(chunk)中所有媒体采样(sample)数据, 生成一个完整的媒体大块(chunk),本媒体大块(chunk)加入所属的媒体大块(chunk)链表;
(27) 遍历流化采样(sample)链表,写入流化大块(chunk)中所有流化采样(sample)数据, 生成一个完整的流化大块(chunk),本流化大块(chunk)加入所属的流化大块(chunk)链表。
所述步骤(21)具体为以实时传输协议(RTP)数据包头的标志(mark)位置1作为流化采 样(sample)的边界或者把时戳发生跳转也作为流化采样(sample)的边界。
所述歩骤(3)具体为计算各个轨道的时长,计算各个轨道数据的大小,计算所有数据 区的数据长度,更新媒体原子(mdat box)的长度字段,完成整个媒体原子(mdat box)的写入。
所述步骤(4)中恢复电影原子(moov box)信息的方法为恢复采样表(stbl)中必要的原 子(box),包括
采样描述表(stsd),由解析会话描述协议包信息得到媒体轨的采样描述表所需的信息; 时间采样表(stts),根据大块(chunk)结构中媒体采样(sample)链表或者流化采样
(sample)链表中每个采样节点中存储的采样时长得到;
采样同步表(stss),根据大块(chunk)结构中媒体采样(sa即le)链表或者流化采样
(sample)链表中每个采样节点中存储的是否关键帧信息得到;
采样大块表(stsc),根据轨道中大块(chunk)链表和大块(chunk)结构中媒体采样
(sa即le)链表或者流化采样(sample)链表中采样节点时长来恢复;
采样大小表(stsz),根据大块(chunk)结构中媒体采样(sample)链表或者流化采样 (sample)链表中每个采样节点中存储的采样大小得到;
大块偏移表(stco/co64),根据各大块(chunk)结构中记录的文件偏移量得到。 本发明通过获取视音频流数据的媒体轨数、各媒体轨ID,时标,负载类型以及描述信息, 轮流生成每个轨道的一个chunk,统一视音频流数据的媒体轨道chunk和流化轨道chunk同 步生成;依次完成每个轨道的所有chunk,完成整个mdat box的写入;根据内存中保存的chunk 链表中的信息以及sdp中的信息,恢复moovbox信息,并写入文件。能够方便实现多媒体通 信中视音频流数据的实时及非实时录制,对于不同媒体格式的流数据,仅需要根据媒体格式 修改复原sa即le部分,录制生成的文件符合ISO基本媒体格式,既可以用于流媒体服务器进 行流发送,也可以被终端和PC播放器做本地播放,方便了媒体文件的二次分发及多个系统之 间的互操作。该方法能够快速的将视音频流数据复原成ISO媒体文件,使流媒体服务器可以 实现直播录制,使多媒体终端设备可以有效实现PVR。


图1是本发明的视音频流数据恢复ISO媒体文件的方法流程图2是复原媒体sa即le和流化sample子流程图3是符合RFC3016的3个RTP包1个流化Sample对应1个媒体sample的结构图; 图4是符合RFC3640的1个RTP包1个流化Sample对应3个媒体sample的结构图; 图5是基于本发明的方法生成ISO媒体文件结构示例图。
具体实施例方式
本发明中的基于ISO媒体文件格式包含但不限于以下所列IS014496-14定义的MP4文件 格式,IS014496-15定义的AVC文件格式,3GPP TS26. 244定义的3GPP2文件格式。在本发明 中,将基于ISO媒体文件格式的文件统称为"IS()媒体文件",提及的视音频流数据特指通过 RTP (实时传输协议)传输的视音频流数据。
通常ISO媒体文件由若干个box组成,以3GPP文件为例, 一个3GPP文件基于mpeg4由 若干个box(原子)组成,其中,最常见的有
文件格式ftyp box,相当于文件头,说明了文件所使用的协议版本等信息;
媒体原子mdatbox,存放了音频、视频和其他的数据, 一般的文件至少有2个mdatbox,
一个用于音频, 一个用于视频,通常还会有一些文本信息也放在mdatbox中,各种信息的顺序不固定,如果只是存放音乐一个mdat就够用了;
电影原子moov box,是一个3GPP文件中最复杂最重要的文件,说明哪个mdat box中 存放视频数据,哪个mdat box中存放咅频数据。
本发明的技术方案主要通过如下歩骤实现的,如图1所示
(1) 创建待生成的媒体文件,写入文件头信息ftyp box,预留mdat类型和大小字段。
(2) 获取视音频流的媒体轨数,各媒体轨ID、 TimeScale(时标)、负载类型以及描述信 息等,确定chunk (大块)划分方法(划分chunk有多种方式,可以按时间,按包个数等方 式进行划分chunk,按时间划分时,时间间隔可以是l秒),为每个媒体轨创建一个媒体chunk 链表和一个流化chunk链表。
(3) 依次生成每个轨道的每个chunk,统一视音频流的媒体轨道chunk和流化轨道chunk 同步生成,每个chunk的基本组成单位为sample (采样),生成chunk的过程即为复原chunk 中所有sample数据及其索引的过程;主要步骤如下
(3. 1)确定流化sample边界;
一个流化sample包括几个RTP数据包中,以mark位置1作为hint sample的边界。(考 虑到网络丢包的情况,把时戳发生跳转也作为hint sample的边界)。 一个Hint sample (流 化采样)包括n个(n》l)RTP数据包。
(3. 2)复原媒体sa即le,并生成媒体sample数据和相关信息(时长,大小,是否关键帧 等)。根据具体媒体格式对应的RTP负载格式定义标准,从RTP (实时传输协议)数据包中复 原原始的媒体sample,并根据RTP Header和负载的相关定义生成媒体sample的索引;
(3. 3)生成流化sample数据和信息; 根据RTP负载格式定义,确定流化sample和媒体sample间映射关系。根据ISO媒体文 件格式标准,生成流化sample数据和信息;
(3. 4)将流化sa即le数据和信息加入流化sample链表;
(3. 5)将媒体sample数据和信息加入媒体sample链表;
(3. 6)遍历媒体sample链表,写入chunk中所有媒体sample数据,生成一个完整的 媒体chunk。本chunk加入所属轨的媒体chunk链表;
(3. 7)遍历流化sample链表,写入chunk中所有流化sample数据。生成一个完整的 流化chunk。本流化chunk加入所属轨的流化chunk链表;
(4) 计算各个轨道的时长,依次完成每个轨道的所有chunk,计算所有数据区的数据长 度,更新mdat box的长度字段,完成整个mdat box的写入。
(5)根据内存中保存的chunk链表中信息以及sdp (会话描述协议)中的信息,恢复moov box信息,并写入文件。生成moov box的关键歩骤为恢复stbl(菜榉表〉+必荽的box:
(5. 1) stsd (采样描述表)解析sdp信息得到媒体轨的stsd所需信息。
(5. 2) stts (时间采样表)根据chunk结构中媒体sample链表或流化sample链表 中每个sa即le节点中存储的sample时长得到。
(5. 3) stss (采样同步表)根据chunk结构中媒体sample链表或液化sample链表 中每个sample节点中存储的是否关键帧信息得到。
(5. 4) stsc (采样大块表)根据轨道中chunk链表和chunk结构中媒体sample链表 或流化sample链表中sample节点时长来恢复。
(5. 5) stsz (采样大小表):根据chunk结构中媒体sample链表或液化sa即le链表 中每个sa即le节点中存储的sample大小得到。
(5. 6) stco/co64 (大块偏移表)根据各chunk结构中记录的文件偏移量得到。 下面结合附图以mpeg4视频及AAC音频RTP流复原产生MP4文件的详细过程为例来详细 描述本发明的技术方案的实施
mpeg4视频及AAC音频RTP (实时传输协议)流复原产生MP4文件的主要歩骤包括 第一歩骤、创建目标文件,写文件类型描述ftyp box信息
对于MP4文件,major—brand定义为"isom,, , compatibale—brand定义为 "mp41"或 "mp42"。预留mdat原子类型和大小8字节。 第二歩骤、获取视音频流的描述信息
解析sdp信息,获取mpeg4视频流和AAC音频的描述信息(流类型,profile-level id,采 样频率等)。按时间间隔1秒划分chunk。
第三歩骤、获取即eg4视频流数据,生成mpeg4视频轨的一个chunk,每个chunk的基本 组成单位为sample,生成chunk的过程即为复原chunk中所有sample数据及其索引的过程, 生成chunk的过程如下
初始化媒体sa即le链表和流化sample链表。
复原媒体sample和流化sample (见图2),重复下面1一5步骤,直到chunk结束
1.确定流化sample的边界 一个流化sample包括在几个RTP数据包中,以mark位置
1作为流化sample的边界(考虑到网络丢包的情况,把时戳发生跳转也作为hint sample的 边界)。 一个hint sample包括n个(n〉=l) RTP数据包。
对于mpeg4视频来说,根据RTP包头的mark位确定目前处理的流化sample包括3个RTP 数据包。
2. 复原媒体sample,确定媒体sample的边界,并生成媒体sample数据和相关信息(时 长,大小,是否关键帧等)。根据具体媒体格式对应的RTP负载格式定义标准,从RTP数据包 中复原原始的媒体sample,并根据RTP Header和负载的相关定义生成媒体sa卿le的索引;
对于mpeg4视频来说按照RFC3016,确定本流化sample对应有1个媒体sa卿le,其内 容为上述1中所确定的3个RTP包净荷首尾相连,记为PI-P2-P3,长度为Ll+L2+L3。
3. 生成流化sample数据和信息根据RTP负载格式定义,确定流化sample和媒体sample 间映射关系,根据ISO媒体文件格式标准,生成流化sample数据和信息;
对于mpeg4视频来说生成的流化sample有3个RTP包,每个RTP包的负载数据有一个入口 第1个RTP负载数据入口从媒体sample的数据O开始,长度为Ll。 第2个RTP负载数据入口从媒体sample的数据LI开始,长度为L2。 第3个RTP负载数据入口从媒体sa即le的数据(Ll+L2)开始,长度为L3。 流化sample、媒体sample及RTP包的对应关系见图3。
4. 将本流化sample数据和信息加入流化sample链表。
5. 将本媒体sa即le数据和信息加入媒体sample链表。
6. 遍历媒体sample链表,写入chunk中所有媒体sa即le数据,生成一个完整的媒体chunk, 本chunk加入所属轨的媒体chunk链表。
7. 遍历流化sample链表,写入chunk中所有流化sample数据,生成一个完整的流化chunk, 本chunk加入所属轨的流化chunk链表。
第四歩骤、获取AAC音频流数据,生成AAC音频轨的一个chunk。 初始化媒体sample链表和流化sample链表。 重复下述子过程A—E直到chunk结束
A. 确定流化sa即le的边界
根据RTP包头的mark (标志)位确定目前处理的流化sample包括1个RTP数据包。
B. 确定媒体sample的边界,生成媒体sample数据
按照RFC3640中的流化标准,确定本流化sa即le对应有3个媒体sample,分别为 Pl, P2, P3。
C. 生成流化sample数据
生成的流化sample有1个RTP包,RTP包的负载数据至少有4个入口 。 入口 1:保存琉化信息,包括AlffleaderUn和毎个AUHeader。(这个入口可能有多个,裉 据流化信息的长度而定,每个入口最多只能保存14个字节)
入口2:从媒体sa即le(AUl的序号)的数据O开始,长度为AU1的采样数据长度。 入口3:从媒体sample(AU2的序号)的数据0开始,长度为AU2的采样数据长度。 入口4:从媒体sample(AU3的序号)的数据0丌始,长度为AU3的采样数据长度。 流化sample、媒体sample及RTP包的对应关系见图4。
D. 将本流化sample信息加入流化sample链表。
E. 将连续3个媒体sa即le信息加入媒体sample链表。
F. 遍历媒体sample链表,写入chunk中所有媒体sample数据。
G. 遍历流化sample链表,写入chunk中所有流化sample数据。 第五歩骤、重复第三步骤和第四歩骤直到转换完成或收到停止转换消息。
第六歩骤、依次完成每个轨道的所有chunk,完成整个mdat box的写入计算每个轨道 数据大小,修改mdat box的长度字段。
第七歩骤、根据内存中保存的chunk链表中信息以及sdp中的信息,恢复moov box信息, 并写入文件。参照IS014496-14标准和技术方案第四歩骤中所述方法,生成moov box中必要 的部分,写入文件尾部。moov box中必要的box包括
stsd:解析sdp信息得到媒体轨的stsd所需信息。
sUs:根据chunk结构中媒体sample链表或流化sample链表中每个sample节点中存 储的sample时长得到。
stss:根据chunk结构中媒体sample链表或液化sample链表中每个sample节点中存
储的是否关键帧信息得到。
stsc:根据轨道中chunk链表和chunk结构中媒体sample链表或流化sample链表中 sa即le节点时长来恢复。
stsz:根据chunk结构中媒体sample链表或液化sample链表中每个sample节点中存 储的sample大小得到。
stco/co64:根据各chunk结构中记录的文件偏移量得到。
采用本发明所述方法,能方便的实现多媒体通信中视音频流数据的实时及非实时录制,
对于不同媒体格式的流数据,仅需要根据媒体格式修改复原sample部分。录制生成的文件符 合ISO基本媒体文件格式,既可以用于流媒体服务器进行流发送,也可以被终端和PC播放器 软件做本地播放,方便了媒体文件的二次分发及多个系统之问的互操作。该方法能够快速的 将视音频流数据复原成ISO媒体文件,使流媒体服务器可以实现直播录制,使多媒体终端设 备可以有效实现PVR。
权利要求
1、视音频流数据恢复ISO媒体文件的方法,包括如下步骤(1)获取视音频流数据的媒体轨数、各媒体轨标识、时标、负载类型以及描述信息,确定大块的划分方法,并为每个媒体轨创建一个媒体大块链表和一个流化大块链表;(2)依次生成每个轨道的每个大块,并且同步对应生成所述视音频流数据的媒体轨道大块和流化轨道大块;(3)所有轨道的所有大块生成完毕,完成整个媒体原子的写入;(4)根据大块链表中的信息以及会话描述协议中的信息,恢复电影原子信息,并写入文件。
2、 根据权利要求1所述的视音频流数据恢复IS0媒体文件的方法,其特征在于,所述歩 骤(1)中划分大块的方法为按时间划分或者按数据包的个数划分。
3、 根据权利要求1或2所述的视音频流数据恢复ISO媒体文件的方法,其特征在于,所述步骤(2)中生成媒体轨道大块和流化轨道大块的方法为复原媒体轨道大块和流化轨道 大块中所有采样数据及其索引,包括如下步骤(21) 确定每个大块中流化采样边界;(22) 复原媒体采样,并生成媒体采样数据和信息;(23) 生成流化采样数据和信息;(24) 将流化采样数据和信息写入流化采样链表;(25) 将媒体采样数据和信息写入媒体采样链表;(26) 遍历媒体采样链表,写入媒体大块中所有媒体采样数据,生成一个完整的媒体大 块,本媒体大块加入所属的媒体大块链表;(27) 遍历流化釆样链表,写入流化大块中所有流化采样数据,生成一个完整的流化大 块,本流化大块加入所属的流化大块链表。
4、 根据权利要求3所述的视音频流数据恢复IS0媒体文件的方法,其特征在于,所述歩 骤(21)具体为以实时传输协议数据包头的标志位置1作为流化采样的边界或者把时戳发 生跳转也作为流化采样的边界。
5、 根据权利要求4所述的视音频流数据恢复IS0媒体文件的方法,其特征在于,所述歩 骤(3)具体为计算各个轨道的时长,计算各个轨道数据的大小,计算所有数据区的数据长 度,更新媒体原子的长度字段,完成整个媒体原子的写入。
6、 根据权利要求1所述的视音频流数据恢复IS0媒体文件的方法,其特征在于,所述步 骤(4)中恢复电影原子信息的方法为恢复采样表中必要的原子,包括采样描述表,由解析会话描述协议包信息得到媒体轨的采样描述表所需的信息; 时间菜样表,根据大块结构中媒休菜样链表或著琉化菜榉键表+毎个菜榉节点+荐^的采样时长得到;采样同歩表,根据大块结构中媒体采样链表或者流化采样链表中每个采样节点中存储的 是否关键帧信息得到;采样大块表,根据轨道中大块链表和大块结构中媒体采样链表或者流化采样链表中采样 节点时长来恢复;采样大小表,根据大块结构中媒体采样链表或者流化采样链表中每个采样节点中存储的 采样大小得到;大块偏移表,根据各大块结构中记录的文件偏移量得到。
全文摘要
本发明公开一种视音频流数据恢复ISO媒体文件的方法,涉及文件格式转换,为解决私有格式文件无法在本地播放且在无法在多个厂商之间交换使用的问题而发明。本发明通过获取视音频流数据的媒体轨数、各媒体轨ID、时标、负载类型,确定大块划分方法,为每个媒体轨创建一个媒体大块链表和一个流化大块链表;依次生成每个轨道的每个大块,且同步对应生成所述视音频流数据的媒体轨道大块和流化轨道大块;所有轨道的所有大块生成完毕,完成整个媒体原子的写入;根据大块链表中的信息以及会话描述协议包中的信息,恢复电影原子信息并写入文件。实现私有格式文件到ISO标准格式文件的转换。
文档编号H04N7/24GK101202899SQ20061016580
公开日2008年6月18日 申请日期2006年12月12日 优先权日2006年12月12日
发明者王志英, 阮亚平 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1