RTP传输AAC

简介: RTP传输AAC

AAC格式

  • AAC音频文件有一帧一帧的ADTS帧组成,每个ADTS帧包含ADTS头部和AAC数据,如下所示

  • ADTS头部的大小通常为7个字节,包含着这一帧数据的信息,由固定和可变两部分组成
  • 固定部分

  • 可变部分

  • 各字段的意思如下
  • syncword :总是0xFFF, 代表一个ADTS帧的开始, 用于同步.
  • ID :MPEG Version: 0 for MPEG-4,1 for MPEG-2
  • layer :always: ‘00’
  • protection_absent :Warning, set to 1 if there is no CRC and 0 if there is CRC
  • profile :表示使用哪个级别的AAC,如01 Low Complexity(LC) – AAC LC
  • sampling_frequency_index :采样率的下标

  • aac_frame_length :一个ADTS帧的长度包括ADTS头和AAC原始流
  • adts_buffer_fullness :0x7FF 说明是码率可变的码流
  • number_of_raw_data_blocks_in_frame :表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧

AAC的RTP打包

  • AAC的RTP打包方式并没有向H.264那样丰富,我知道的只有一种方式,原因主要是AAC一帧数据大小都是几百个字节,不会向H.264那么少则几个字节,多则几千
  • AAC的RTP打包方式就是将ADTS帧取出ADTS头部,取出AAC数据,每帧数据封装成一个RTP包
  • 需要注意的是,并不是将AAC数据直接拷贝到RTP的载荷中。AAC封装成RTP包,在RTP载荷中的前四个字节是有特殊含义的,然后再是AAC数据,如下图所示
  • 其中RTP载荷的一个字节为0x00,第二个字节为0x10
  • 第三个字节和第四个字节保存AAC Data的大小,最多只能保存13bit,第三个字节保存数据大小的高八位,第四个字节的高5位保存数据大小的低5位
  • AAC RTP包的时间戳计算
    假设音频的采样率位44100,即每秒钟采样44100次,AAC一般将1024次采样编码成一帧,所以一秒就有44100/1024=43帧,RTP包发送的每一帧数据的时间增量为44100/43=1025,每一帧数据的时间间隔为1000/43=23ms。


稀风
+关注
目录
打赏
0
1
1
0
1
分享
相关文章
尝鲜:如何搭建一个简单的webrtc服务器
前几天我一朋友问我有关webrtc的事,简单了解了下相关知识,搭建了一个webrtc的服务,以及经历的各种踩坑事件,感觉踩坑主要是Python、Node、OpenSSL等版本问题和证书问题导致。本来以为很简单的搭建,但在搭建的过程中遇到各种阻碍,写一篇文章梳理一下。
11900 0
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
本文我们主要为大家介绍在 Ubuntu 20.04 上安装 Node.js 和 npm 的三种不同的方式。
158788 7
如何在 Ubuntu 20.04 上安装 Node.js 和 npm
STUN, TURN, ICE介绍
STUN STUN协议为终端提供一种方式能够获知自己经过NAT映射后的地址,从而替代位于应用层中的私网地址,达到NAT穿透的目的。STUN协议是典型的Client-Server协议,各种具体应用通过嵌入STUN客户端与STUN Server端通讯来完成交互。
13404 1
Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出)
Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出)
1691 0
音视频同步的方法:深入探索基于FFmpeg的音视频同步策略(一)
音视频同步的方法:深入探索基于FFmpeg的音视频同步策略
1485 1
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等