很久没有更新博客了,最近实习一直挺忙的。最近做的项目有关使用了录音类
MediaRecorder
。其中有个setAudioEncoder设置编解码器和setOutputFormat和输出格式。不太明白这之间有什么约束,但是总觉得不可能是随便设置的但是Google怎么都搜不到这方面相关的,于是去稍微了解了下编码解码器的区别以及它的输出容器。这里自己记录下,也方便大家有个了解。
-
AAC_ADTS
-
AMR_NB
-
AMR_WB
-
DEFAULT
-
MPEG_2_TS
-
MPEG_4
-
RAW_AMR(此常数在API级别16中已被弃用)
-
THREE_GPP
-
WEBM
-
AAC(AAC低复杂度(AAC-LC)音频编解码器)
-
AAC_ELD(增强型低延迟AAC(AAC-ELD)音频编解码器)
-
AMR_NB(AMR(窄带)音频编解码器)
-
AMR_WB(AMR(宽带)音频编解码器)
-
DEFAULT
-
HE_AAC(高效率AAC(HE-AAC)音频编解码器)
-
VORBIS(Ogg Vorbis音频编解码器)
这就介绍完了,到这里我们可以关闭网页了。放下砖,让我慢慢说,我们稍微深入的去看看这些编解码的东西
-
AAC
-
采用了全新的算法进行编码,更加高效,具有更高的“性价比”。
-
优点:相对于mp3,AAC格式的音质更佳,文件更小。
-
缺点:AAC属于有损压缩的格式。
-
其设计目标是替代原有MP3编码标准,在与MP3在相似的码率下希望质量优于MP3。这一目标已达到并且由ISO和IEC标准组织标准化在MPEG-2和MPEG-4中。
-
支持的文件类型/容器格式
-
•3GPP
-
•MPEG-4
-
•ADTS原始AAC
-
.aac(在Android 3.1+中解码,在Android 4.0+中编码,不支持ADIF)
-
ADTS(Audio Data Transport Stream):这种格式的特征是它有一个同步的字的比特流,解码器可以在这个流中任何开始位置开始。
-
DAIF:模拟数据交换模式
-
•MPEG-TS
-
.ts (not seekable,Android 3.0+)
-
然后还有大致3个版本
-
AAC_LC
-
AAC低复杂度(AAC_LC)音频编解码器
-
设计用于数字电视,AAC_LC用于存储空间和计算能力有限的情况。
-
AAC-LC是充分利用心理声学原理,对人类对音频信号的感知存在不相干性和统计冗余的特性,最大程度的减少用于表达信号的比特数据,实现音频信号快速有效地压缩,而不再追求输出信号和原始信号相似度。
-
重要技术点
-
支持从8到48 kHz的标准采样率的单声道/立体声/ 5.0 / 5.1内容。
-
HE_AAC
-
高效率AAC(HE-AAC)音频编解码器
-
分为两个版本
-
HE_AACV1(编码器 Android4.1+)
-
支持从8到48 kHz的标准采样率的单声道/立体声/ 5.0 / 5.1内容。
-
HE_AACV2(增强的AAC+)
-
支持从8到48 kHz的标准采样率的立体声/ 5.0 / 5.1内容。
-
对比与AAC_LC
-
同等音频,音频文件体积(低码率下比较明显):AAC_LC > HE_AAC
-
算法复杂度:AAC_LC < HE_AAC
-
更加详细的性能对比
-
AAC_ELD
-
增强型低延迟AAC(AAC-ELD)音频编解码器
-
编码器:(Android 4.1+)
-
解码器:(Android 4.1+)
-
支持从16到48 kHz的标准采样率的单声道/立体声内容
-
能提供跟CD一样的音频质量,让用户获得无与伦比的通信体验。是唯一被广泛采用的全高清语音技术。
-
AMR_NB
-
AMR(窄带)音频编解码器
-
主要用于第三代移动通信 W-CDMA 系统中
-
AMR-NB 支持八种速率模式。使其以更加智能的方式解决信源和信道编码的速率分配问题,根据无线信道和传输状况来自适应地选择一种编码模式进行传输,使得无线资源的配置与利用更加灵活有效。
-
模式 0(4.75kbit/s)
-
模式 1(5.15kbit/s)
-
模式 2(5.90kbit/s)
-
模式 3(6.70kbit/s)
-
模式 4(7.40kbit/s)
-
模式 5(7.95kbit/s)
-
模式 6(10.2kbit/s)
-
模式 7(12.2kbit/s)
-
在8kHz采样时为4.75至12.2 kbps
-
支持的文件类型/容器格式
AMR_WB
-
AMR(宽带)音频编解码器
-
作为第三代移动通信系统使用的语音编解码算法
-
AMR-WB 音频带宽在 50Hz-7000Hz,相对于 200Hz-3400Hz 为宽带,支持九种速率模式
-
模式 0(6.60kbit/s)
-
模式 1(8.85kbit/s)
-
模式 2(12.65kbit/s)
-
模式 3(14.25kbit/s)
-
模式 4(15.85kbit/s)
-
模式 5(18.25kbit/s)
-
模式 6(19.85kbit/s)
-
模式 7(23.05kbit/s)
-
模式 8(23.85kbit/s)
-
采用的是代数码激励线性预测编码(Algebraic Code ExcitedLinear Prediction,简称 ACELP),其已被 3GPP选定为GSM和3G无线W-CDMA的宽带编码器,并将应用于IP电话、第三代移动通信、ISDN 宽带电话、ISDN 可视电话和电视会议等领域,这标志着无线和有线业务第一次采用同样的编码器。
-
9个速率从6.60 kbit / s到23.85 kbit / s采样@ 16kHz
-
支持的文件类型/容器格式
AMR_WB和AMR_NB更多详情
VORBIS
-
Ogg Vorbis音频编解码器。
-
Ogg Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。
-
它是完全免费、开放和没有专利限制的。
-
支持多声道。
-
更低的码率和文件体积。
-
Ogg Vorbis文件的扩展名是.ogg。
-
现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
-
支持的文件类型/容器格式
-
•Matroska
-
.mkv (Android 4.0+)
-
Matroska是一种新的多媒体封装格式,它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中。也是其中一种开放源代码的多媒体封装格式。
-
通过以上整理,我们在使用mediaRecord的时候,就不会盲目去设置AudioEncoder和OutputFormat了,而是根据实际情况来使用。
-
设置的支持的文件类型/容器格式请参考
Google官方文档
。
-
整理的笔记如果错误的地方,请一起交流讨论共同进步,谢谢。
-
以上资料均来自网络整理,如有侵权请告知。
很久没有更新博客了,最近实习一直挺忙的。最近做的项目有关使用了录音类MediaRecorder。其中有个setAudioEncoder设置编解码器和setOutputFormat和输出格式。不太明白这之间有什么约束,但是总觉得不可能是随便设置的但是Google怎么都搜不到这方面相关的,于是去稍微了解了下编码解码器的区别以及它的输出容器。这里自己记录下,也方便大家有个了解。MediaRecorder