MediaRecorder
Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。
MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
以开源的Android为例MediaRecorder的代码主要在以下的目录中:
JAVA程序的路径:
packages/apps/Camera/src/com/android/camera/VideoCamera.java
JAVA framework的路径:
frameworks/base/media/java/android/media/MediaRecorder.java
JAVA本地调用部分(JNI):
frameworks/base/media/jni/android_media_MediaRecorder.cpp
这部分内容编译成为目标是libmedia_jni.so。
主要的头文件在以下的目录中:
frameworks/base/include/media/
多媒体底层库在以下的目录中:
frameworks/base/media/libmedia/
这部分的内容被编译成库libmedia.so。
多媒体服务部分:
frameworks/base/media/libmediaplayerservice/
MediaRecorder和MeidaPlayer使用相同的服务。
基于OpenCore部分
external/opencore/android/author
这部分内容被编译成库libopencoreauthor.so。
基本的录音功能实现:
好了,了解了大概的路径,具体的调用MediaRecorder的内容便可以深入各文件中去研究,接下来我们便直接来看例子,这个录音器的代码实现的说明都写在了注释中,非常简单:
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
public class MediaRecordActivity extends Activity {
MediaRecorder mediaRecorder ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mediaRecorder = new MediaRecorder();
record();
}
private void record(){
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
mediaRecorder.setOutputFile("file:///sdcard/myvido/a.3pg");
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这里,一定要注意一点,那就是如果我们想要录音的话,那么首先得添加录音权限到AndroidManiferst.xml中:



