音频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-law logarithmic PCM

8 = G.711 mu-law logarithmic PCM

9 = reserved

10 = AAC

11 = Speex

14 = MP3 8 kHz

15 = Device-specific sound

低4位的前2位代表抽样频率,二进制11代表44kHZ。第3位代表 音频用16位的。第4个bit代表声道数,0单声道,1双声道。尽管如此,实际使用发现这个AF00根本不需要更改,我用的24K采样、单声道,这个数据也是AF00没问题,关键是后面两个字节。

后面两个字节叫做AudioSpecificConfig,从最高位到最低位,分别表示:

前5位,表示编码结构类型,AAC main编码为1,LOW低复杂度编码为2,SSR为3。

接着4位,表示采样率。 按理说,应该是:0 ~ 96000, 1~88200, 2~64000, 3~48000, 4~44100, 5~32000, 6~24000, 7~ 22050, 8~16000...),通常aac固定选中44100,即应该对应为4,但是试验结果表明,当音频采样率小于等于44100时,应该选择3,而当音频采样率为48000时,应该选择2;

接着4为,表示声道数。

最后3位,固定为0吧。

在程序里面,发送rtmp的时候,初始化以后,不用自己填充这一堆数据,直接调用faacEncGetDecoderSpecificInfo,就能返回这个配置信息,很简单,2个字节的数据。

char *buf;
int len;
faacEncGetDecoderSpecificInfo(hEncoder, &buf, &len);
rtmp_sendaac_spec(buf, len);
free(buf);

后面的AAC数据发送的时候,前面7个字节都是帧头数据,不用发送,把后面的数据用RTMP发出去就行了。详细代码就不贴了。

使用H264压缩视频或者桌面,使用AAC压缩音频,使用RTMP直播,使用MP4保存,整个程序就快完工了!这几天在折腾这部分代码,有没有也在做这方面工作的,欢迎交流哈!嘿嘿。。。

音频AAC编码的RTMP直播,码迷,mamicode.com

时间: 2024-10-14 21:33:55

音频AAC编码的RTMP直播的相关文章

音频AAC编码浅析

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

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,可

发布一个软件,轻新视频录播程序,H264/AAC录制视音频,保存FLV,支持RTMP直播

已经上传到CSDN,下载地址:http://download.csdn.net/detail/avsuper/7421647,不要钱滴,嘿嘿... 本程序可以把摄像头视频和麦克风音频,录制为FLV文件. 视频压缩采用H.264编码,音频压缩采用AAC编码,支持同步进行RTMP直播(服务器端需要FMS/WOWZA/RED5等).可选择码率.分辨率.帧率.关键帧间隔等信息. 1号教室网(http://www.1jiaoshi.com)出品. 同时也做了一个可将屏幕和音频同步直播录制的软件,支持FLV

RTMP直播到FMS中的AAC音频直播

本文引用了下面几个网友的文章: http://sun3eyes.blog.163.com/blog/#m=0&t=3&c=rtmp http://sun3eyes.blog.163.com/blog/static/1070797922012913337667/ http://sun3eyes.blog.163.com/blog/static/107079792201291112451996/ http://blog.csdn.net/helunlixing/article/details/

(转)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

公布一个软件,轻新视频录播程序,H264/AAC录制视音频,保存FLV,支持RTMP直播

已经上传到CSDN,下载地址:http://download.csdn.net/detail/avsuper/7421647,不要钱滴,嘿嘿... 本程序能够把摄像头视频和麦克风音频,录制为FLV文件. 视频压缩採用H.264编码,音频压缩採用AAC编码,支持同步进行RTMP直播(server端须要FMS/WOWZA/RED5等).可选择码率.分辨率.帧率.关键帧间隔等信息. 1号教室网(http://www.1jiaoshi.com)出品. 同一时候也做了一个可将屏幕和音频同步直播录制的软件,

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

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

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

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

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