MP4之获取metadata

metadata都在moov box中,比较复杂的是分别存储在不同的box中的。

media info

media info在moov的子box mvhd中,在本文中会以moov/mvhd的形式表示。像moov这样包含子box的box被称为container box。

mvhd的格式定义如下


mvhd

其中需要注意的是duration和timescale。这里的duration是所有track的duration中的最大值。这里解释一下timescale,这个整数值表示1秒钟包含多少个time unit,相当于该文件定义的一个时间单位。

track info

媒体流的metadata在moov/trak box中,每一个trak box代表一个音视频流。流的信息在moov/trak/tkhd box

tkhd

需要关注的是duration和width、height。视频流的width和height就是视频的宽、高,音频流两者都是0。

track的duration和tiemscale在moov/trak/mdia/mdhd中


mdhd

这里的duration的单位是timescale

流的类型在moov/trak/mdia/hdlr中


hdlr

从handler_type中可以知道流的类型,"vide"为视频流,"soun"为音频流。

时间戳

sample的时间戳信息分散在moov/trak/mdia/minf/stbl/stts和moov/trak/mdia/minf/stbl/ctts中。


sts

decode time(DT)可以通过stts计算得到,DT(n)=sample_delta(0)+sample_delta(1)+...+sample_delta(n-1)


ctts

ctts中保存DT和CT(composition time)之间的offset,CT(n)=DT(n)+ctts(n),ctts可以没有,没有ctts时,DT和CT相同。

offset

sample offset的计算比较复杂,需要综合moov/trak/mdia/minf/stbl/stco,moov/trak/mdia/minf/stbl/stsc和moov/trak/mdia/minf/stbl/stsz才能得到。

stco是chunk offset box,从中可以知道chunk的数量以及每一个chunk在整个文件的offset。


stco

entry_count就是文件中chunk的总量。

stsc是sample to chunk box,从中可以知道sample对应的chunk是哪个。


stsc

这个数据代表的意思是从first_chunk开始的每个chunk包含smples_per_chunk个sample,这样的chunk总共有多少个呢?用下一个entry的first_chunk减去当前entry的first_chunk就得到chunk的数量。最后一个entry表示从first_chunk到最后一个chunk,这里就需要用到上面从stco得到的chunk的总量。

stsz是sample size box,从中可以知道每个sample的size。


stsz

sample_size是默认的sample大小,如果sample_size不等于0,表示所有的sample有相同的大小,都是sample_size。否则需要从后面的entry table读取每一个sample的大小。

这样我们就知道了所有chunk的offset,每一个chunk包含多少sample,以及所有sample的size,就可以计算sample的offset了。用sample所在的chunk的offset,加上该chunk内该sample之前的所有sample的size之和,就可以得到sample的offset。

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 超高速音视频编码器用法: ffmpeg [options] [[infile options] -i infile...
    吉凶以情迁阅读 4,663评论 0 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 时间管理,既然是一门技能,那就需要我们不断的练习,不断的去调整,不断的去训练,才能够获得更大的能力才能够更加游刃有...
    柳相同阅读 803评论 1 3
  • 最近你好像也很忙哦,好久没有你的消息了,希望你一切都好。刚看了你的回信,我们的日子还是略有不同的,还好你没...
    蜗瓦阅读 216评论 0 1