当前位置:操作系统 > 安卓/Android >>

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

 

在这里给出自己的一个测试DEMO,里面注释很详细。简单的视频录制功能.

 

 

package com.video; 

 

import java.io.IOException; 

 

import android.app.Activity; 

import android.content.pm.ActivityInfo; 

import android.graphics.PixelFormat; 

import android.media.MediaRecorder; 

import android.os.Bundle; 

import android.view.SurfaceHolder; 

import android.view.SurfaceView; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.view.Window; 

import android.view.WindowManager; 

import android.widget.Button; 

 

/**

 * class name:TestBasicVideo<BR>

 * class description:一个简单的录制视频例子<BR>

 * PS:实现基本的录制保存文件<BR>

 * 

 * @version 1.00 2011/09/21

 * @author CODYY)peijiangping

 */ 

public class TestBasicVideo extends Activity implements SurfaceHolder.Callback { 

    private Button start;// 开始录制按钮 

    private Button stop;// 停止录制按钮 

    private MediaRecorder mediarecorder;// 录制视频的类 

    private SurfaceView surfaceview;// 显示视频的控件 

    // 用来显示视频的一个接口,我靠不用还不行,也就是说用mediarecorder录制视频还得给个界面看 

    // 想偷偷录视频的同学可以考虑别的办法。。嗯需要实现这个接口的Callback接口 

    private SurfaceHolder surfaceHolder; 

 

    public void onCreate(Bundle savedInstanceState) { 

        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(); 

    } 

 

    private void init() { 

        start = (Button) this.findViewById(R.id.start); 

        stop = (Button) this.findViewById(R.id.stop); 

        start.setOnClickListener(new TestVideoListener()); 

        stop.setOnClickListener(new TestVideoListener()); 

        surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview); 

        SurfaceHolder holder = surfaceview.getHolder();// 取得holder 

        holder.addCallback(this); // holder加入回调接口 

        // setType必须设置,要不出错. 

        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    } 

 

    class TestVideoListener implements OnClickListener { 

 

        @Override 

        public void onClick(View v) { 

            if (v == start) { 

                mediarecorder = new MediaRecorder();// 创建mediarecorder对象 

                // 设置录制视频源为Camera(相机) 

                mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 

                // 设置录制完成后视频的封装格式THREE_GPP为3gp.MPEG_4为mp4 

                mediarecorder 

                        .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 

                // 设置录制的视频编码h263 h264 

                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 (IllegalStateException e) { 

                    // TODO Auto-generated catch block 

               

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,