AMR数据多帧封装成RTP数据
AMR数据多帧封装在rtp净荷中
AMR在IP域中的净荷格式RFC3267/4867协议描述AMR编码在RTP中的载荷格式,是其在IP域的存在形式。
对于每个RTP会话,AMR净荷有两种模式,分别为节省带宽模式和字节对齐模式,具体采用那种模式,由信令协商决定;采用后一模式可以后可以引入鲁棒排序、帧交叉编码和CRC校验等方式提高语音传输的质量。
节省带宽模式
a)净荷头格式
CMR
CMR(codec mode request)编码模式请求,由发送者向接受者的请求发送者编码器将来的编码速率模式,保存帧类型索引,如果是AMR,取值范围为0-7,表示8种速率模式,如果为AMR-WB,取值范围为0-8,表示9种速率。取值15意味着当前是没有指定哪个模式的请求。
模式选定后,由于采样频率恒定,具体包的打包时长还是不变,不同速率只是净荷长度不一样,例如对于AMR模式0,其速率是4.75Kbit/s,净荷中包含的语音数据为95bits
AMR的8种速率索引表如下图所示
AMR-WB的9种速率索引表如下图所示
b)净荷内容表ToC(table of contents),第一项表示一个语音帧
0 1 2 3 4 5
±±±±±±+
|F| FT |Q|
±±±±±±+
F:用于标志是否最后一个帧,0表示最后1帧.如果是多帧复用才有Toc才会有多项,否则只有1项。
FT:标志对音帧语音编码模式或舒适噪志的模式,取值范围同CMR取值,FT=14 (SPEECH_LOST, only available for AMR-WB) and FT=15 (NO_DATA),FT=15表示没有当前帧没有净荷;取值10-13该帧要丢弃。
Q:指示帧质量,为0表示对应帧被破坏,1表示未被破坏;如果该帧已被破坏,那么可以通过直接丢弃该帧来处理。
净荷内容表就是对帧内容的数据格式说明
c)语音数据speech data
语音数据即为真正的语音帧或舒适噪声帧的数据,每帧数据的描述和ToC每一项对应起来,数据长度取决于对应模式ToC项中的FT标识的模式
下面给出示例:
示例:
单通道单帧
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| CMR=15|0| FT=4 |1|d(0) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| d(147)|P|P|
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+ |
单通道多帧
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| CMR=1 |1| FT=0 |1|1| FT=9 |1|1| FT=15 |1|0| FT=1 |1|d(0) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| d(131)|
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
|g(0) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| g(39)|h(0) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| h(176)|P|P|P|P|P|P|P|
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
字节对齐模式Octet-aligned Mode
a. 净荷头格式
0 10 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
±±±±±±±±± - - - - - - -
| CMR |R|R|R|R| ILL | ILP |
±±±±±±±±± - - - - - - -
CMR:同上;
R:保留位,区分节省带宽模式,这些保留位作用之一就是字节对齐;
ILL:可选,指示交错长度(取值为L,交错长度即为L+1);
ILP:可选,交错块的索引,取值范围为0到ILL,超过这个范围,该帧块应被丢弃。
b. ToC
±--------------------+
| list of ToC entries |
±--------------------+
| list of frame CRCs | (optional)
- - - - - - - - - - -Note, for ToC entries with FT=14 or 15, there will be nocorresponding speech frame or frame CRC present in the payload.
组成同节省带宽模式
ToC项:在该模式下,6位ToC也需要2位补齐。
CRC:CRC校验位可选,如果带外信令协商需要校验,则每项对应每个语音数据进行8位长度的校验。
语音数据
同节省带宽模式,只是要求每帧必须补0对齐;对于多帧的净荷,可以和节省模式一样,一帧顺序排,也可以所有帧以字节为单位交错排序,尽量把各个帧错误敏感位排前面。
示例:
单通道多帧
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| CMR=6 |R|R|R|R|1|FT#1=5 |Q|P|P|0|FT#2=5 |Q|P|P| f1(0…7) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| f1(8…15) | f1(16…23) | … |
- ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
- … :
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| … |f1(152…158) |P| f2(0…7) |
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| f2(8…15) | f2(16…23) | … |
- ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
- … :
±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±+
| … |f2(152…158) |P|
±±±±±±±±±±±±±±±±±±±±±±±±+
多通道
关于多帧复用
多帧复用为了降低带宽,减少网络传输的RTP包数,把多帧的数据打包在1个RTP包里面进行传输。净荷里面用ToC表来管理多帧数据,说明模式等内容,这样也可根据网络状况灵活改变多帧的速率,例如,多帧中每个帧的速率不一定要一样。
采用多帧复用要注意关注RTP包的大小、时戳是否正确
参考
AMR在IP域中的编码(rfc3267,4867)
AMR数据多帧封装成RTP数据相关推荐
- QIIME2导入数据-fq数据转换成qza数据-使用方法心得
启动QIIME2运行环境 conda activate qiime2-2019.4 ###新建并定位设置到存在fq数据的文件夹 mkdir qiime2-importing-tutorial ##建立 ...
- Python读取excel表格数据并绘制成柱状图 | 数据排序、柱状图颜色、标签乱码等问题通通能够解决!
hello大家好, 我是你们的可爱丸, 我们又见面啦! python的功能十分强大, 它不仅可以用来做爬虫, 还可以用来做数据分析哦! 那么今天我就带着大家 用python 分析表格数据,并绘制成柱状 ...
- 把html转换为json数据,HTML转成JSON数据
例如以下HTML 01010004一次性注射器10ml 要转换成 {"ID":"01010004","Name":"一次性注射器& ...
- 获取minist数据并转换成lmdb
caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...
- badatatable转成json_数据表转换成json(DatatableToJson)
#region 转换Table为JSON数据 /// /// 转换Table为JSON数据 /// /// /// public static string TableToJson(DataTable ...
- OpenCV内存方式,将rgb数据压缩成jpg数据
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...
- SpringMVC响应的方式,无数据跳转页面,带数据跳转页面.Json数据返回
SpringMVC响应的方式,无数据跳转页面,带数据跳转页面.Json数据返回 页面跳转设定 //转发会把后端携带的request和Response发送到前端jsp,在jsp中可以直接使用其中的数据/ ...
- vue 动态路由的实现(后台数据,前台拿到数据生成侧边栏)
之前开发的vue项目路由都是写在前台的,现在公司需要把路由放在后台生成,前台用接口拿到数据,渲染成路由数据,生成左侧菜单,我之前也是参照大师兄的一篇博文,写的,然后用的过程中就有一些问题出现,比如登录 ...
- C#实现RTP数据包传输
闲暇时折腾IP网络视频监控系统,需要支持视频帧数据包在网络内的传输. 未采用H.264或MPEG4等编码压缩方式,直接使用Bitmap图片. 由于对帧的准确到达要求不好,所以采用UDP传输.如果发生网 ...
最新文章
- java服务端同时接收和发送_如何实现客户端接收数据和发送数据的同步?
- 《系统集成项目管理工程师》必背100个知识点-51项目人力资源管理
- send()/recv()和write()/read():发送数据和接收数据
- kotlin学习之类的扩展(四)
- C#正则表达式开源工具
- html hover效果下拉个框,关于下拉菜单(CSS)中,“:hover”样式的设置问题?
- sublime:查看二进制文件
- C/C++排序算法(6)堆排序
- java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程
- 最火UI素材|短视频、直播APP套件,轻松搞定设计
- stream 多个字段分组_Python Pandas对Excel数据的分组聚合和数据透视
- 测试面试题集-Python编程题(1)
- Net平台下的Mock工具---Rhino Mocks
- Cadence OrCad Allegro SPB 16.6 下载及安装破解指南
- 在线JSON转Excel工具
- 逻辑数据库设计 - 可变属性(继承)
- O-Growing Mushrooms
- 访问对象存储资源下载变成预览
- iOS - 递归遍历文件夹下的所有文件
- 2023阿里云账号注册流程(多种注册方法随便选)
热门文章
- matlab 广义特征,特征值 特征向量 广义特征值 matlab
- 面试时巧用这些“谈薪技巧”,让你的薪资提高20%!
- 算法入坑——之字形打印矩阵
- 深入浅出推荐系统(六):召回:一切为了业务
- php魔术方法在手册哪看,探秘PHP中的魔术方法
- UnityVR--机械臂场景6-三自由度逆向解算1
- 解决adb server version (36) doesn‘t match this client (41); killing...
- SQL难点对比分析:COUNT(IF) 和 SUM(IF)的区别
- 城市:天际线/Cities: Skylines 全DLC解锁
- 用STM32F1的去读485通讯的的陀螺仪的数据