gpt4 book ai didi

ffmpeg - MKV 寻头解析

转载 作者:行者123 更新时间:2023-12-04 23:06:03 40 4
gpt4 key购买 nike

我有一个要求,我需要解析一个 matroska 文件。文件的初始几个字节如下所示。

0x1a 0x45 0xdf 0xa3 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x23 0x42 0x86 0x81 0x01
0x42 0xf7 0x81 0x01 0x42 0xf2 0x81 0x04 0x42 0xf3 0x81 0x08 0x42 0x82 0x88 0x6d
0x61 0x74 0x72 0x6f 0x73 0x6b 0x61 0x42 0x87 0x81 0x04 0x42 0x85 0x81 0x02 0x18
0x53 0x80 0x67 0x01 0x00 0x00 0x00 0x00 0x33 0xdb 0x10 0x11 0x4d 0x9b 0x74 0x40
0x42 0xbf 0x84 0x11 0xac 0x83 0x8a 0x4d 0xbb 0x8b 0x53 0xab 0x84 0x15 0x49 0xa9
0x66 0x53 0xac 0x81 0xe5 0x4d 0xbb 0x8c 0x53 0xab 0x84 0x16 0x54 0xae 0x6b 0x53
0xac 0x82 0x01 0x56 0x4d 0xbb 0x8c 0x53 0xab 0x84 0x12 0x54 0xc3 0x67 0x53 0xac
0x82 0x11 0x5c 0x4d 0xbb 0x8d 0x53 0xab 0x84 0x1c 0x53 0xbb 0x6b 0x53 0xac 0x83
0x33 0xd9 0x1c 0xec 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x94 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

我正在尝试解析这个文件。我已经成功解析了前 59 个字节。现在我在第 60 个字节。从第 6 个字节开始,字节为 0x11 0x4d 0x9b 0x74(以粗体显示),因此这意味着搜索头正在启动。

我使用 mkvinfo 查看解析的数据。根据如下所示的 mkvinfo,seekhead 从 59 开始,这很好。

seekhead parse

看起来第一个搜索条目从 71 开始。现在从第 59 到第 71 位置有什么。这部分我无法理解。

有人可以帮我理解这部分。

最佳答案

您应该像这样解析字节†( refer to the Matroska specification for details ):

0x11 0x4d 0x9b 0x74 (element ID: SeekHead)
0x40 0x42 (element size: 66)
0xbf (element ID: CRC-32)
0x84 (element size: 4)
0x11 0xac 0x83 0x8a (4-byte CRC-32 value)
0x4d 0xbb (element ID: Seek)
0x8b (element size: 11)
0x53 0xab (element ID: SeekID)
0x84 (element size: 4)
0x15 0x49 0xa9 0x66 (SeekID value; refers to Info element ID)
0x53 0xac (element ID: SeekPosition)
0x81 (element size: 1)
0xe5 (SeekPosition value: 229)
0x4d 0xbb (element ID: Seek)
0x8c (element size: 12)
0x53 0xab (element ID: SeekID)
0x84 (element size: 4)
0x16 0x54 0xae 0x6b (SeekID value; refers to Tracks element ID)
0x53 0xac (element ID: SeekPosition)
0x82 (element size: 2)
0x01 0x56 (SeekPosition value: 342)
0x4d 0xbb (element ID: Seek)
0x8c (element size: 12)
0x53 0xab (element ID: SeekID)
0x84 (element size: 4)
0x12 0x54 0xc3 0x67 (SeekID value; refers to Tags element ID)
0x53 0xac (element ID: SeekPosition)
0x82 (element size: 2)
0x11 0x5c (SeekPosition value: 4444)
0x4d 0xbb (element ID: Seek)
0x8d (element size: 13)
0x53 0xab (element ID: SeekID)
0x84 (element size: 4)
0x1c 0x53 0xbb 0x6b (SeekID value; refers to Cues element ID)
0x53 0xac (element ID: SeekPosition)
0x83 (element size: 3)
0x33 0xd9 0x1c (SeekPosition value: 3397916)
0xec (element ID: Void)
[I stopped parsing here]

这些特定字节结构的简化 ASCII 图形如下:
+- SeekHead -------+
| CRC-32 |
| +- Seek--------+ |
| | SeekID | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID | |
| | SeekPosition | |
| +--------------+ |
+------------------+
Void

我已将主元素(包含其他元素的元素)绘制为框。

要回答您的具体问题:

Looks the first seek entry starts at 71. Now from 59th to 71st position what is there. This part I am not able to understand.



SeekHead从第 59 个字节开始。它的大小在 4 个字节后的第 63 个字节开始。之后,CRC-32 元素从第 65 个字节开始。之后,在第 71 个字节,第一个 Seek找到元素。

†我只是在心里手动解析了这个;希望我没有犯任何错误或拼写错误。

关于ffmpeg - MKV 寻头解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46023979/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com