ogg-opus协议解析示例2-TOC解析
前面一个介绍了ogg的协议头,并且实战解析了第一个头、第二个头、第一个数据页,基本对ogg的协议解析有了一定的认知,解析了数据页,接着就是数据包了
Opus TOC 字节详解(Table of Contents)
差一点被AI带到沟里去了 ,协议原文 https://datatracker.ietf.org/doc/html/rfc6716#section-3.1
TOC(Table of Contents)字节是 Opus 音频数据包的第一个字节,它定义了该数据包的编码模式、帧大小、声道配置和帧数量等关键信息。
TOC 字节决定了解码器如何解析后续的压缩数据。
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
| config |s| c |
+-+-+-+-+-+-+-+-+
字段 | 位 | 说明 |
---|---|---|
config |
b7-b3 | 编码配置(模式、带宽、立体声等) |
s |
b2 | 立体声标志位 |
c |
b1-b0 | 帧数量代码(控制帧数) |
1. config
(5 位:b7–b3)
前 5 位的配置数定义了 32 种编码配置,不同的编码模式、音频带宽和帧长度组成了这 32 种配置,如下表所示:
+-----------------------+-----------+-----------+-------------------+
| Configuration | Mode | Bandwidth | Frame Sizes |
| Number(s) | | | |
+-----------------------+-----------+-----------+-------------------+
| 0...3 | SILK-only | NB | 10, 20, 40, 60 ms |
| | | | |
| 4...7 | SILK-only | MB | 10, 20, 40, 60 ms |
| | | | |
| 8...11 | SILK-only | WB | 10, 20, 40, 60 ms |
| | | | |
| 12...13 | Hybrid | SWB | 10, 20 ms |
| | | | |
| 14...15 | Hybrid | FB | 10, 20 ms |
| | | | |
| 16...19 | CELT-only | NB | 2.5, 5, 10, 20 ms |
| | | | |
| 20...23 | CELT-only | WB | 2.5, 5, 10, 20 ms |
| | | | |
| 24...27 | CELT-only | SWB | 2.5, 5, 10, 20 ms |
| | | | |
| 28...31 | CELT-only | FB | 2.5, 5, 10, 20 ms |
+-----------------------+-----------+-----------+-------------------+
2. s
字段(b2)
立体声标志位(s)取值 0 表示单声道,1 表示多声道立体声。【这里很多AI都把这个字段说成帧大小~~】
3. c
字段(b1–b0)——帧数量代码
c |
含义 |
---|---|
0 |
1 个 Opus 帧 |
1 |
2 个 Opus 帧(相同大小) |
2 |
2 个 Opus 帧(不同大小)→ 后跟长度字节 |
3 |
1 到 48 个帧 → 后跟一个字节表示帧数(N-1) |
TOC 解析示例
0x78 = 0x01111000
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|0 1 1 1 1|0|0 0|
+-+-+-+-+-+-+-+-+
|_______|_|___|
| | |
| | +-- c字段 (帧计数): 0 (00) - 表示1帧
| +----- s字段 : 0 - 表示单声道
+---------- Config字段: 15 (01111) 对照上面的表对应FB (48kHz) 带宽的Hybrid模式
帧大小为20ms【14是10ms,15是20ms】
| 14...15 | Hybrid | FB | 10, 20 ms |
ogg-opus协议解析示例2-TOC解析的更多相关文章
- dom4j解析示例
收藏信息.xml <?xml version="1.0" encoding="GB2312" standalone="no"?> ...
- DOM解析示例
收藏信息.xml <?xml version="1.0" encoding="GB2312" standalone="no"?> ...
- Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)
*Delphi之通过代码示例学习XML解析.StringReplace的用法 这个程序可以用于解析任何合法的XML字符串. 首先是看一下程序的运行效果: 以解析这样一个XML的字符串为例: <? ...
- syslog之二:syslog协议及rsyslog服务全解析
目录: <syslog之一:Linux syslog日志系统详解> <syslog之二:syslog协议及rsyslog服务全解析> <syslog之三:建立Window ...
- flask 反向解析示例
1 静态网页 和动态网页 1 静态网页:无法与服务器做动态交互的网页 2 动态网页:允许与服务器做动态加护的 2 WEB 与 服务器 1 WEB :网页(HTML,css,JS) 3 服务器的作用: ...
- LoRaWAN协议(一)------架构解析
摘自:http://www.cnblogs.com/answerinthewind/p/6200497.html LoRaWAN协议(一)-----架构解析 (1)LoRaWAN分层 LoRaWAN总 ...
- [原题复现+审计][RoarCTF 2019]Easy Calc(http协议走私、php字符串解析漏洞)
简介 原题复现: 考察知识点:http协议走私.php字符串解析漏洞 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到 ...
- 同人逼死官方系列!基于sddc 协议的SDK框架 sddc_sdk_lib 解析
基于sddc 协议的SDK框架 sddc_sdk_lib 解析 之前在移植 libsddc 库的时候感觉官方 demo 太低效了( ̄. ̄),复制粘贴代码好累,而且写出一个BUG,其他复制的代码整个就裂 ...
- json系列(一)cjson,rapidjson,yyjson解析示例
前言 项目上通过消息中间件传输json格式的数据,其他接收模块需要对json格式的数据进行解析,反序列化.对json解析工具有几个关注点,一是具备解析和构造的基础功能,二是具备解析和构造的高性能,三是 ...
- PLSQL_解析过程及硬解析和软解析的区别(案例)
2014-08-11 Created By BaoXinjian
随机推荐
- Eplan教程:供电回路、柜内照明、风机空调
欢迎大家来到"Eplan带你做项目"第四个过程.在第三个过程中,Eplan带你进入了机械设计中的流体工程设计,向大家介绍了Eplan中怎样进行流体工程设计. 在本次过程中,Epla ...
- .NET Core on K8S学习与实践系列文章 (2020版)
一.关于这个系列 自从去年(2018年)底离开工作了3年的M公司加入X公司之后,开始了ASP.NET Core的实践,包括微服务架构与容器化等等.我们的实践是渐进的,当我们的微服务数量到了一定值时,发 ...
- 计蒜客 A2285 / 2019ICPC徐州 H - Yuuki and a problem
右转学倍增值域分块 直接在神秘数的做法上大力树套树是 naive 的,考虑将值域分块的做法代入优化. 对于一个块 \([2^{k}, 2^{k+1})\) 内最小的数 \(m\),如果当前可以表示出的 ...
- 485转wifi
485转wifi ZLAN7146是一款WIFI串口服务器.该串口服务器可以方便地使得串口设备连接到WIFI无线网络,实现串口设备的无线化网络升级.RS232接口支持全双工.不间断通信:RS485内嵌 ...
- LInux main.cpp 编码问题 导致影响后面的内容
euc-cn linux 的vim 可以查看和设置编码 :set fileencoding euc-cn 表示的是 gbk编码 1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式 ...
- Political Analysis: 世界局势:Polarization +
精英阶层的: ·学历教育 ·财产分布· ·政治经济 政治 外国驻军 区域政权力量 领导人风格: 务实派 亲英美? 亲欧盟 亲日韩 亲俄 亲中国 亲印度 前三大派系 组织规模,阶级成份 资产规模,资金来 ...
- mysql虚拟列(Generated Columns)及JSON字段类型的使用
mysql 5.7中有很多新的特性,但平时可能很少用到,这里列举2个实用的功能:虚拟列及json字段类型 一.先创建一个测试表: drop table if exists t_people; CREA ...
- Win11系统无法识别的usb设备的问题
有电脑基地的小伙伴,在使用Windows11系统的时候,明明之前还可以是识别的USB设备,下一次再使用就变得无法识别的情况,无法使用了,这是怎么回事呢?接下来,技术员小编就来分享具体的解决方法. 在 ...
- unity文件夹复制
如果是编辑器不使用运行时的话,直接使用UnityEditor下的API即可 FileUtil.CopyFileOrDirectory 如果是运行时 /// <summary> /// 文件 ...
- CentOS 7 上部署 OpenLDAP 服务
以下是在 CentOS 7 上部署 OpenLDAP 服务并完成初始化的详细操作步骤,整合了最佳实践和关键注意事项: 一.环境准备 系统更新与依赖安装 sudo yum update ...