翻译自MediaRecorder overviewhtml
Android多媒体框架支持捕获和编码各类常见的音频和视频格式。若是设备硬件支持,您可使用MediaRecorder api。java
本文档向您展现了如何使用MediaRecorder编写一个应用程序,该应用程序从设备麦克风捕获音频,保存音频并回放(使用MediaPlayer)。要录制视频,你须要使用设备的摄像头和MediaRecorder。这是在Camera指南中描述的。android
注意:Android模拟器没法录制音频。必定要在能够录制的真实设备上测试代码。git
为了可以录制,你的应用程序必须告诉用户它将访问设备的音频输入。你必须在应用程序的清单文件中包含这个权限标签:github
<uses-permission android:name="android.permission.RECORD_AUDIO" />
复制代码
RECORD_AUDIO
被认为是一个“危险的”权限,由于它可能会对用户的隐私构成威胁。从Android 6.0 (API level 23)开始,使用危险权限的应用程序必须在运行时请求用户批准。用户得到许可后,应用程序应记住并再也不询问。使用ActivityCompat.requestPermissions()实现此行为。api
用如下调用初始化MediaRecorder的新实例:bash
注意:大多数音频源(包括DEFAULT)会对音频信号进行处理。要录制原始音频选择UNPROCESSED。有些设备不支持未处理的输入。首先调用AudioManager.getProperty(AudioManager.PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED)以验证其可用性。若是不是,尝试使用VOICE_RECOGNITION替代,它不使用AGC或噪声抑制。即便不支持属性,也能够将未处理的信号用做音频源,但在这种状况下,没法保证信号是否会被未处理。app
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
复制代码
分别调用Start()和stop()来启动和中止记录器。框架
用完MediaRecorder实例后,经过调用release()尽快释放其资源。ide
注意:在运行Android 9 (API level 28)或更高的设备上,后台运行的应用程序没法访问麦克风。所以,您的应用程序应该只在前台或前台服务中包含MediaRecorder实例时录制音频。
从Android 8.0 (API级别26)开始,您可使用MediaMuxer录制多个同步音频和视频流。在早期的Android版本中,你一次只能录制一个音轨和/或一个视频轨。
使用addTrack()方法将多轨道混合在一块儿。
您还能够为每一个frame添加一个或多个metadata跟踪,并提供定制信息,但仅限于MP4容器。您的应用程序定义元数据的格式和内容。
metadata能够用于离线处理。例如,从陀螺传感器捕获的数据能够用来稳定视频。
当添加metadata跟踪时,跟踪的mime格式必须之前缀‘application/’
开始。编写metadata与编写视频或音频数据是同样的,只是数据不是来自MediaCodec。相反,应用程序将带有相关时间戳的ByteBuffer传递给writeSampleData()方法。时间戳必须与视频和音频轨道在同一时间基础上。
生成的MP4文件使用ISO BMFF规范12.3.3.2节中定义的TextMetaDataSampleEntry
做为metadata的mime格式的信号。当您使用MediaExtractor提取包含metadata跟踪的文件时,metadata的mime格式将做为MediaFormat的实例出现。
Android MediaRecorder示例演示了如何使用MediaRecorder和Camera API进行视频录制。