`
java-mans
  • 浏览: 11437741 次
文章分类
社区版块
存档分类
最新评论

Android 中使用MediaRecorder进行录像详解(视频录制)

 
阅读更多

在这里给出自己的一个测试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>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics