Ffmpeg MKV-seekhead解析

Ffmpeg MKV-seekhead解析,ffmpeg,mkv,Ffmpeg,Mkv,我需要解析matroska文件。文件的初始字节如下所示 0x1a 0x45 0xdf 0xa3 0x01 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 0x

我需要解析matroska文件。文件的初始字节如下所示

0x1a 0x45 0xdf 0xa3 0x01 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 0x00 0x33 0xdb 0x100x11 0x4d 0x9b 0x740x40
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 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 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

我正在尝试解析此文件。我已成功解析前59个字节。现在我是第60个字节。从第6字节开始,字节为0x11 0x4d 0x9b 0x74(以粗体显示),因此表示seekhead正在启动

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

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


有人能帮我理解这部分吗。

你应该像这样解析字节†():

这些特定字节结构的简化ASCII图形如下所示:

+- SeekHead -------+
| CRC-32           |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
+------------------+
Void
我将主元素(包含其他元素的元素)绘制为方框

要回答您的具体问题:

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

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


†我刚刚用手在心里解析了这一点;希望我没有犯任何错误或打字错误。

您应该像这样解析字节†():

这些特定字节结构的简化ASCII图形如下所示:

+- SeekHead -------+
| CRC-32           |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
| +- Seek--------+ |
| | SeekID       | |
| | SeekPosition | |
| +--------------+ |
+------------------+
Void
我将主元素(包含其他元素的元素)绘制为方框

要回答您的具体问题:

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

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

†我刚刚用手在心里解析了这一点;希望我没有犯任何错误或打字错误