基于libRTMP的流媒体直播之音频推送
来源:互联网 发布:java serverlet 调用 编辑:程序博客网 时间:2024/04/30 10:49
不论像RTMP服务器推送视频还是音频,都需要按照FLV格式进行封包,然后调用librtmp接口函数进行发送。透过对FLV文件协议的理解,我们在向RTMP服务器发送yin数据包之前,需要需要首先推送一个音频 Tag [Audio Sequence Header] 以下简称“音频同步包”,或者视频 Tag [AVC Sequence Header] 以下简称“视频同步包”。现在我们先来介绍一下这个Tag包:
开头两个字节,表示音频的相关参数,如AAC音频包的头两个字节 AF 00, 前四位 A表示音频类型为AAC,F中,前两位表示采样率,j紧跟着的一位表示采样精度,最后一位表示声道类型(单声道还是双声道)。第二个字节0x00表示传输的音频数据为Audio Sequence Header, 如果时0x01表示发送的数据为音频data数据。
FLV中的格式介绍如下:
对于AAC音频,在这两个字节的后面,还会跟随两个字节AAC特有的头,AudioSpecificConfig,详细指定了AAC音频的参数信息。
前5位,表示AAC的类型(AAC_LC等),紧接着的4个字节表示AAC音频的采样率,紧接着4个位表示音频输出声道信息,最后三位,为三个标志位。例如:例如0X13 0X90, 0x13 0x90(1001110010000) 表示 ObjectProfile=2, AAC-LC,SamplingFrequencyIndex=7,ChannelConfiguration=声道2
具体如下:
详细介绍:
音频类型(5bit):分两种,如果是MPEG-4,支持的种类比较多
- 1: AAC Main
- 2: AAC LC (Low Complexity)
- 3: AAC SSR (Scalable Sample Rate)
- 4: AAC LTP (Long Term Prediction)
- 5: SBR (Spectral Band Replication)
- 6: AAC Scalable
- 7: TwinVQ
- 8: CELP (Code Excited Linear Prediction)
- 9: HXVC (Harmonic Vector eXcitation Coding)
- 10: Reserved
- 11: Reserved
- 12: TTSI (Text-To-Speech Interface)
- 13: Main Synthesis
- 14: Wavetable Synthesis
- 15: General MIDI
- 16: Algorithmic Synthesis and Audio Effects
- 17: ER (Error Resilient) AAC LC
- 18: Reserved
- 19: ER AAC LTP
- 20: ER AAC Scalable
- 21: ER TwinVQ
- 22: ER BSAC (Bit-Sliced Arithmetic Coding)
- 23: ER AAC LD (Low Delay)
- 24: ER CELP
- 25: ER HVXC
- 26: ER HILN (Harmonic and Individual Lines plus Noise)
- 27: ER Parametric
- 28: SSC (SinuSoidal Coding)
- 29: PS (Parametric Stereo)
- 30: MPEG Surround
直播的视频用H264,音频用AAC,从FAAC里面压缩出来的一帧音频数据,要经过简单处理才能打包用RTMP协议发送到FMS上,包括保存成FLV文件,都要稍微处理一下,主要是把AAC的帧头去掉,并提取出相应的信息。
1024字节的G.711A数据,AAC一般也就300多个字节。
可以把FAAC压缩出来的帧直接保存成AAC文件,用windows7自带的播放器可以播放的,方便测试。
AAC的帧头一般7个字节,或者包含CRC校验的话9个字节,这里面包括了声音的相关参数。
结构如下:
Structure
AAAAAAAA AAAABCCD EEFFFFGH HHIJKLMM MMMMMMMM MMMOOOOO OOOOOOPP (QQQQQQQQ QQQQQQQQ)
Header consists of 7 or 9 bytes (without or with CRC).
其中最重要的就是E,F,H。
E就是类型了
0: AAC Main
1: AAC LC (Low Complexity)
2: AAC SSR (Scalable Sample Rate)
3: AAC LTP (Long Term Prediction)
F就是采样频率
0: 96000 Hz
H就是声道
1: 1 channel: front-center
- 基于libRTMP的流媒体直播之音频推送
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 【基于libRTMP的流媒体直播之 AAC、H264 推送】
- 基于libRTMP的流媒体直播之 AAC、H264 推送
- 基于libRTMP的流媒体直播之 AAC、H264 解析
- linux下基于libRTMP的接收流媒体的程序
- 基于AMS流媒体服务器的直播原理
- 基于Rtmp协议的流媒体直播实现
- EasyRTMP直播推送效率优化之开源librtmp CPU占用高效率优化
- UML序列图总结
- HTML5 Canvas 制作一个“在线画板”
- 浅析C语言中五大内存管理
- Android实现pdf在线预览或本地预览
- 打破求助陌生人最后的1cm
- 基于libRTMP的流媒体直播之音频推送
- codeigniter相关操作
- mochiweb源码阅读4-概括与使用
- 栈的压入、弹出序列
- 小猪CMS多用户微信营销平台短信插件开发
- 个人总结·数据结构与算法
- how to execute the sql query in scala
- dom对象数组与jQuery对象数组的遍历方式
- memcpy函数的实现