【问题标题】:How to download only the moov atom from mp4 file如何从 mp4 文件中仅下载 moov atom
【发布时间】:2025-12-23 23:45:10
【问题描述】:

我已经想出了如何解析 moov atom 并从中获取一些信息,但是如何触发 http 请求以仅从可搜索的 mp4 url​​ 获取 moov atom,以便我可以跳过 mdat 和其他 atom。

可能的一种方法是使用从 0 开始的内容范围,但我如何确定 moov 原子的终点是什么。我可以看到这个问题的一种方法是打开 url 流并开始阅读它,直到我超过 moov 原子,此时我可以终止请求,但这很难做到,所以我想知道是否有仅下载 moov atom 和视频元数据的特殊请求结构?

谢谢!

【问题讨论】:

    标签: http stream request mp4


    【解决方案1】:

    .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 原子。

    恐怕这只是理论上的,可能没有真正的实际帮助......

    【讨论】:

    • 感谢您的评论,但我已经熟悉结构以及如何应用内容范围。问题是第一个原子moov。考虑到它的大小变化,如何确定第一个内容范围请求边界以获取该 moov 原子,那么我怎么知道我的第一个内容范围请求应该是什么。