关于MediaRecorder中的setAudioEncoder和setOutputFormat

原文地址:https://blog.csdn.net/qq_24349189/article/details/78573477

很久没有更新博客了,最近实习一直挺忙的。最近做的项目有关使用了录音类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
    • 支持的文件类型/容器格式 
      • 3GPP 
        • .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
    • 支持的文件类型/容器格式 
      • 3GPP 
        • .3gp
    • AMR_WB和AMR_NB更多详情
  • VORBIS 
    • Ogg Vorbis音频编解码器。
    • Ogg Vorbis是一种新的音频压缩格式,类似于MP3等现有的音乐格式。
    • 它是完全免费、开放和没有专利限制的。
    • 支持多声道。
    • 更低的码率和文件体积。
    • Ogg Vorbis文件的扩展名是.ogg。
    • 现在创建的OGG文件可以在未来的任何播放器上播放,因此,这种文件格式可以不断地进行大小和音质的改良,而不影响旧有的编码器或播放器。
    • 支持的文件类型/容器格式 
      • •Ogg 
        • .ogg
      • •Matroska 
        • .mkv (Android 4.0+)
        • Matroska是一种新的多媒体封装格式,它可将多种不同编码的视频及16条以上不同格式的音频和不同语言的字幕流封装到一个Matroska Media文件当中。也是其中一种开放源代码的多媒体封装格式。

总结说明

  • 通过以上整理,我们在使用mediaRecord的时候,就不会盲目去设置AudioEncoder和OutputFormat了,而是根据实际情况来使用。
  • 设置的支持的文件类型/容器格式请参考Google官方文档
  • 整理的笔记如果错误的地方,请一起交流讨论共同进步,谢谢。
  • 以上资料均来自网络整理,如有侵权请告知。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android MediaRecorder录像时去除开始和停止提示音,可以在MediaRecorder对象初始化时设置一些参数。以下是一些可用的选项: 1. 设置AudioSource为MIC并关闭音频输出: ``` mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mediaRecorder.setAudioEncodingBitRate(16 * 44100); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setOutputFile(outputFile); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024); mediaRecorder.setVideoFrameRate(30); mediaRecorder.setVideoSize(1920, 1080); mediaRecorder.setMaxDuration(3600000); mediaRecorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { @Override public void onInfo(MediaRecorder mr, int what, int extra) { if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) { stopRecording(); } } }); mediaRecorder.prepare(); mediaRecorder.start(); ``` 2. 使用setProfile方法设置音频和视频编码和格式: ``` CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); mediaRecorder.setProfile(profile); ``` 3. 使用setOutputFileDescriptor方法设置文件描述符: ``` ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFile(outputFile); mediaRecorder.setOutputFileDescriptor(pfd.getFileDescriptor()); ``` 这些设置可以帮助你关闭开始和停止提示音。同时,需要注意的是这些设置可能会因设备和Android版本的不同而有所不同,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值