AAC的AudioSpecificConfig细节

AAC格式里有个复杂的AudioSpecificConfig, 在FLV格式里称为AAC sequence header。在正式播放ADTS AAC数据包之前,需要用AudioSpecificConfig生成一个audio_tag交给播放器。

其实AudioSpecificConfig的内容,完全可以通过ADTS的7字节头生成,具体来说,AudioSpecificConfig需要3部分数据:profile(LC,Main,HE),sample_rate, channel,这3个数据在ADTS头里都可以找到。具体算法见代码。

有了这3个数据以后,可以进行合并生成2个字节,就是所谓的AudioSpecificConfig,见代码部分config1/config2的算法。

 

//output AAC config header:

 

var profile:int = ((payload[2]&0xc0)>>6)+1;

var sample_rate:int = (payload[2]&0x3c)>>2;

var channel:int = ((payload[2]&0x1)<<2)|((payload[3]&0xc0)>>6);

 

var config1:int = (profile<<3)|((sample_rate&0xe)>>1);

var config2:int = ((sample_rate&0x1)<<7)|(channel<<3);

 

var aacSeqHeader:ByteArray = new ByteArray();

aacSeqHeader.writeByte(config1);

aacSeqHeader.writeByte(config2);

 

根据第一个ADTS包生成的aacSeqHeader,打包到audio_tag里,交给NetStream,后面的ADTS包就可以直接打包成audio_tag播放了。

时间: 2025-01-25 09:08:10

AAC的AudioSpecificConfig细节的相关文章

【基于libRTMP的流媒体直播之 AAC、H264 推送】

这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以及网上没说清楚的地方分享给各位.         RTMP 协议栈的实现,Bill 直接使用的 libRTMP,关于 libRTMP 的编译.基本使用方法,以及简单的流媒体直播框架,请参见博文[C++实现RTMP协议发送H.264编码及AAC编码的音视频],言简意赅,故不再赘述.         言

基于libRTMP的流媒体直播之 AAC、H264 推送

 这段时间在捣腾基于 RTMP 协议的流媒体直播框架,其间参考了众多博主的文章,剩下一些细节问题自行琢磨也算摸索出个门道,现将自己认为比较恼人的 AAC 音频帧的推送和解析.H264 码流的推送和解析以及网上没说清楚的地方分享给各位.         RTMP 协议栈的实现,Bill 直接使用的 libRTMP,关于 libRTMP 的编译.基本使用方法,以及简单的流媒体直播框架,请参见博文[C++实现RTMP协议发送H.264编码及AAC编码的音视频],言简意赅,故不再赘述.         

AAC 格式分析

一SADTS格式:        ADTS的全称是Audio Data Transport Stream.是AAC音频的传输流格式.        AAC音频格式在MPEG-2(ISO-13318-7 2003)中有定义.AAC后来又被采用到MPEG-4标准中.        1. adts_sequence()        {               while (nextbits() == syncword)               {                      a

【基于libRTMP的流媒体直播之 AAC、H264 解析】

   前文我们说到如何在基于 libRTMP 库的流媒体直播过程中推送 AAC .H264 音视频流.本文以上文为基础,阐释如何对 RTMP 包进行解析.重组得到原始的 AAC 音频帧以及 H264 码流.         在继续阅读本文之前,我们首先假设读者已经能够使用 libRTMP 库从 RTMP 直播服务器不断地获取 RTMP 包,如前提不成立,请自行阅读 [抛开flash,自己开发实现C++ RTMP直播流播放器] 一文,实现一个简单的 RtmpDownloader 测试用例.这一部分

AAC头部格式

一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig 1.AudioSpecificConfig 读写header的代码参考    ffmpeg libavcodec\aacenc.c put_audio_specific_config()     ffmpeg libavcodec\mpeg4audio.c avpriv_mpeg4audio_get_config()    fdk-aac libMpegTPEnc\src\tpenc_a

aac格式介绍

AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式                              字节位置    意义0x08,                        // 0,       TagType0xzz, 0xzz, 0xzz,            // 1-3,     DataSize,    0xzz, 0xzz, 0xzz, 0xzz,      // 4-6, 7   TimeStamp | TimeStampExtend    0x00

AAC头部格式,RTP打包格式

一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig 1.AudioSpecificConfig 读写header的代码参考    ffmpeg libavcodec\aacenc.c put_audio_specific_config()     ffmpeg libavcodec\mpeg4audio.c avpriv_mpeg4audio_get_config()    fdk-aac libMpegTPEnc\src\tpenc_a

打包AAC码流到FLV文件

AAC编码后数据打包到FLV很简单. 1. FLV音频Tag格式                              字节位置    意义0x08,                        // 0,       TagType0xzz, 0xzz, 0xzz,            // 1-3,     DataSize,    0xzz, 0xzz, 0xzz, 0xzz,      // 4-6, 7   TimeStamp | TimeStampExtend    0x00

流媒体技术学习笔记之(六)FFmpeg官方文档先进音频编码(AAC)

  先进音频编码(AAC)的后继格式到MP3,和以MPEG-4部分3(ISO / IEC 14496-3)被定义.它通常用于MP4容器格式; 对于音乐,通常使用.m4a扩展名.第二最常见的用途是在MKV(Matroska)文件内,因为它比MP4更好地支持嵌入式基于文本的软字幕.本指南中的示例将使用扩展MP4和M4A. FFmpeg的可支持两个AAC-LC编码器(AAC&libfdk_aac)和一个HE-AAC(V1 / 2)编码器(libfdk_aac).的许可证libfdk_aac不与GPL兼