翻译自
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进行视频录制。