AAC头部格式,RTP打包格式

摘要:
2个是AAC-LC,5个是SBR,29个是PS。您可以参考flv格式的官方文档http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf3AAC的LATMoverRTP封装格式在RFC3016中定义。每个RTP包的有效载荷在前面是PayloadLengthInfo,每0xFF表示帧长度+255,直到非0xFF是剩余长度;然后是AAC 4的原始流PayloadMux。AAC的另一种RTP打包格式是mpeg4通用格式,它在RFC3640中定义。每个RTP包的负载的前两个字节通常为0x0010,这是AU报头长度,表示AU报头的长度为16位,即2个字节。
一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig

1、AudioSpecificConfig
读写header的代码参考
    ffmpeg libavcodecaacenc.c put_audio_specific_config()
    ffmpeg libavcodecmpeg4audio.c avpriv_mpeg4audio_get_config()
    fdk-aac libMpegTPEncsrc penc_asc.cpp transportEnc_writeASC()
    libaacplus aacplusenc.c aacplusEncGetDecoderSpecificInfo()
 
ISO文档 14496-3
    1.6.2.1 "Syntax - AudioSpecificConfig"
http://www.nhzjj.com/asp/admin/editor/newsfile/2010318163752818.pdf
 
该Header的主要成员
  audioObjectType: 基本的object type用5个比特表示。2是AAC-LC,5是SBR,29是PS。
  samplingFrequencyIndex: 4个比特,用来表示采样率表中的索引号
  channelConfiguration: 4个比特,声道数
  if (audioObjectType == 5 || audioObjectType == 29)
    extensionSamplingFrequencyIndex: 4个比特,表明实际的音频采样率
    audioObjectType:  5个比特,表明基本层编码的AOT
  GASpecificConfig
    frameLengthFlag: 1个比特,0表示帧长为1024,1表示帧长为960
    DependsOnCoreCoder: 1个比特
    extensionFlag: 1个比特
 
剩余的扩展字段 
  syncExtensionType:  11个比特,0x2b7表示HE-AAC的扩展
  if (syncExtensionType == 0x2b7) {
    extensionAudioObjectType: 5个比特
    if ( extensionAudioObjectType == 5 ) {
      sbrPresentFlag: 1个比特
      if (sbrPresentFlag == 1) {
        extensionSamplingFrequencyIndex: 4个比特
      }
    }
  }
 
object type、sample rate详细表格可以参考
http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio
 
如果是HE-AAC,有两种explicit和implicit一共三种声明模式。在explicit模式一(hierarchical signaling),AOT是5,然后在channels之后会有扩展的采样率和AOT字段(这里的AOT用于表明基本层编码,一般是2 AAC-LC),fdk_aac采用的这种方式;在explicit模式二(backward compatible signaling),AOT仍然是2(AAC-LC),但在GASpecificConfig后会有同步字0x2b7和sbrPresentFlag,libaacplus采用的是这种方式;在implicit模式,AOT仍然是2(AAC-LC),AudioSpecificConfig没有任何扩展,仍只是2个字节,需要靠解码器在AAC码流中找到SBR的数据
参考论文《A closer look into MPEG-4 High Efficiency AAC》
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.4563&rep=rep1&type=pdf
http://developer.apple.com/library/ios/#technotes/tn2236/_index.html
 
 
2、StreamMuxConfig
写header的代码参考
    ffmpeg libavformatlatmenc.c latm_write_frame_heade()
    ffmpeg libavcodecaacdec.c read_stream_mux_config()
    fdk-aac libMpegTPEncsrc penc_latm.cpp CreateStreamMuxConfig()
 
ISO文档 14496-3
    1.7.3 Multiplex Layer
 
 
其他相关的
1、TS流可以使用ADTS和LATM两种封装格式。在ffmpeg的mpegtsenc中,用了一个amux的AVFormatContext,先把非ADTS的raw aac流写成ADTS或者LATM格式,然后再写入TS流
2、FLV/RTMP有两种AAC AUDIO DATA,0是AudioSpecificConfig,1是raw的AAC流。可以参考flv格式的官方说明文档
http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf
3、AAC的LATM over RTP打包格式定义在RFC 3016。SDP中几个参数含义:object,就是AAC的AOT;cpresent=0,表示StreamMuxConfig不出现在码流中;config,就是StreamMuxConfig用base16进行编码。每个RTP包的载荷,最前面是PayloadLengthInfo,每出现一个0xFF表示帧长度+255,直至非0xFF就是剩余的长度;然后就是PayloadMux即AAC的裸流

4、AAC的另外一种RTP打包格式是mpeg4-generic,定义在RFC 3640。SDP中几个参数含义:config,就是AudioSpecificConfig的十六进制表示;sizeLength=13; indexLength=3,这是每个rtp包头都是固定的。每个RTP包的载荷,最前面2个字节一般是0x00 10,这是 AU-headers-length,表示AU header的长度是16个比特也就是2个字节。后面2个字节,高13位是AAC帧的长度,低3位为0。

免责声明:文章转载自《AAC头部格式,RTP打包格式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信小程序自定义组件笔记-组件模板和样式Canvas:橡皮筋线条绘制下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FFMPEG 常用命令行

目录 1. 分离音视频 2. 解复用 3. 视频转码 4. 视频封装 5. 视频剪切 6. 视频录制 7.叠加水印 8.将MP3转换为PCM数据 9. 推送RTP流、接收RTP流并存为ts文件 10. ffmpeg 编码 11. ffmpeg 解码 12. 截取 YUV 13. 压缩分辨率 14. ffplay 播放YUV 15. ffplay 播放...

GBT28181中的RTP

国标中说h264数据按照RFC3984打包,但是国标的测试工具——SPVMN,却不支持RFC3984的打包方式。无奈之下直接用RFC3550的方式打包,其实就是分包,然后加上RTP头,对于一帧的结束,在RTP头中把MARK置1,并且在一帧的开始把时间戳增加而已。这种打包方式其实和RFC有冲突,打包处理的RTP数据用VLC播放解码不正常,但用SPVMN是可以...

ffmpeg参数说明(转载)

ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数 作用(time_off set...

11.3.1 将MediaRecorder用于视频

    为了将MediaRecorder用于视频捕获,必须采用与音频捕获相同的步骤,同时加上一些视频特定的步骤。此外,MediaRecorder是一个状态机,因此必须遵循从实例化到录制的特定步骤序列。     首先将实例化MediaRecorder,然后依次进行其他的步骤。 1 MediaRecorder recorder=new Medi...

AAC帧格式及编码介绍

参考资料: AAC以adts格式封装的分析:http://wenku.baidu.com/view/45c755fd910ef12d2af9e74c.html aac编码介绍:http://wenku.baidu.com/view/0de48034f111f18583d05a65.html AAC音频压缩编码标准的ADTS与LATM的格式分析:http:/...

码片速率的含义

1.符号速率 符号速率*扩频因子=码片速率,符号速率=码片速率/扩频因子 如: WCDMA, 码片速率= 3.84 MHz ,扩频因子=4 ,则符号速率=960kbps. CDMA 1X, 码片速率=1.2288MHz,扩频因子=64,则符号速率=19.2kbps. 符号速率=(业务速率+校验码)*信道编码*打孔率 如: WCDMA ,业务速率=384kb...