最近在研究Media相关类,看到了MediaRecorder,通过搜索CSDN,看到MediaRecorder可以同时录音音频和视频,也可以单独录制音频或者视频。
音频需要指定音频的来源和编码格式,音频来源包括:
音频来源 | 说明 |
---|---|
MediaRecorder.AudioSource.DEFAULT(0) | 默认音频源 |
MediaRecorder.AudioSource.MIC(1) | 设定录音来源为主麦克风。 |
MediaRecorder.AudioSource.VOICE_UPLINK(2) | 上行声音,需要Manifest.permission.CAPTURE_AUDIO_OUTPUT权限,第三方应用无法申请 |
MediaRecorder.AudioSource.VOICE_DOWNLINK(3) | 下行声音,需要Manifest.permission.CAPTURE_AUDIO_OUTPUT权限,第三方应用无法申请 |
MediaRecorder.AudioSource.VOICE_CALL(4) | 设定录音来源为语音拨出的语音与对方说话的声音,需要Manifest.permission.CAPTURE_AUDIO_OUTPUT权限,第三方应用无法申请 |
MediaRecorder.AudioSource.CAMCORDER(5) | 设定录音来源于同方向的相机麦克风相同,若相机无内置相机或无法识别,则使用预设的麦克风 |
MediaRecorder.AudioSource.VOICE_RECOGNITION(6) | 语音识别 |
MediaRecorder.AudioSource.VOICE_COMMUNICATION(7) | 摄像头旁边的麦克风 |
MediaRecorder.AudioSource.REMOTE_SUBMIX(8) | 用于远程呈现的音频流的子混音的音频源,需要Manifest.permission.CAPTURE_AUDIO_OUTPUT权限,第三方应用无法申请 |
MediaRecorder.AudioSource.UNPROCESSED(9) | Microphone audio source tuned for unprocessed(raw) sound if available, behaves link DEFAULT otherwise. 麦克风音频源针对未处理(原始)声音进行了调谐(如果可用),否则行为为默认链接。 |
MediaRecorder.AudioSource.VOICE_PERFORMANCE(10) | Source for capturing audio meant to be processed in real time and played back for live performance(e.g baraoke). The capture path will minimize latency and coupling with playback path. 用于捕获音频的源,旨在实时处理并播放以进行现场表演(例如baraoke)。 捕获路径将最大限度地减少延迟并与播放路径耦合。 |
对于非系统级应用,只能录制麦克风和语音识别的声音。
音频编码格式包括:
音频编码格式 | 说明 |
---|---|
MediaRecorder.AudioEncoder.DEFAULT(1) | 默认 |
MediaRecorder.AudioEncoder.AMR_NB(1) | AMR(Narrowband) audio codec |
MediaRecorder.AudioEncoder.AMR_WB(2) | AMR(Wideband) audio codec |
MediaRecorder.AudioEncoder.AAC(3) | AAC Low Complexity(AAC-LC) audio codec |
MediaRecorder.AudioEncoder.HE_AAC(4) | High Efficiency AAC(HE-AAC) audio codec |
MediaRecorder.AudioEncoder.AAC_ELD(5) | Enhanced Low Delay AAC(AAC-ELD) audio codec |
MediaRecorder.AudioEncoder.VORBIS(6) | Ogg Vorbis audio codec |
MediaRecorder.AudioEncoder.OPUS(7) | Opus audio codec |
录制的视频需要指定视频的来源和编码格式,视频来源包括:
视频来源 | 说明 |
---|---|
MediaRecorder.VideoSource.DEFAULT(0) | 默认 |
MediaRecorder.VideoSource.CAMERA(1) | 摄像头 |
MediaRecorder.VideoSource.SURFACE(2) | surface,可以理解为屏幕 |
视频编码格式包括:
视频编码格式 | 说明 |
---|---|
MediaRecorder.VideoEncoder.DEFAULT(0) | 默认 |
MediaRecorder.VideoEncoder.H263(1) | H263 |
MediaRecorder.VideoEncoder.H264(2) | H264 |
MediaRecorder.VideoEncoder.MPEG_4_SP(3) | MPEG4 |
MediaRecorder.VideoEncoder.VP8(4) | VP8 |
MediaRecorder.VideoEncoder.HEVC(5) | HEVC |
MediaRecorder.VideoEncoder.VP9(6) | VP9 |
MediaRecorder.VideoEncoder.DOLBY_VISION(7) | 杜比 |
MediaRecorder.VideoEncoder.AVI(8) | AVI |
不管是录制音频还是录制视频,都需要设置输出格式,输出格式包括:
输出格式 | 说明 |
---|---|
MediaRecorder.OutputFormat.DEFAULT(0) | 默认 |
MediaRecorder.OutputFormat.THREE_GPP(1) | 3GPP |
MediaRecorder.OutputFormat.MPEG_4(2) | MPEG4 |
MediaRecorder.OutputFormat.AMR_NB(3) | AMR NB |
MediaRecorder.OutputFormat.AMR_WB(4) | AMR WB |
MediaRecorder.OutputFormat.AAC_ADIF(5) | AAC ADIF |
MediaRecorder.OutputFormat.AAC_ADTS(6) | AAC ADTS |
MediaRecorder.OutputFormat.OUTPUT_FORMAT_RTP_AVP(7) | RTP AVP |
MediaRecorder.OutputFormat.MPEG_2_TS(8) | MPEG2 |
MediaRecorder.OutputFormat.WEBM(9) | WEBM |
MediaRecorder.OutputFormat.HEIF(10) | HEIF |
MediaRecorder.OutputFormat.OGG(11) | OGG |
MediaRecorder主要方法如下:
方法 | 描述 |
---|---|
void prepar(): | 准备录制 |
void start(): | 开始录制 |
void stop(): | 停止录制 |
void reset(): | 重置 |
void release(): | 释放资源 |
void setAudioSource(int audio_source): | 设置音频记录的音频源 |
void setAudioEncoder(int audio_encoder): | 设置音频记录的编码格式 |
void setAudioChannels(int numChannels) | 设置录制的音频通道数 |
setAudioEncodingBitRate(int bitRate) | 设置录制的音频编码比特率 |
setAudioSamplingRate(int samplingRate) | 设置录制的音频采样率 |
void setVideoSource(int video_source): | 设置视频记录的音频源 |
void setVideoEncoder(int video_encoder): | 设置视频记录的编码格式 |
setCaptureRate(double fps) | 设置视频帧的捕获率 |
setVideoEncodingBitRate(int bitRate) | 设置录制的视频编码比特率 |
setVideoFrameRate(int rate) | 设置要捕获的视频帧速率 |
setVideoSize(int width, int height) | 设置要捕获的视频的宽度和高度 |
void setOutoutFormat(int output_format): | 设置记录的媒体文件的输出转换格式 |
void setOutputFile(String path): | 媒体文件输出路径 |
扩展知识:
AudioRecord和MediaRecorder两种都可以录制音频,MediaRecorder已实现大量的封装,操作起来更加简单,而AudioRecord使用起来更加灵活,能实现更多的功能。
1.AudioRecord(基于字节流录音)
优点:可以实现语音的实时处理,进行边录边播,对音频的实时处理。
缺点:输出的是PCM的语音数据,如果保存成音频文件是不能被播放器播放的。要用到AudioTrack这个去进行处理。
2.MediaRecorder(基于文件录音)
已集成了录音,编码,压缩等,支持少量的音频格式文件。
优点:封装度很高,操作简单
缺点:无法实现实时处理音频,输出的音频格式少。
功能实现:MediaRecorder(这里需要注意,无论录制还是播放都是一个耗时操作,需要在非主线程中去操作)
如果需要录制屏幕,需要申请权限,与MediaProjectionManager类结合使用更方便一些。