很久没有更新博客了,最近实习一直挺忙的。最近做的项目有关使用了录音类 MediaRecorder 。其中有个setAudioEncoder设置编解码器和setOutputFormat和输出格式。不太明白这之间有什么约束,但是总觉得不可能是随便设置的但是Google怎么都搜不到这方面相关的,于是去稍微了解了下编码解码器的区别以及它的输出容器。这里自己记录下,也方便大家有个了解。

MediaRecorder.OutputFormat 先看看包含的格式(总计8个)

  • AAC_ADTS
    • .aac
  • AMR_NB
    • .3gp
  • AMR_WB
    • .3gp
  • DEFAULT
  • MPEG_2_TS
    • .ts
  • MPEG_4
    • .mp4
    • .m4a
  • RAW_AMR(此常数在API级别16中已被弃用)
    • .3gp
  • THREE_GPP
    • .3gp
  • WEBM
    • .ogg
    • mkv

MediaRecorder.AudioEncoder 先看看包含的编解码器(总计7个)

  • 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
        • .3gp
      • •MPEG-4
        • .mp4
        • .m4a
      • •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
    • 支持的文件类型/容器格式
      • .3gp
  • 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
    • 支持的文件类型/容器格式
      • .3gp
  • AMR_WB和AMR_NB更多详情
  • VORBIS
    • Ogg Vorbis音频编解码器。
    • Ogg Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。
    • 它是完全免费、开放和没有专利限制的。
    • 支持多声道。
    • 更低的码率和文件体积。
    • Ogg Vorbis文件的扩展名是.ogg。
    • 现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
    • 支持的文件类型/容器格式
      • .ogg
    • •Matroska
      • .mkv (Android 4.0+)
      • Matroska是一种新的多媒体封装格式,它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中。也是其中一种开放源代码的多媒体封装格式。
    • 通过以上整理,我们在使用mediaRecord的时候,就不会盲目去设置AudioEncoder和OutputFormat了,而是根据实际情况来使用。
    • 设置的支持的文件类型/容器格式请参考 Google官方文档
    • 整理的笔记如果错误的地方,请一起交流讨论共同进步,谢谢。
    • 以上资料均来自网络整理,如有侵权请告知。
    很久没有更新博客了,最近实习一直挺忙的。最近做的项目有关使用了录音类MediaRecorder。其中有个setAudioEncoder设置编解码器和setOutputFormat和输出格式。不太明白这之间有什么约束,但是总觉得不可能是随便设置的但是Google怎么都搜不到这方面相关的,于是去稍微了解了下编码解码器的区别以及它的输出容器。这里自己记录下,也方便大家有个了解。MediaRecorder