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

ogg-opus协议解析示例

恿榫 昨天 19:35
OGG 头的示意图
1.png

这张图画的很好,借用一下,图片来源:https://chenliang.org/2020/03/14/ogg-container-format/
 然后我们就一个具体的例子来解读,增强记忆
2.png

 
第一个页

第一部分:Ogg 页面头(Ogg Page Header)
4F 67 67 53 00 02 00 00 00 00 00 00 00 00 7B C0 CC 0B 00 00 00 00 01 BA D3 2F 01 13 4F 70 75 73 48 65 61 64 01 01 38 01 80 BB 00 00 00 00 00
前 27 字节是 Ogg 页面头(Ogg Page Header),标准长度为 27 字节。
Offset: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Bytes: 4F 67 67 53 00 02 00 00 00 00 00 00 00 00 7B C0 CC 0B 00 00 00 00 01 BA D3 2F 01
ASCII:   O  g  g  S
字段字节值说明capture_pattern4F 67 67 53"OggS"Ogg 文件标识符version000Ogg 格式版本header_type022页面类型:0x02 表示这是 初始页(bos),通常是头信息granule_position00 00 00 00 00 00 00 000音频采样位置(此处为 0,因为是头页)bitstream_serialno7B C0 CC 0B0x0BCC C07B流的唯一 ID(小端序)page_sequence_no00 00 00 000页面序号,头页为 0CRC_checksum01 BA D3 2FCRC32 校验和用于校验page_segments011该页包含 1 个 segment第二部分:Segment Table + OpusHead 数据
接下来是 segment table 和实际数据。

  • page_segments 是 01,表示有 1 个 segment。
  • segment table 是 1 字节:13 → 表示第一个 segment 长度为 0x13 = 19 字节
所以接下来的 19 字节是 OpusHead 数据:
Offset: 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
Bytes:   4F 70 75 73 48 65 61 64 01 01 38 01 80 BB 00 00 00 00 00
ASCII:   O  p  u  s  H  e  a  d
字段字节值说明magic_signature8 字节4F 70 75 73 48 65 61 64"OpusHead" ASCIIversion1 字节01版本号,必须为 1channel_count1 字节01声道数:1(单声道)pre_skip2 字节(小端)38 01 → 0x0138 = 312编码器在解码时应跳过的样本数input_sample_rate4 字节(小端)80 BB 00 00 → 0x0000BB80 = 48000 Hz输入采样率(仅作参考)output_gain2 字节(小端)00 00增益(dB × 256),0 表示无增益channel_mapping_family1 字节00通道映射族:0 表示无特殊映射(RTP 标准)详细解释:

<ul>✅ magic_signature: "OpusHead",确认是 Opus 头。
✅ version = 1:符合规范。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

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