音频AAC编码浅析

/*
*    unsigned long   nSampleRate,        // 采样率,单位是bps
*    unsigned long   nChannels,          // 声道,1为单声道,2为双声道
*    unsigned long   &samplesInput,     // 传引用,得到每次调用编码时所应接收的原始数据长度
*    unsigned long   &maxBytesOutput   // 传引用,得到每次调用编码时生成的AAC数据的最大长度
*/
    enc = faacEncOpen(samplerate, channels, &samplesInput, &maxBytesOutput);

在使用aac编码之前 由已知采样率和声道 首先获取 每次aac编码所应接收的原始数据长度即上面代码中第三个参数 samplesInput

还有每次编码时输出的aac数据最大长度 即上面代码中第四个参数 maxBytesOutput

音频编码:

int enc_result = faacEncEncode(enc, (int32_t *) pcm_buffer, samplesInput, out, enc_size);

在真正音频aac编码时,该接口使用的pcm_buffer[] 也就是输入的原始数据要等于之前获取的每次aac编码所应接收的原始数据长度 也就是上面获取的 samplesInput 的长度

enc_size 就是上面获取的每次编码时输出的aac数据最大长度 也就是上面获取的 maxBytesOutput

上面 out[] 大小就是 maxBytesOutput 的长度

备注:在音频编码的时候只需要原始的pcm数据,那些时间戳跟真正aac编码没有太大关系。时间戳可能会跟音频aac编码后的数据一起进行下一步操作。

时间: 2024-10-18 16:51:04

音频AAC编码浅析的相关文章

音频AAC编码的RTMP直播

RTMP直播,音频编码采用AAC时,需要把帧头的数据去掉. 第一个数据包,发送4个字节,前面两个是0xAF.0x00,我看有文章写的是这个0xAF的A代表的是AAC,说明如下: 0 = Linear PCM, platform endian 1 = ADPCM 2 = MP3 3 = Linear PCM, little endian 4 = Nellymoser 16 kHz mono 5 = Nellymoser 8 kHz mono 6 = Nellymoser 7 = G.711 A-l

iOS音频AAC视频H264编码 推流最佳方案

项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成h264,音频编码成aac *  实现音视频数据的发布,将编码好的音视频数据传输到服务器 2 视频和音频编码方案 视频硬编码需要使用AVAssetWriter,但是他只支持直接将数据编码成h264并写入文件,不提供接口中途获取视频数据处理,我们需要在保存的文件中读出数据 据顶采用软编码,主流开源编解码器Xvid,x264,ffmpeg,Xvid是

采集音频和摄像头视频并实时H264编码及AAC编码

0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术,适用于这种实时性的应用,通过处理采集出来的音视频的每一帧,实现实时编码,实时输出.这是我做直播系列应用的一部分,目前的情况是输入端采用DirectShow技术捕获音视频,然后对视频进行h.264编码,对音频进行aac编码,输出端则是生成文件,接下来还要进一步扩展输入端和输出端,以支持文件.桌面输入,

笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案

这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成h264,音频编码成aac *  实现音视频数据的发布,将编码好的音视频数据传输到服务器 2 视频和音频编码方案 视频硬编码需要使用AVAssetWriter,但是他只支持直接将数据编

C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP协议可用于实现直播.点播应用,通过FMLE(Flash Media Live Encoder)推送音视频数据至RtmpServer,可

C++实现RTMP协议发送H.264编码及AAC编码的音视频

转自:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP协议可用于实现直播.点播应用,通过FMLE(Flash Me

(转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播

转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司创建,后来归Adobe公司所有,是一种私有协议,主要用来联系Flash Player和RtmpServer,如FMS, Red5, crtmpserver等.RTMP

librtmp推流使用aac编码音频的html5和flash播放问题

公司项目中使用rtmp推流,音频编码aac.视频编码H264.windows和android平台都没有发现问题.然而在IOS版本的APP中发现几个问题:1. 推流后flash播放异常2. IOS平台微信分享后html5播放异常但是在PC上播放正常,android平台上html5播放正常. 经过两天的钻研,发现问题如下:1. rtmp建立连接的时候先发送音视频相关参数.或者第一帧发送的数据应该如下: 1 m_pPacketAudio->m_nChannel = 0x04; 2 m_pPacketA

PCM音频文件编码

PCM文件:模拟音频信号经模数转换(A/D变换)直接形成的二进制序列,该文件没有附加的文件头和文件结束标志.Windows的Convert工具可以把PCM音频格式的文件转换成Microsoft的WAV格式的文件. 将音频数字化,其实就是将声音数字化.最常见的方式是透过脉冲编码调制PCM(Pulse Code Modulation) .运作原理如下.首先我们考虑声音经过麦克风,转换成一连串电压变化的信号,如图一所示.这张图的横座标为秒,纵座标为电压大小.要将这样的信号转为 PCM 格式的方法,是使