音频AAC编码的RTMP直播
来源:互联网 发布:怎么根据域名查ip 编辑:程序博客网 时间:2024/06/05 18:26
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直播
- 音频AAC编码的RTMP直播
- 音频AAC编码的RTMP直播
- RTMP直播到FMS中的AAC音频直播
- RTMP直播到FMS中的AAC音频直播
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
- FlexAIR如何去除窗口的边框、菜单栏
- Java Map遍历方式的选择
- Javascript数组中存储函数
- Linux系统文件(目录)结构
- Cocos2d-x v3.0正式版本发布
- 音频AAC编码的RTMP直播
- android.intent.category.DEFAULT的用途和使用
- Java基础巩固之线程学习
- Leetcode - Pointers/Array - Remove Element
- swf文件间通信
- 如何优化Flash动画
- android onNewIntent方法
- Flex应用中引入CSS
- Flex深度复制