AAC ES流如何解码播放

AAC原始流能让ffmpeg软解或系统硬解,最简单的处理可在前面加上ADTS头,那么这个ADTS头如何添加呢?其实就是七个字节,下面分享一个我使用的代码样例,每次传递数据都是以一个个sample为单元的:

adts_header[7] = {0xff,0xf9,0x00,0x00,0x00,0x1f,0xfc};

//AAC level

switch(AAC_level)

{

case AUDIO_AACM:

adts_header[2] |= (0x00 << 6)&0xc0;

break;

case AUDIO_AACL:

adts_header[2] |= (0x01 << 6)&0xc0;

break;

case AUDIO_AACS:

adts_header[2] |= (0x02 << 6)&0xc0;;

break;

default:/*use AACL*/

adts_header[2] |= (0x01 << 6)&0xc0;

break;

}

//sampling rate

switch(AAC_sample_rate)

{

case SAMPLINGRATE_96000HZ:

adts_header[2] |= (0x00 << 2)&0x3c;

break;

case SAMPLINGRATE_88200HZ:

adts_header[2] |= (0x01 << 2)&0x3c;

break;

case SAMPLINGRATE_64000HZ:

adts_header[2] |= (0x02 << 2)&0x3c;

break;

case SAMPLINGRATE_48000HZ:

adts_header[2] |= (0x03 << 2)&0x3c;

break;

case SAMPLINGRATE_44100HZ:

adts_header[2] |= (0x04 << 2)&0x3c;

break;

case SAMPLINGRATE_32000HZ:

adts_header[2] |= (0x05 << 2)&0x3c;

break;

case SAMPLINGRATE_24000HZ:

adts_header[2] |= (0x06 << 2)&0x3c;

break;

case SAMPLINGRATE_22050HZ:

adts_header[2] |= (0x07 << 2)&0x3c;

break;

case SAMPLINGRATE_16000HZ:

adts_header[2] |= (0x08 << 2)&0x3c;

break;

case SAMPLINGRATE_12000HZ:

adts_header[2] |= (0x09 << 2)&0x3c;

break;

case SAMPLINGRATE_11025HZ:

adts_header[2] |= (0x0a << 2)&0x3c;

break;

case SAMPLINGRATE_8000HZ:

adts_header[2] |= (0x0b << 2)&0x3c;

break;

default:/*use 44100*/

adts_header[2] |= (0x04 << 2)&0x3c;

break;

}

//channels

switch(AAC_channel_no)

{

case CHANNEL_NUMBER_1:

adts_header[2] |= (0x01 >> 2)&0x01;

adts_header[3] |= (0x01 << 6)&0xc0;

break;

case CHANNEL_NUMBER_2:

adts_header[2] |= (0x02 >> 2)&0x01;

adts_header[3] |= (0x02 << 6)&0xc0;

break;

case CHANNEL_NUMBER_3:

adts_header[2] |= (0x03 >> 2)&0x01;

adts_header[3] |= (0x03 << 6)&0xc0;

break;

case CHANNEL_NUMBER_4:

adts_header[2] |= (0x04 >> 2)&0x01;

adts_header[3] |= (0x04 << 6)&0xc0;;

break;

case CHANNEL_NUMBER_5:

adts_header[2] |= (0x05 >> 2)&0x01;

adts_header[3] |= (0x05 << 6)&0xc0;

break;

case CHANNEL_NUMBER_6:

adts_header[2] |= (0x06 >> 2)&0x01;

adts_header[3] |= (0x06 << 6)&0xc0;

break;

case CHANNEL_NUMBER_8:

adts_header[2] |= (0x07 >> 2)&0x01;

adts_header[3] |= (0x07 << 6)&0xc0;

break;

default:/*use number 2*/

adts_header[2] |= (0x02 >> 2)&0x01;

adts_header[3] |= (0x02 << 6)&0xc0;

break;

}

adts_header[3] = adts_header[3] | ((AAC_adts_sample_size >> 11)& 0x3);

adts_header[4] = adts_header[4] | ((AAC_adts_sample_size >> 3) & 0xff);

adts_header[5] = adts_header[5] | (((AAC_adts_sample_size >> 0)& 0x07) << 5);

