一种FLV到MP4的文件容器转换方法技术

技术编号:13233512 阅读:40 留言:0更新日期:2016-05-14 20:51
本发明专利技术公开了一种FLV到MP4的文件容器转换方法,先从原文件读取时间戳信息并获得每一帧的stts,然后将连续的stts合并为一个entry,通过这种高效的转换方法,在有限的精度损失下,可以使得转换后的’moov’box长度有效降低,从而减少文件的加载时间。

【技术实现步骤摘要】

本专利技术设及一种FLV到MP4的文件容器转换方法
技术介绍
很多移动终端、上载系统、CDN等都只支持MP4格式而不支持化V的格式,但市面上 有很多存量化V文件,如果通过编码的方式转成MP4格式,不仅会降低视频质量,同时还会增 加运营成本,降低工作效率。 同时,对于MP4文件,为了提高用户体验,减少点播缓冲时间,加载文件要快速,需 要做成逐行下载的模式(Progressive Downloading Profile),即'moov' box必须在文件 起始处,并且越小越好。在MP4的spec( 14496-12)中,描述时间戳的字段是由SttS ((decoding)time-to-sample)及Ctts((composition)time to sample)组成,其中sample_ de;Ua,sample_offset都是W 'nKlhd'的' timescale'为单位的。通常情况下,为了增加精度, audio的 ' timescale'都是 W采样率为主,如48000,而 video的 ' timescale' 为90000。 但是对于FLV文件来说,描述时间戳的字段是由TimeStamp (即DTS )与 CompositionTime(即Ctts)组成,而且是W毫秒为单位,运样对于非整数毫秒的时间戳,如 当video的帖率为23.976fps、30fps等,特别是audio流,其时间戳是有精度损失的。举个例 子,对于采样率为48000hz的AAC LC来说,其每帖的时间间隔为1024.0/48 = 21.333333ms, 写到化V文件里面,就会是21,22,21,22,21,22 ...,运样转换成对应的MP4的SttS就会是 1023,1024,1023,1024,1023,1024...,最终生成的SttS大小就会增加很多。
技术实现思路
基于此,有必要提供一种不需要编码器,可直接做从化V到MP4的容器转换,且在有 限的精度损失下,可W使得转换后的'moov'box长度有效降低,从而减少文件加载时间的 FLV到MP4的文件容器转换方法。 根据本专利技术的一方面,提供了一种FLV到MP4的文件容器转换方法,包括如下步骤: 从原文件读取时间戳信息并获得每一帖的SttS;[000引将连续的Stts合并为一个entry。 在其中一个实施例中,从原文件读取时间戳信息并获得每一帖的SttS步骤中,具 体方法如下: 读取原文件每帖的时间戳信息,第n帖的时间戳信息记为化s(n);[00川根据stts(n)=化S(n+1)-化s(n)公式,换算得每一帖的stts。 在其中一个实施例中,将连续的SttS合并为一个entiy的步骤中,具体方法如下: 计算每帖的DT值,并预设一个常量T皿,当连续两帖的DT值的差值小于预设的常量 THR,则连续的两帖合并为一个entry。 运种化V到MP4的文件容器转换方法,提供了一种高效的转换方法,在有限的精度 损失下,可W使得转换后的'moov'box长度有效降低,从而减少文件的加载时间。【具体实施方式】 为了便于理解本专利技术,下面将用具体实施例对本专利技术进行更全面的描述。但是,本 专利技术可W W许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供运实施例 的目的是使对本专利技术的公开内容的理解更加透彻全面。 本专利技术一实施例的FLV到MP4的文件容器转换方法,包括如下步骤: 步骤S1、从原文件读取时间戳信息并获得每一帖的stts。[001引具体地,通过化V Splitter读取源文件内容,将源文件的每帖Audio/Video数据, 包括解码时间戳信息(DTS)送给后端的MP4 Muxer。 步骤S2、将连续的SttS合并为一个entry。 具体地,计算每帖的DT值,并预设一个常量T皿,当连续两帖的DT值的差值小于预 设的常量THR,则连续的两帖合并为一个entry。 DT值计算方法如下: 假设MP4文件共有N个entry,每个entry的sample count分别记为Stts sample count(n),每个entry的sample offset记为stts sample offset(n),n = I~N。 设F(n)为第n个entiy的第一帖的帖序号n: I~N, 则F(O)=O, F(I) = I,[002引 当n>l,n<^l时,设文件的总帖数为M,贝ljM=F(N)+stts sample COimt(N) =F(Pf^l)-I[002引对于第m(m> l,m<N)帖,一定有一个唯一的m',使得m>F(m')且m<F(m'+l),那么 第m帖的DT值如下: 在写入文件之前,分别对所有连续的audio帖和video帖进行分组,每一组一个 en化y,且对应一个使得总ent巧数尽量少并且保证由MP4文件得到的每帖的DT和原始化V的 DT的误差在一个很小的范围。具体地,分组的步骤如下: 步骤AU假设原始文件共有的帖数为M。先计算每帖的原始SttS, Stts org(n)=DT org(n+l)-DT org(n) 步骤A2、先令n = l,m=l,其中n为帖序号,m为从当前第n帖之前共有的ent巧个数。 然后令n = 2,继续步骤A3。 步骤A3、判断第n帖是否可W与第n-1帖合为一组,令 由此,根据上述DT值的计算方法,可W计算帖序号为n'的帖(n':F(N)~n)的DT (n')。 如果所有的DT(n')与DT org(n')的差值都小于一个预设的常量T皿(典型的T皿为 Ims),那么表示第n帖可W和之前的帖合为一个entry。 此时令n = n+1,如果n < N,分组完毕;否则继续A3。反之,则表示第n帖不能和之前的帖合为一个entry,运样就可W确定第m个entry, stts sample count(m)=n-1-F(m-l) stts sample offset=(DT org(n)-DT org(F(m)))/stts sample count(m) 然后令m=m+l,n = n+l,如果n<N,分组完毕;否则继续步骤A3。 运种化V到MP4的文件容器转换方法,提供了一种高效的转换方法,在有限的精度 损失下,可W使得转换后的'moov'box长度有效降低,从而减少文件的加载时间。根据本实 施例方法转换后的'moov'box长度可降低约30%。 如对于一个内容2小时的FLV文件,Video是30巧S ,audio是4800化Z的AAC文件, 那么 audio 的帖数=巧 3600/( 1024/48000) =337500 [004引 Video 的帖数=巧 3600*30 = 216000 如果没有进行精度补偿,那么生成出来的audio和video的SttS大小大约为 Audio = 337500*8 = 2700000 Video = 216000*8 = 1728000 其中8代表的是每个stts占有的字节数。 经过精度补偿后,audio和video的SttS在理想状态下(即输入源没有丢包的情况 下)只会占用12个字节。减少的字节数(BYTES) = (2700000本文档来自技高网
...

【技术保护点】
一种FLV到MP4的文件容器转换方法,其特征在于,包括如下步骤:从原文件读取时间戳信息并获得每一帧的stts;将连续的stts合并为一个entry。

【技术特征摘要】

【专利技术属性】
技术研发人员:王雪辉谢亚光叶武
申请(专利权)人:杭州当虹科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1