找回密码
 立即注册
首页 业界区 业界 ogg-opus协议解析示例2-TOC解析

ogg-opus协议解析示例2-TOC解析

粹脍誊 5 小时前
前面一个介绍了ogg的协议头,并且实战解析了第一个头、第二个头、第一个数据页,基本对ogg的协议解析有了一定的认知,解析了数据页,接着就是数据包了
Opus TOC 字节详解(Table of Contents)

差一点被AI带到沟里去了 ,协议原文 https://datatracker.ietf.org/doc/html/rfc6716#section-3.1
TOC(Table of Contents)字节是 Opus 音频数据包的第一个字节,它定义了该数据包的编码模式、帧大小、声道配置和帧数量等关键信息。
TOC 字节决定了解码器如何解析后续的压缩数据。
  1.                               0 1 2 3 4 5 6 7
  2.                              +-+-+-+-+-+-+-+-+
  3.                              | config  |s| c |
  4.                              +-+-+-+-+-+-+-+-+
复制代码
字段位说明configb7-b3编码配置(模式、带宽、立体声等)sb2立体声标志位cb1-b0帧数量代码(控制帧数)1. config(5 位:b7–b3)

前 5 位的配置数定义了 32 种编码配置,不同的编码模式、音频带宽和帧长度组成了这 32 种配置,如下表所示:
  1.    +-----------------------+-----------+-----------+-------------------+
  2.    | Configuration         | Mode      | Bandwidth | Frame Sizes       |
  3.    | Number(s)             |           |           |                   |
  4.    +-----------------------+-----------+-----------+-------------------+
  5.    | 0...3                 | SILK-only | NB        | 10, 20, 40, 60 ms |
  6.    |                       |           |           |                   |
  7.    | 4...7                 | SILK-only | MB        | 10, 20, 40, 60 ms |
  8.    |                       |           |           |                   |
  9.    | 8...11                | SILK-only | WB        | 10, 20, 40, 60 ms |
  10.    |                       |           |           |                   |
  11.    | 12...13               | Hybrid    | SWB       | 10, 20 ms         |
  12.    |                       |           |           |                   |
  13.    | 14...15               | Hybrid    | FB        | 10, 20 ms         |
  14.    |                       |           |           |                   |
  15.    | 16...19               | CELT-only | NB        | 2.5, 5, 10, 20 ms |
  16.    |                       |           |           |                   |
  17.    | 20...23               | CELT-only | WB        | 2.5, 5, 10, 20 ms |
  18.    |                       |           |           |                   |
  19.    | 24...27               | CELT-only | SWB       | 2.5, 5, 10, 20 ms |
  20.    |                       |           |           |                   |
  21.    | 28...31               | CELT-only | FB        | 2.5, 5, 10, 20 ms |
  22.    +-----------------------+-----------+-----------+-------------------+
复制代码
2. s 字段(b2)

立体声标志位(s)取值 0 表示单声道,1 表示多声道立体声。【这里很多AI都把这个字段说成帧大小~~】
3. c 字段(b1–b0)——帧数量代码

c含义01 个 Opus 帧12 个 Opus 帧(相同大小)22 个 Opus 帧(不同大小)→ 后跟长度字节31 到 48 个帧 → 后跟一个字节表示帧数(N-1)TOC 解析示例

0x78 = 0x01111000
  1. 0 1 2 3 4 5 6 7
  2. +-+-+-+-+-+-+-+-+
  3. |0 1 1 1 1|0|0 0|
  4. +-+-+-+-+-+-+-+-+
  5. |_______|_|___|
  6.     |    |  |
  7.     |    |  +-- c字段 (帧计数): 0 (00) - 表示1帧
  8.     |    +----- s字段 : 0 - 表示单声道
  9.     +---------- Config字段: 15 (01111) 对照上面的表 FB (48kHz) 带宽的Hybrid模式 帧大小为20ms【14是10ms,15是20ms】
复制代码
  1.    | 14...15               | Hybrid    | FB        | 10, 20 ms         |
复制代码
来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除

相关推荐

您需要登录后才可以回帖 登录 | 立即注册