之前几篇文章记录了视频的软、硬编码过程,接下来将记录下音频的软、硬编码过程,学习、工作之余,以免忘记。
视频编码地址:
iOS音视频开发-视频会话捕捉
iOS音视频开发-视频硬编码(H264)
iOS音视频开发-视频软编码(x264编码H.264文件)
iOS音视频开发-视频软编码(FFmpeg+x264编码H.264文件)
PCM数据
PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。
移动端对音频的实时采集编码传输,一般为将采集的音频数据设置为PCM格式数据,然后将PCM编码为AAC格式数据,以便后续传输。
PCM的数据格式,这里有篇文章介绍的很好,后续代码中的采样率、声道等均参考此文章设置。
PCM数据格式文章地址:点这里
ADTS
ADTS全称是(Audio Data Transport Stream),是AAC的一种十分常见的传输格式。
将PCM数据编码为AAC的时候需要将每帧的AAC数据添加ADTS header,否则将无法解码播放。
ADTS数据格式分为两部分:
固定头部:adts_fixed_header
可变头部:adts_variable_header
详见Wiki,地址在文章末尾。
主要代码
1、音频捕获代码
1 | #import "BBAudioCapture.h" |
2、编码代码
1 | #import "BBAudioHardEncoder.h" |
以上代码为主要代码,配置代码无非就是采样率:44.1kHz,声道:双声道。
完整代码地址:https://github.com/ibabyblue/PCMHardEncodeToAAC
将编码的AAC数据写入本地文件,利用VLC播放器可以直接播放.aac格式文件,测试很方便。
写在最后,一路学习,坎坷良多,非常感谢无私分享的开发者们,感谢Jovins、iossigner分享的干货,感恩!
参考地址:
http://blog.csdn.net/ownwell/article/details/8114121/
https://wiki.multimedia.cx/index.php?title=ADTS
https://developer.apple.com/documentation/audiotoolbox/audio_converter_services?language=objc