MediaRecorder类详解
手机一般都有麦克风和摄像头,而Android系统就可以利用这些硬件来录制音视频了。
为了增加对录制音视频的支持,Android系统提供了一个MediaRecorder的类。该类的使用也非常简单,下面让我们来了解一下这个类:
一、类结构:
java.lang.Object |
|
? |
android.media.MediaRecorder |
二、类概述:
用于录制音频和视频的一个类。
三、状态图:
说明:
与MediaPlayer类非常相似MediaRecorder也有它自己的状态图。下面是关于MediaRecorder的各个状态的介绍:
Initial:初始状态,当使用new()方法创建一个MediaRecorder对象或者调用了reset()方法时,该MediaRecorder对象处于Initial状态。在设定视频源或者音频源之后将转换为Initialized状态。另外,在除Released状态外的其它状态通过调用reset()方法都可以使MediaRecorder进入该状态。
Initialized:已初始化状态,可以通过在Initial状态调用setAudioSource()或setVideoSource()方法进入该状态。在这个状态可以通过setOutputFormat()方法设置输出格式,此时MediaRecorder转换为DataSourceConfigured状态。另外,通过reset()方法进入Initial状态。
DataSourceConfigured:数据源配置状态,这期间可以设定编码方式、输出文件、屏幕旋转、预览显示等等。可以在Initialized状态通过setOutputFormat()方法进入该状态。另外,可以通过reset()方法回到Initial状态,或者通过prepare()方法到达Prepared状态。
Prepared:就绪状态,在DataSourceConfigured状态通过prepare()方法进入该状态。在这个状态可以通过start()进入录制状态。另外,可以通过reset()方法回到Initialized状态。
Recording:录制状态,可以在Prepared状态通过调用start()方法进入该状态。另外,它可以通过stop()方法或reset()方法回到Initial状态。
Released:释放状态(官方文档给出的词叫做Idle state
空闲状态),可以通过在Initial状态调用release()方法来进入这个状态,这时将会释放所有和MediaRecorder对象绑定的资源。
Error:错误状态,当错误发生的时候进入这个状态,它可以通过reset()方法进入Initial状态。
提示:与MediaPlayer相似使用MediaRecorder录音录像时需要严格遵守状态图说明中的函数调用先后顺序,在不同的状态调用不同的函数,否则会出现异常。
下面一个实例描述了的创建过程:
MediaRecorder recorder=newMediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(PATH_NAME); recorder.prepare(); recorder.start(); // ... recorder.stop(); recorder.reset(); // recorder.release();// |
四、构造方法和公有方法
Public Constructors |
|
MediaRecorder() Default constructor. |
Public Methods |
|
final static int |
getAudioSourceMax() 获取音频源的最大值。 |
int |
getMaxAmplitude() 获取在前一次调用此方法之后录音中出现的最大振幅。 |
void |
prepare() 准备录制。 |
void |
release() 释放资源。 |
void |
reset() 将MediaRecorder设为空闲状态,即Initial状态。 |
void |
setAudioChannels(int numChannels) 设置录制的音频通道数。 |
void |
setAudioEncoder(int audio_encoder) 设置所录制的声音的编码格式。 |
void |
setAudioEncodingBitRate(int bitRate) 设置所录制的声音的编码位率。 |
void |
setAudioSamplingRate(int samplingRate) 设置所录制的声音的采样率。 |
void |
setAudioSource(int audio_source) 设置声音来源,一般传入 MediaRecorder. AudioSource.MIC参数指定录制来自麦克风的声音。 |
void |
setCamera(Camera c) 设置一个摄像头用于录制。 |
void |
setCaptureRate(double fps) 设置视频帧捕获率。 |
void |
setLocation(float latitude, float longitude) 设置并存储在输出文件中的地理数据(经度和纬度)。 |
void |
setMaxDuration(int max_duration_ms) 设置录制会话的最长持续时间(以ms为单位)。 |
void |
setMaxFileSize(long max_filesize_bytes) 设置录制文件的最大文件大小。 |
void |
setOnErrorListener(MediaRecorder.OnErrorListener l) 注册一个用于记录录制时出现的错误的监听器。 |
void |
setOnInfoListener(MediaRecorder.OnInfoListener listener) 注册一个用于记录录制时出现的信息事件。 |
void |
setOrientationHint(int degrees) 设置输出的视频播放的方向提示。 |
void |
setOutputFile(FileDescriptor fd) 设置录制的音频文件的保存位置。 |
void |
setOutputFile(String path) 设置录制的音频文件的保存位置。 |
void |
setOutputFormat(int output_format) 设置所录制的音视频文件的格式。 |
void |
setPreviewDisplay(Surface sv) 设置使用哪个SurfaceView来显示视频预览。 |
void |
setProfile(CamcorderProfile profile) 指定CamcorderProfile对象。 |
void |
setVideoEncoder(int video_encoder) 设置所录制视频的编码格式。 |
void |
setVideoEncodingBitRate(int bitRate) 设置所录制视频的编码位率。 |
void |
setVideoFrameRate(int rate) 设置录制视频的捕获帧速率。 |
void |
setVideoSize(int width, int height) 设置要拍摄的宽度和视频的高度。 |
void |
setVideoSource(int video_source) 设置用于录制的视频来源。 |
void |
start() 开始录制。 |
void |
stop() 停止录制。 |
五、应用实例
使用MediaRecorder录制音乐
使用MediaRecorder录制视频
Android开发之MediaRecorder类详解