尽管结构正确,如何处理 MP4 文件中丢失的块偏移量?

问题描述 投票:0回答:1

我有一个关于我在没有第三方库的情况下在 VB.NET 中使用 MP4 分析器时遇到的问题的问题。我仅使用从 Iso.org 购买的文档(14496-14:2020 和 14496-15:2022)。我已经按照那里描述的那样实现了一切。在过去的几个月里,我使用了许多测试用例(来自不同来源的测试视频)来识别尽可能多的特性并测试程序。一些特性已经被发现,但这不是这里的重点。

问题在于,视频的值(尺寸、大小、帧数、时间尺度等)在结构上似乎是合理的,但实际上,它在 ChunkOffset 列表中只有 3 个值,即使视频有 103 个帧和 103 个样本大小。我想不通。当我用Notepad++打开视频时,我可以看到“stco”前面有一个“FS”,表明该盒子只有28字节长。不过,我仍然可以用VLC播放器流畅地播放视频。

stco box

stco 框的目的是提供有关不同大小的帧之间的偏移量 (sampleSize) 的信息,指示每个帧的开始位置。该信息被编码在从 stco 盒读取的各个块偏移中。这是一个基本框 – 它不能只包含 3 个条目。因此,我对这种差异感到困惑。文档没有提到这种行为。 有人有任何提示或建议吗?

我已经确认此问题仅发生在从互联网下载的特定文件上。

感谢您的任何见解或建议。

文件头:
header

vb.net mp4 h.264
1个回答
0
投票

“...但实际上,即使视频有 103 帧和 103 个样本大小,ChunkOffset 列表中也只有 3 个值。我无法弄清楚。”

28 字节对于 3 个块来说是正确的。请参阅以下表格:STCO - Apple Developer

DATA field          |   BYTES length
==========================================
Size                |   4
Type 'stco'         |   4
Version             |   1
Flags               |   3
Num of entries      |   4
Chunk offset table  |   4 x your 3 entries

在到达块偏移表之前,有 16 个字节的 STCO 标头设置。
有 3 个表条目,每个条目使用 4 个字节,因此块偏移表大小为 12 个字节。

因此

(16 + 12) == 28
解释了为什么 STCO 的总大小为 28 字节。
一个块可以容纳 N 帧,因此在该文件中,它们似乎将 103 帧分布在 3 个块中。

© www.soinside.com 2019 - 2024. All rights reserved.