时间: 2024-10-28 19:18:25

AAC ES流如何解码播放的相关文章

转载:AAC文件解析及解码

转自:http://blog.csdn.net/wlsfling/article/details/5876016 http://www.cnblogs.com/gaozehua/archive/2012/05/03/2479960.html OUTLINE: * AAC概述 * AAC规格简述 * AAC特点 * AAC音频文件解析 --ADIF&ADTS格式 --ADIF&ADTS头信息 --ADIF&ADTS数据信息 --AAC文件处理流程 * AAC解码流程 --技术解析 *

AAC 文件解析及解码流程(音频术语aac he lc等及其功能性的描述)

OUTLINE: * AAC概述 * AAC规格简述 * AAC特点 * AAC音频文件解析 --ADIF&ADTS格式 --ADIF&ADTS头信息 --ADIF&ADTS数据信息 --AAC文件处理流程 * AAC解码流程 --技术解析 * 术语说明 一.AAC概述 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术.由Fraunhofer IIS.Dolby Laboratories.AT&

TS流 PS流 ES流

IP数据报有首部和数据两部分组成的,首部的前一部分是固定长度20字节,是所有IP数据报必须具有的.首部包括:总长度.标识.MF.DF.片偏移. 数字信号实际传送的是数据流,一般数据流包括以下三种: (1)ES流(Elementary Stream):也叫基本码流,包含视频.音频或数据的连续码流. (2)PES流(Packet Elementary Stream):也叫打包的基本码流,是将基本的码流ES流根据需要分成长度不等的数据包,并加上包头就形成了打包的基本码流PES流. (3)TS流:也叫传

linux下mplayer(ffmpeg)通过x264解码播放高清h264视频

系统环境: Linux inbank-GZ 2.6.24-16-generic #1 SMP Thu Apr 10 13:23:42 UTC 2008 i686 GNU/Linux Ubuntu 8.04 Genuine Intel(R) CPU   1250  @ 1.73GHz  * 2 1G内存 目标:能用mplayer播放H264格式的高清视频 下载相关软件 Mplayer1.1版本(包含了ffmpeg) 各类解码包codes x264 yasm + faac + faad 可以在这里下

Android音视频学习第7章:使用OpenSL ES进行音频解码

/* * *这里使用了transcode-1.1.7对wav文件进行解码,然后使用opensl es进行播放 * */ //用到的变量和结构体 WAV wav; //wav文件指针 SLObjectItf engineObject; //引擎对象 SLEngineItf engineInterface; //引擎接口 SLObjectItf outputMixObject; //混音器 SLObjectItf audioPlayerObject; //播放器对象 SLAndroidSimpleB

打包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

RTMP、RTSP、HTTP视频协议详解(附:直播流地址、播放软件)

一.RTMP.RTSP.HTTP协议 这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议.理论上这三种都可以用来做视频直播或点播.但通常来说,直播一般用 RTMP.RTSP.而点播用 HTTP.下面分别介绍下三者的特点. 1,RTMP协议 (1)是流媒体协议. (2)RTMP协议是 Adobe 的私有协议,未完全公开. (3)RTMP协议一般传输的是 flv,f4v 格式流. (4)RTMP一般在 TCP 1个通道上传输命令和数据. 2,RTSP协议 (1)是流媒体协议. (2)R

转:利用ffmpeg和opencv进行视频的解码播放

引子 OpenCV中有自己的用于处理图片和视频的类 VideoCapture ,可以很方便的读入文件和显示. 现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,所以需要将ffmpeg中得到的数据缓存转换成可以被OpenCV处理的Mat类对象. ffmpeg介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库

利用ffmpeg和opencv进行视频的解码播放

引子 OpenCV中有自己的用于处理图片和视频的类VideoCapture,可以很方便的读入文件和显示. 现在视频数据流是ffmpeg解码h264文件得到的,由于要依赖该数据源进行相应的后续处理,所以需要将ffmpeg中得到的数据缓存转换成可以被OpenCV处理的Mat类对象. ffmpeg介绍 FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件).它提供了录制.转换以及流化音视频的完整解决方案.它包含了非常先进的音频/视频编解码库li