我已经想出如何解析moov原子并从中获取一些信息,但是如何触发http请求只能从可搜索的mp4 url中获取moov原子,这样我就可以跳过mdat和其他原子。
可能一种方法是使用从0开始的内容范围,但我如何确定moov原子的终点是什么。我可以看到过去解决这个问题的一种方法就是打开网址流并开始阅读它,直到我越过moov原子,此时我可以终止请求,但这很难做到,所以我想知道是否有一个特殊的请求结构,只下载moov原子和视频元数据?
谢谢!
答案 0 :(得分:2)
.mp4文件由不同大小但具有规则结构的块(原子)组成。
http://atomicparsley.sourceforge.net/很好地解释了原子块结构(并给你研究的来源,虽然这是本地文件,而不是通过http)。相关部分:每个文件“由称为'盒'或'原子'的离散单元组成。原子被定义为一个非常简单的构建块:
[4bytes atom length] [4bytes atom name] [contents of the atom, if any]"
例如:
Atom ftyp @ 0 of size: 32, ends @ 32
Atom moov @ 32 of size: 23276, ends @ 23308
Atom mvhd @ 40 of size: 108, ends @ 148
Atom trak @ 148 of size: 3664, ends @ 3812
Atom tkhd @ 156 of size: 92, ends @ 248
Atom edts @ 248 of size: 36, ends @ 284
Atom elst @ 256 of size: 28, ends @ 284
Atom mdia @ 284 of size: 3484, ends @ 3768
...
你可以通过阅读原子类型&来“捏合”文件。一个块的大小(使用CONTENT-RANGE),用该信息计算到下一个块的偏移量,并重复直到得到moov原子。
我担心这只是理论上的,这可能不是真正的实际帮助......