在这里给出自己的一个测试DEMO,里面注释很详细。简单的视频录制功能.
packagecom.demo;
importjava.io.IOException;
importandroid.app.Activity;
importandroid.content.pm.ActivityInfo;
importandroid.graphics.PixelFormat;
importandroid.media.MediaRecorder;
importandroid.os.Bundle;
importandroid.view.SurfaceHolder;
importandroid.view.SurfaceView;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.view.Window;
importandroid.view.WindowManager;
importandroid.widget.Button;
/**
*classname:TestBasicVideo<BR>
*classdescription:一个简单的录制视频例子<BR>
*PS:实现基本的录制保存文件<BR>
*
*@version1.002011/09/21
*@authorCODYY)peijiangping
*/
publicclassTestBasicVideoextendsActivityimplementsSurfaceHolder.Callback{
privateButtonstart;//开始录制按钮
privateButtonstop;//停止录制按钮
privateMediaRecordermediarecorder;//录制视频的类
privateSurfaceViewsurfaceview;//显示视频的控件
//用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看
//想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口
privateSurfaceHoldersurfaceHolder;
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置全屏
//设置横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//选择支持半透明模式,在有surfaceview的activity中使用。
getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.main);
init();
}
privatevoidinit(){
start=(Button)this.findViewById(R.id.start);
stop=(Button)this.findViewById(R.id.stop);
start.setOnClickListener(newTestVideoListener());
stop.setOnClickListener(newTestVideoListener());
surfaceview=(SurfaceView)this.findViewById(R.id.surfaceview);
SurfaceHolderholder=surfaceview.getHolder();//取得holder
holder.addCallback(this);//holder加入回调接口
//setType必须设置,要不出错.
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
classTestVideoListenerimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
if(v==start){
mediarecorder=newMediaRecorder();//创建mediarecorder对象
//设置录制视频源为Camera(相机)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4
mediarecorder
.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
//设置录制的视频编码h263h264
mediarecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
//设置视频录制的分辨率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setVideoSize(176,144);
//设置录制的视频帧率。必须放在设置编码和格式的后面,否则报错
mediarecorder.setVideoFrameRate(20);
mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
//设置视频文件输出的路径
mediarecorder.setOutputFile("/sdcard/love.3gp");
try{
//准备录制
mediarecorder.prepare();
//开始录制
mediarecorder.start();
}catch(IllegalStateExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
if(v==stop){
if(mediarecorder!=null){
//停止录制
mediarecorder.stop();
//释放资源
mediarecorder.release();
mediarecorder=null;
}
}
}
}
@Override
publicvoidsurfaceChanged(SurfaceHolderholder,intformat,intwidth,
intheight){
//将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder=holder;
}
@Override
publicvoidsurfaceCreated(SurfaceHolderholder){
//将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder=holder;
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolderholder){
//surfaceDestroyed的时候同时对象设置为null
surfaceview=null;
surfaceHolder=null;
mediarecorder=null;
}
}
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
<SurfaceView
android:id="@+id/surfaceview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="4"
android:gravity="center"
android:orientation="vertical" >
<Button
android:id="@+id/start"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Start" />
<Button
android:id="@+id/stop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Stop" />
</LinearLayout>
</LinearLayout>
AndroidManifest.xml
<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.demo"
android:versionCode="1"
android:versionName="1.0">
<uses-sdkandroid:minSdkVersion="8"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activityandroid:name=".TestBasicVideo">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permissionandroid:name="android.permission.CAMERA">
</uses-permission>
<uses-permissionandroid:name="android.permission.RECORD_AUDIO">
</uses-permission>
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE">
</uses-permission>
</manifest>