Android开发之MediaRecorder类详解

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();  //
Recording is now started

...

recorder.stop();

recorder.reset();  //
You can reuse the object by going back to setAudioSource() step

recorder.release();//
Now the object cannot be reused

四、构造方法和公有方法



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类详解

时间: 2024-10-08 02:30:29

Android开发之MediaRecorder类详解的相关文章

Android开发之Html类详解

在进行Android开发中经常回忽略Html类.这个类其实很简单,就是将HTML标签文本解析成普通的样式文本.下面就让我么看一下这个类的具体介绍. 类结构: java.lang.Object    ? android.text.Html 类概述: 这个类用于处理的HTML字符串并将其转换成可显示的样式文本.但并不是所有的HTML标记的支持. 公有方法: 说其简单是应为它就有四个方法: Public Methods static String escapeHtml(CharSequence tex

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

Android开发之SoundPool使用详解

使用SoundPool播放音效 如果应用程序经常播放密集.急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了.因为MediaPlayer存在如下缺点: 1)         延时时间较长,且资源占用率高. 2)         不支持多个音频同时播放. Android中除了MediaPlayer播放音频之外还提供了SoundPool来播放音效,SoundPool使用音效池的概念来管理多个短促的音效,例如它可以开始就加载20个音效,以后在程序中按音效的ID进行播放.

Android开发之EditText属性详解

1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以"."形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码. editText.setTransformationMethod(PasswordTransformationMethod.getInstance());//设

【转】 Android开发之EditText属性详解

原文网址:http://blog.csdn.net/qq435757399/article/details/7947862 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码. editText.setTransformationMe

Android开发之Service服务详解

服务,作为Android四大组件之一,必然是重点.我们今天就来讲解一下有关服务的生命周期.两种开启方式以及相关用法. 服务有两种开启方式,一种是正常开启, 一种是以绑定的方式开启,当然,这两种方式可以组成混合开启. 一.服务的正常开启 正常开启服务的方法非常简单,我们先看如何定义一个服务 1.编写一个类,继承Service类. 我们先不管代码中的binder类.那个后续讲解用. public class TestService extends Service { @Override public

android开发之PreferenceScreen使用详解

是在惭愧,学习android也有一段时间了,今天才是第一次接触PreferenceScreen.记录下来,与大家分享. 本文参考:http://lovezhou.iteye.com/blog/1020361 PreferenceScreen使用步骤: 1.先在res文件夹中新建一个xml文件夹,用来存放preferences.xml文件 preferences.xml <?xml version="1.0" encoding="utf-8"?> <

android开发之Parcelable使用详解

想要在两个activity之间传递对象,那么这个对象必须序列化,android中序列化一个对象有两种方式,一种是实现Serializable接口,这个非常简单,只需要声明一下就可以了,不痛不痒.但是android中还有一种特有的序列化方法,那就是实现Parcelable接口,使用这种方式来序列化的效率要高于实现Serializable接口.不过Serializable接口实在是太方便了,因此在某些情况下实现这个接口还是非常不错的选择. 使用Parcelable步骤: 1.实现Parcelable

android开发之onCreate( )方法详解

onCreate( )方法是android应用程序中最常见的方法之一,那么,我们在使用onCreate()方法的时候应该注意哪些问题呢? 先看看Google Android Developers官网上的解释: onCreate(Bundle) is where you initialize your activity. Most importantly, here you will usually call setContentView(int) with a layout resource d