音频AAC编码的RTMP直播
来源:互联网 发布:企业网站如何优化 编辑:程序博客网 时间:2024/05/21 04:43
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个字节的数据。
后面的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编码的音视频,摄像头直播
- iOS UDID和UUID的区别
- windows下安装LightGBM
- 2017-6-14 关于使用history.go的问题!配合原生应用嵌入H5页面(只有一个webview的的单页应用)返回历史列表记录的问题
- MySql导入数据库过程
- laravel中上传图片过程中遇到的问题
- 音频AAC编码的RTMP直播
- 【重大更新】DevExpress v17.1新版亮点(DevExtreme & HTML5/JS篇)
- 1.什么是uC/OS III,以及uC/OS III的结构
- 基于单应矩阵分解的位姿提取方法
- switch开关按钮
- 数据结构—顺序表
- 1. Python 开篇
- 插入排序
- 一些iOS面试题答案