[mp4文件格式]获取mp4文件信息1 - 计算电影长度 方法1 从mvhd - movie header atom中找到time scale和duration,duration除以time scale即是整部电影的长度。 time scale相当于定义了标准的1秒在这部电影里面的刻度是多少。 例如audio track的time scale = 8000, duration = 560128,所以总长度是70.016,video track的time scale = 600, duration = 42000,所以总长度是70 方法2 首先计算出共有多少个帧,也就是sample(从sample size atoms中得到),然后 整部电影的duration = 每个帧的duration之和(从Time-to-sample atoms中得出) 例如audio track共有547个sample,每个sample的长度是1024,则总duration是560128,电影长度是70.016;video track共有1050个sample,每个sample的长度是40,则总duration是42000,电影长度是70 [mp4文件格式]获取mp4文件信息2 - 计算电影图像宽度和高度 从tkhd – track header atom中找到宽度和高度即是。 [mp4文件格式]获取mp4文件信息3 - 计算电影声音采样频率 从tkhd – track header atom中找出audio track的time scale即是声音的采样频率。 [mp4文件格式]获取mp4文件信息6 - 查找sample 当播放一部电影或者一个track的时候,对应的media handler必须能够正确的解析数据流,对一定的时间获取对应的媒体数据。如果是视频媒体, media handler可能会解析多个atom,才能找到给定时间的sample的大小和位置。具体步骤如下: 1.确定时间,相对于媒体时间坐标系统 2.检查time-to-sample atom来确定给定时间的sample序号。 3.检查sample-to-chunk atom来发现对应该sample的chunk。 4.从chunk offset atom中提取该trunk的偏移量。 5.利用sample size atom找到sample在trunk内的偏移量和sample的大小。 例如,如果要找第1秒的视频数据,过程如下: 1. 第1秒的视频数据相对于此电影的时间为600 2. 检查time-to-sample atom,得出每个sample的duration是40,从而得出需要寻找第600/40 = 15 + 1 = 16个sample 3. 检查sample-to-chunk atom,得到该sample属于第5个chunk的第一个sample,该chunk共有4个sample 4. 检查chunk offset atom找到第5个trunk的偏移量是20472 5. 由于第16个sample是第5个trunk的第一个sample,所以不用检查sample size atom,trunk的偏移量即是该sample的偏移量20472。如果是这个trunk的第二个sample,则从sample size atom中找到该trunk的前一个sample的大小,然后加上偏移量即可得到实际位置。 6. 得到位置后,即可取出相应数据进行解码,播放 [mp4文件格式]获取mp4文件信息7 - 查找关键帧 查找过程与查找sample的过程非常类似,只是需要利用sync sample atom来确定key frame的sample序号 确定给定时间的sample序号 检查sync sample atom来发现这个sample序号之后的key frame 检查sample-to-chunk atom来发现对应该sample的chunk 从chunk offset atom中提取该trunk的偏移量 利用sample size atom找到sample在trunk内的偏移量和sample的大小 (落鹤生) |
[mp4文件格式分析
最新推荐文章于 2023-02-21 23:38:04 发布
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:
罗索实验室 [
http://www.rosoo.net/a/201007/9863.html]