Audio 了解ogg头格式的规范

Audio 了解ogg头格式的规范,audio,hex,ogg,opus,Audio,Hex,Ogg,Opus,为了编写自己的ogg容器类(不使用libogg),我尝试理解所需的头格式。根据,在流的字节27处(从0开始计数)启动“段_表(包含数据包连接值)”。这是红色标记的字节13。关于我想要包含的Opus数据,Opus数据以OpusHead(4F 70 75 73)开头。为什么不从放置红色13的位置27开始?13是一个“设备控制3”符号,既不出现在Ogg规范中,也不出现在Opus规范中 编辑:我发现这有点描述了规范。在那里,很明显(不是从第一个链接imho开始的)13(字节27)是以下段的大小 这似乎是

为了编写自己的ogg容器类(不使用libogg),我尝试理解所需的头格式。根据,在流的字节27处(从0开始计数)启动“段_表(包含数据包连接值)”。这是红色标记的字节
13
。关于我想要包含的Opus数据,Opus数据以
OpusHead(4F 70 75 73)
开头。为什么不从放置红色
13
的位置27开始?
13
是一个“设备控制3”符号,既不出现在Ogg规范中,也不出现在Opus规范中

编辑:我发现这有点描述了规范。在那里,很明显(不是从第一个链接imho开始的)
13
(字节27)是以下段的大小


这似乎是一个单字节,给出了以下段表数据的长度。因此,有13(十六进制)字节(十六进制)的段表数据。

是对格式头更详细的描述

字节26表示段表占用的字节数,因此您可以读取该字节数,再加上27,这将告诉您第一个数据包从何处开始(或继续)

段表告诉您封装数据包的长度。基本上,您可以通读该表,将每个连续字节中的值相加。如果刚刚添加的值小于255,则表示数据包边界,因此记录累加器的当前值,将其重置为零,然后继续,直到到达表的末尾

在您的示例中,字节26中的段表大小为1,因此数据从27+1或字节28开始,这是“OpusHead”字符串的开始。1字节段表中的值为0x13,因此数据包的长度为19字节。28+19是47(或0x2f),这是下一个报头开始时“OggS”捕获模式的开始


这个稍微复杂的算法设计用于存储许多开销有限的小数据包的帧数据,同时仍然允许任意大的数据包。还要注意,数据包可以在页面之间继续,跨越2个或更多段表。

您的答案是基于阅读规范吗?因为规范规定字节26应该是
“page\u segments”,“段表中出现的段条目数。[…]”“
。那么为什么现在是字节27?是的,我读过规范,但不是很清楚。我读它的意思是说这个字节是长度,怎么读?它说:“字节26:page_段”。你为什么认为应该是字节27?它们从0开始计数。我找到了一个链接,可以更详细地解释规范。你说得对,谢谢。