[发明专利]一种修复MP4损坏文件的方法有效
| 申请号: | 201911050367.3 | 申请日: | 2019-10-31 |
| 公开(公告)号: | CN110740391B | 公开(公告)日: | 2021-10-26 |
| 发明(设计)人: | 许超明;梁效宁;韩勇 | 申请(专利权)人: | 四川效率源信息安全技术股份有限公司 |
| 主分类号: | H04N21/854 | 分类号: | H04N21/854 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 641000 四*** | 国省代码: | 四川;51 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 修复 mp4 损坏 文件 方法 | ||
1.一种修复MP4损坏文件的方法,其特征在于包括以下步骤:
S100:获取任一MP4正常文件,解析所述MP4正常文件以获取数据流的编码方式、sample数据的封装模式及时间流的交错模式,其中,所述MP4正常文件与所述MP4损坏文件由相同的MP4制作装置和/或制作软件所生成且具有相同的编码方式及交错模式,所述步骤S100包括以下步骤:
S101:获取数据流的编码方式,包括以下步骤:
S1011:获取sample描述信息,所述sample描述信息包含atom大小、类型、版本、标志、条目数及sample描述表,其中,所述类型储存于stsd中;
S1012:读取所述sample描述表中的数据格式作为所述编码方式,所述编码方式包括avc1、mp4a、mp4v、alac、samr、Twos、apcn、in24、sowt及sawb;
S102:获取时间流的交错模式,包括以下步骤:
S1021:获取所述MP4正常文件中各个音/视频序列的区块偏移表并获取各个音/视频序列的偏移量,所述偏移量是相对于媒体数据区域的起始地址的相对偏移地址;
S1022:将各个音/视频序列的偏移量并入同一集合并按升序排列;
S1023:查找各个偏移量所属的音/视频序列在所述集合中出现的规律,用以确定各个音/视频序列的交错模式;
S1024:去除所述集合中重复循环的音/视频序列,用以获取时间流的交错模式;
S103:获取sample数据的封装模式,包括以下步骤:
S1031:获取所述MP4正常文件中sample-区块对应关系表并读取第一区块的序号、每区块的sample数及sample的描述识别号;
S1032:根据所获取的音/视频序列的交错模式及所述MP4正常文件中sample-区块对应关系表,获取sample数据的封装模式;
S200:根据所述编码方式及所述交错模式,扫描所述MP4损坏文件的媒体数据区域并获取所述媒体数据区域中的sample大小及sample的偏移量并记录在音/视频序列容器中;
S300:根据所述音/视频序列容器中sample大小及sample的偏移位置,修改所述MP4正常文件中moov的区块偏移表的偏移量,用以重新构建所述MP4正常文件的moov;
S400:采用所述MP4损坏文件的媒体数据区域替换步骤S300中所重新构建的所述MP4正常文件的媒体数据区域,生成正常播放的MP4文件,完成所述MP4损坏文件的修复。
2.根据权利要求1所述的一种修复MP4损坏文件的方法,其特征在于,所述步骤S200包括以下步骤:
S201:读取所述MP4损坏文件的媒体数据容器的数据,查找媒体数据的标识,所述媒体数据的标识为媒体数据的起始地址;
S202:根据所述MP4正常文件的交错模式,选取要匹配的音/视频序列;
S203:根据所述MP4正常文件的每区块的sample数获取要匹配的sample个数;
S204:根据音/视频序列的编码方式来扫描媒体数据中的sample,用以匹配所读取的sample;
S205:判断所读取的sample是否与音/视频序列的编码方式匹配,如果是,执行步骤S207,否则,执行步骤S206;
S206:寻址下一所需读取的sample,执行步骤S204;
S207:记录当前sample的字节长度和偏移量,并将当前sample的偏移量记录在音/视频序列容器中。
3.根据权利要求2所述的一种修复MP4损坏文件的方法,其特征在于,针对不同的音/视频序列的编码方式,获取sample的字节长度的方法如下:
编码方式为avc1:以当前sample的起始地址为首地址,向后偏移0x5字节并读取字节的内容,与0x1f进行逻辑与运算,所得结果表示sample的类型且小于十进制数21,当前sample的前4字节的内容表示sample的字节长度;
编码方式为mp4a:以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容且所读取的内容分别为0xee、0x1b,或者,
以当前sample的起始地址为首地址,向后偏移0x5字节、0x06字节并分别读取字节的内容,所读取的内容分别为0x3e、0x64且当前sample的首字节内容不为零;
采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为mp4v:以当前sample的起始地址为首地址,前两个字节的内容为0x1b3或0x1b6,采用ffpeg的avcodec_decode_video2函数获得sample的字节长度;
编码方式为alac:以当前sample的起始地址为首地址,向后偏移0x5字节并读取连续4字节的内容的整数t,当前sample的前4字节的内容为0x00时,t的值为0x00130000,或,
当前sample的前4字节的内容为0x1000时,t的值为0x001a0000,采用ffpeg的untr_decode_audio4函数获得sample的字节长度;
编码方式为samr:当前sample的首字节内容为0x3c,sample的字节长度为32字节。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川效率源信息安全技术股份有限公司,未经四川效率源信息安全技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911050367.3/1.html,转载请声明来源钻瓜专利网。





