博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android音视频指南-MediaRecorder概述
阅读量:7217 次
发布时间:2019-06-29

本文共 1547 字,大约阅读时间需要 5 分钟。

翻译自

Android多媒体框架支持捕获和编码各种常见的音频和视频格式。如果设备硬件支持,您可以使用 api。

本文档向您展示了如何使用MediaRecorder编写一个应用程序,该应用程序从设备麦克风捕获音频,保存音频并回放(使用MediaPlayer)。要录制视频,你需要使用设备的摄像头和MediaRecorder。这是在指南中描述的。

注意:Android模拟器无法录制音频。一定要在可以录制的真实设备上测试代码。

请求允许录制音频

为了能够录制,你的应用程序必须告诉用户它将访问设备的音频输入。你必须在应用程序的清单文件中包含这个权限标签:

复制代码

RECORD_AUDIO被认为是一个“危险的”权限,因为它可能会对用户的隐私构成威胁。从Android 6.0 (API level 23)开始,使用危险权限的应用程序必须在运行时请求用户批准。用户获得许可后,应用程序应记住并不再询问。使用实现此行为。

创建和运行一个MediaRecorder

用以下调用初始化MediaRecorder的新实例:

  • 使用setAudioSource()设置音频源。你可能会用麦克风。

注意:大多数音频源(包括DEFAULT)会对音频信号进行处理。要录制原始音频选择。有些设备不支持未处理的输入。首先调用以验证其可用性。如果不是,尝试使用替代,它不使用AGC或噪声抑制。即使不支持属性,也可以将未处理的信号用作音频源,但在这种情况下,无法保证信号是否会被未处理。

  • 使用设置输出文件格式。注意,从Android 8.0 (API级别26)开始MediaRecorder支持MPEG2_TS格式,这对于流媒体很有用:
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);复制代码
  • 使用设置输出文件名。必须指定表示实际文件的文件描述符。
  • 使用设置音频编码器。
  • 通过调用prepare()来完成初始化。

分别调用Start()和stop()来启动和停止记录器。

用完MediaRecorder实例后,通过调用release()尽快释放其资源。

注意:在运行Android 9 (API level 28)或更高的设备上,后台运行的应用程序无法访问麦克风。因此,您的应用程序应该只在前台或中包含MediaRecorder实例时录制音频。

使用MediaMuxer录制多个通道

从Android 8.0 (API级别26)开始,您可以使用录制多个同步音频和视频流。在早期的Android版本中,你一次只能录制一个音轨和/或一个视频轨。

使用方法将多轨道混合在一起。

您还可以为每个frame添加一个或多个metadata跟踪,并提供定制信息,但仅限于MP4容器。您的应用程序定义元数据的格式和内容。

添加metadata

metadata可以用于离线处理。例如,从陀螺传感器捕获的数据可以用来稳定视频。

当添加metadata跟踪时,跟踪的mime格式必须以前缀‘application/’开始。编写metadata与编写视频或音频数据是一样的,只是数据不是来自MediaCodec。相反,应用程序将带有相关时间戳的ByteBuffer传递给方法。时间戳必须与视频和音频轨道在同一时间基础上。

生成的MP4文件使用规范12.3.3.2节中定义的TextMetaDataSampleEntry作为metadata的mime格式的信号。当您使用提取包含metadata跟踪的文件时,metadata的mime格式将作为的实例出现。

示例代码

示例演示了如何使用MediaRecorder和Camera API进行视频录制。

转载地址:http://pvxym.baihongyu.com/

你可能感兴趣的文章
爬虫——请求库之requests
查看>>
android子线程更新UI,与主Thread一起工作
查看>>
50行实现简易HTTP服务器
查看>>
细讲递归(recursion)
查看>>
进程和进程间通信
查看>>
微处理器的两种结构比较
查看>>
ORACLE EXPIRED(GRACE)
查看>>
Markdown应用样例
查看>>
多文本框的值得存放和赋值
查看>>
Linux中计划任务执行脚本crontab-简洁版
查看>>
Java - IO
查看>>
安卓app中嵌入一个H5页面,当手机系统设置字体变大时,如何使H5页面的字体不会随用户自己调整的系统字体变化而变化?...
查看>>
safari 收藏导出 手机safari 导出
查看>>
Dalvik 虚拟机 jvm 区别
查看>>
hexo从零开始
查看>>
币值转换
查看>>
RabbitMQ(六)远程连接
查看>>
得到ios设备的一些信息
查看>>
【教程】如何修改路由表?
查看>>
云计算与虚拟化之后:网络威胁成新挑战
查看>>