AAC的RTP封装中的AU头分析
解码器收到一个RTP的AAC流,发现RTP流里的音频里带有4个字节AU头,然后才是AAC的ADTS头。
这种情况之前已经出现过多次,每次我们都告知对方,不要往AAC前面加AU头,解码器不支持。而且在这种一个RTP packet只打一个音频帧的情况,AU头完全没有用啊!
但是发流的同事也很为难,有的地方,你不加AU头,人家解不了。说是标准协议里面要求的。
算了,还是自己动手,在解码器侧,检测AU头,并自动跳过吧!
查阅RFC3640,关于音频AU头信息的使用,一般是这样的:一个packet,包含多个AU。但实际很少有编码器这样打包。
![](https://img2018.cnblogs.com/blog/1550923/201906/1550923-20190604183158297-1030643733.png)
网上很多帖子都说AU头是4个字节,添加方式如下:
1. packet[0] = 0x00; 2. packet[1] = 0x10; 3. packet[2] = (len & 0x1fe0) >> 5; 4. packet[3] = (len & 0x1f) << 3;
但是协议具体是怎么规定的呢?
但是在RFC3640中,并没有发现AU头的具体定义,只找到下面两幅图
继续看文档,发现关于AU头的格式,并没有协议描述其刚好是13bit来定义帧长度,具体的长度实际还是要看sdp文件
下面的两个截图,分别是13bit和6bit的。
每个RTP包的载荷,最前面2个字节一般是0x00 0x10,这是 AU-headers-length,表示AU header的长度是16个比特也就是2个字节。后面2个字节,高13位是AAC帧的长度,低3位为0。
格式不固定,那么我们就没有办法检测判断AU头是否存在,然后跳过了。
算了,还是先按照一个AU头4个字节来处理,sizeLength为13。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
· 重磅发布!DeepSeek 微调秘籍揭秘,一键解锁升级版全家桶,AI 玩家必备神器!