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
随机推荐
- hot100之数组
最大子数组和(053) 先看代码 class Solution { public int maxSubArray(int[] nums) { int n = nums.length; int subS ...
- vue脚手架搭建,出现无法将“vue”项识别....
前言: 肯定有很多小伙伴和我一样,想在各种开发工具的终端运行命令来新建vue-cli脚手架,可是vue命令就是识别不到,然后又很烦,不妨看看我这个解决方案吧!!! 遇见问题: vue : 无法将&qu ...
- MapReduce Shuffle机制
Mapper端:每个mapTask有一个环形缓冲区,用于存储map任务的输出.默认大小100M(io.sort.mb属性),一旦达到阀值0.8(io.sort.spill.percent),一个后台线 ...
- Codeforces Round #603 (Div. 2) ABC 题解
A. Sweet Problem 题意:有三个数,每次可以选两个-1,问最多能挑多少次. 思路:贪心一下.策略如下: 1.先将三个数排个序. 2.然后如果最大的和次大的不一样多的话,就让最大的和最小的 ...
- CMake 实践 小结
网上已经有很多的CMake的总结也好博客也好. 全当个人的记录.如果有错误务必留言. what is CMake? 一般来说就是一个自动生成makefile的工具.--脚本语言. why learn ...
- leetcode 92 翻转链表 II
简介 直接使用reverse, 进行值的替换, 链表翻转实在是太烦了 code class Solution { public: ListNode* reverseBetween(ListNode* ...
- 实用Linux命令记录
ss统计网络连接情况 [root@Dev-8.8.8.8 ~]# ss -tan |awk 'NR>1 {++sum[$1]} END{for(i in sum) print i"\t ...
- mock测试及jacoco覆盖率
单元测试是保证项目代码质量的有力武器,但是有些业务场景,依赖的第三方没有测试环境,这时候该怎么做Unit Test呢,总不能直接生产环境硬来吧? 可以借助一些mock测试工具来解决这个难题(比如下面要 ...
- JVM问题典型案例定位学习
下面这4个案例来自大神"你假笨"(任职阿里期间,花名:寒泉子)在qcon上的分享,记录一下: 一.类加载死锁 现象:jstack将线程dump出来后,找不到deadlock字样的死 ...
- 【🔥🔥🔥Redis 内存管理核心】过期键删除策略与内存淘汰机制详解
Redis 的过期键删除策略和内存淘汰策略是其管理内存.防止内存耗尽的关键机制,它们解决的是不同层面的问题: 一.过期键删除策略 目标是自动删除那些设置了过期时间且已过期的键,释放其占用的内存.Red ...