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数据相关推荐

  1. QIIME2导入数据-fq数据转换成qza数据-使用方法心得

    启动QIIME2运行环境 conda activate qiime2-2019.4 ###新建并定位设置到存在fq数据的文件夹 mkdir qiime2-importing-tutorial ##建立 ...

  2. Python读取excel表格数据并绘制成柱状图 | 数据排序、柱状图颜色、标签乱码等问题通通能够解决!

    hello大家好, 我是你们的可爱丸, 我们又见面啦! python的功能十分强大, 它不仅可以用来做爬虫, 还可以用来做数据分析哦! 那么今天我就带着大家 用python 分析表格数据,并绘制成柱状 ...

  3. 把html转换为json数据,HTML转成JSON数据

    例如以下HTML 01010004一次性注射器10ml 要转换成 {"ID":"01010004","Name":"一次性注射器& ...

  4. 获取minist数据并转换成lmdb

    caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...

  5. badatatable转成json_数据表转换成json(DatatableToJson)

    #region 转换Table为JSON数据 /// /// 转换Table为JSON数据 /// /// /// public static string TableToJson(DataTable ...

  6. OpenCV内存方式,将rgb数据压缩成jpg数据

    #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <pthread.h& ...

  7. SpringMVC响应的方式,无数据跳转页面,带数据跳转页面.Json数据返回

    SpringMVC响应的方式,无数据跳转页面,带数据跳转页面.Json数据返回 页面跳转设定 //转发会把后端携带的request和Response发送到前端jsp,在jsp中可以直接使用其中的数据/ ...

  8. vue 动态路由的实现(后台数据,前台拿到数据生成侧边栏)

    之前开发的vue项目路由都是写在前台的,现在公司需要把路由放在后台生成,前台用接口拿到数据,渲染成路由数据,生成左侧菜单,我之前也是参照大师兄的一篇博文,写的,然后用的过程中就有一些问题出现,比如登录 ...

  9. C#实现RTP数据包传输

    闲暇时折腾IP网络视频监控系统,需要支持视频帧数据包在网络内的传输. 未采用H.264或MPEG4等编码压缩方式,直接使用Bitmap图片. 由于对帧的准确到达要求不好,所以采用UDP传输.如果发生网 ...

最新文章

  1. java服务端同时接收和发送_如何实现客户端接收数据和发送数据的同步?
  2. 《系统集成项目管理工程师》必背100个知识点-51项目人力资源管理
  3. send()/recv()和write()/read():发送数据和接收数据
  4. kotlin学习之类的扩展(四)
  5. C#正则表达式开源工具
  6. html hover效果下拉个框,关于下拉菜单(CSS)中,“:hover”样式的设置问题?
  7. sublime:查看二进制文件
  8. C/C++排序算法(6)堆排序
  9. java 字符界面 curses_[C++]Linux之图形界面编程库[curses库]之入门教程
  10. 最火UI素材|短视频、直播APP套件,轻松搞定设计
  11. stream 多个字段分组_Python Pandas对Excel数据的分组聚合和数据透视
  12. 测试面试题集-Python编程题(1)
  13. Net平台下的Mock工具---Rhino Mocks
  14. Cadence OrCad Allegro SPB 16.6 下载及安装破解指南
  15. 在线JSON转Excel工具
  16. 逻辑数据库设计 - 可变属性(继承)
  17. O-Growing Mushrooms
  18. 访问对象存储资源下载变成预览
  19. iOS - 递归遍历文件夹下的所有文件
  20. 2023阿里云账号注册流程(多种注册方法随便选)

热门文章

  1. matlab 广义特征,特征值 特征向量 广义特征值 matlab
  2. 面试时巧用这些“谈薪技巧”,让你的薪资提高20%!
  3. 算法入坑——之字形打印矩阵
  4. 深入浅出推荐系统(六):召回:一切为了业务
  5. php魔术方法在手册哪看,探秘PHP中的魔术方法
  6. UnityVR--机械臂场景6-三自由度逆向解算1
  7. 解决adb server version (36) doesn‘t match this client (41); killing...
  8. SQL难点对比分析:COUNT(IF) 和 SUM(IF)的区别
  9. 城市:天际线/Cities: Skylines 全DLC解锁
  10. 用STM32F1的去读485通讯的的陀螺仪的数据