Android_音视频录制功能

import java.io.File;
import java.io.IOException;

import android.app.Activity;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";

    private SurfaceView surfaceView;

    private MediaRecorder mediaRecorder;

    private boolean recording;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mediaRecorder = new MediaRecorder();

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

        // 设置分辨率
        surfaceView.getHolder().setFixedSize(176, 144);

        // 设置surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前
        surfaceView.getHolder()
                .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        Button recordBtn = (Button) this.findViewById(R.id.record);
        Button stopBtn = (Button) this.findViewById(R.id.stop);

        ButtonClickListener listener = new ButtonClickListener();

        recordBtn.setOnClickListener(listener);
        stopBtn.setOnClickListener(listener);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mediaRecorder.release();
    }

    private final class ButtonClickListener implements OnClickListener {

        @Override
        public void onClick(View v) {

            try {
                switch (v.getId()) {

                case R.id.record:

                    if (!Environment.getExternalStorageState().equals(
                            Environment.MEDIA_MOUNTED)) {

                        Toast.makeText(MainActivity.this, R.string.sdcarderror,
                                Toast.LENGTH_LONG).show();

                        return;
                    }

                    File vedioFile = new File(Environment
                            .getExternalStorageDirectory(), System
                            .currentTimeMillis()
                            + ".3gp");

                    mediaRecorder.reset();

                    // 从麦克风采集音频
                    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

                    // 从照相机采集视频
                    mediaRecorder
                            .setVideoSource(MediaRecorder.VideoSource.CAMERA);

                    // 设置输出文件格式
                    mediaRecorder
                            .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

                    // 设置视频大小
                    mediaRecorder.setVideoSize(320, 240);

                    // 设置每秒采集3帧
                    mediaRecorder.setVideoFrameRate(3);

                    // 设置音频编码方式
                    mediaRecorder
                            .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

                    // 设置视频编码方式
                    mediaRecorder
                            .setVideoEncoder(MediaRecorder.VideoEncoder.H263);

                    mediaRecorder.setOutputFile(vedioFile.getAbsolutePath());

                    mediaRecorder.setPreviewDisplay(surfaceView.getHolder()
                            .getSurface());

                    // 预期准备
                    mediaRecorder.prepare();

                    // 开始刻录
                    mediaRecorder.start();

                    recording = true;

                    break;

                case R.id.stop:

                    if (recording) {
                        mediaRecorder.stop();
                        recording = false;
                    }

                    break;

                default:
                    break;
                }

            } catch (IOException e) {

                Toast.makeText(MainActivity.this, R.string.error,
                        Toast.LENGTH_LONG).show();

                Log.e(TAG, e.toString());
            }
        }
    }
}
posted @ 2012-06-27 00:24  雪中飞雁  阅读(125)  评论(0)    收藏  举报