摄像头开启后视频的录制与预览

1,打开摄像头

/**
     * 打开摄像头
     * @param fore
     * @return
     */
    public synchronized boolean openCamera(boolean fore) {
        try {

            if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.FROYO || ("gt-i9003").equals(Build.MODEL.replaceAll(" ", "").toLowerCase())) {
                showToast("ninisha");

                return false;
            }
            Camera.CameraInfo cameraInfo = new Camera.CameraInfo();

            int count = Camera.getNumberOfCameras();

            if (count <= 0) {
                showToast("woshishui");
                return false;
            }

            int index = -1;

            if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
                index = 1;
            } else if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
                index = 0;
            }
            // �������ͷ��״̬���رպ��л�
            if (camera != null) {
                closeCamera();
            }
            camera = Camera.open(index);

            if (camera == null) {

                return false;
            }
            adjustPreviewSize();
            camera.setPreviewDisplay(surfaceView.getHolder());
            camera.startPreview();
        } catch (Exception e) {
            showToast("exception");
            e.printStackTrace();
            return false;
        }
        return true;
    }

2,开始录制

/**
     * 开始录制
     * @return
     */
    public boolean startRecordCamera() {
        if (mediaRecorder == null) {
            mediaRecorder = new MediaRecorder();
        }
        try {
            camera.stopPreview();
            camera.unlock();
            mediaRecorder.setCamera(camera);
            mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
//            mediaRecorder.setVideoEncodingBitRate(480000);
            mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

//            mediaRecorder.setVideoFrameRate(25);
            mediaRecorder.setVideoSize(640, 480);

            File f = new File(rootPath);
            if (!f.isDirectory()) {
                if (f.exists()) {
                    f.delete();
                }
                f.mkdirs();
            }
            f = new File(recordPath);
            if (f.exists()) {
                f.delete();
            }
            f.createNewFile();

            mediaRecorder.setOutputFile(f.getAbsolutePath());
            mediaRecorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
            mediaRecorder.prepare();
            mediaRecorder.start();
            isRecording = true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

3,视频录制结束

/**
     * 视频录制结束
     */
    protected void stopRecrod() {
        if (isRecording) {
            if (camera != null) {
                camera.lock();
            }
            if (mediaRecorder != null) {
                mediaRecorder.stop();
                mediaRecorder.release();
                mediaRecorder = null;
            }
        }
    }

4,视屏预览

 MediaPlayer mediaPlayer;
    private void preView() {
        if (mediaPlayer == null ) {
            mediaPlayer = new MediaPlayer();

        } else {
            mediaPlayer.reset();
        }

        try {
            mediaPlayer.setDataSource(recordPath);
        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                 mediaPlayer.start();

            }
        });

        mediaPlayer.setDisplay(surface2.getHolder());
        mediaPlayer.prepareAsync();
        //mediaPlayer.start();
    }

细节处理:点击事件

 @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.open:
            if (openCamera(false)) {
                isOpenCamera = true;
            } else {
                isOpenCamera = false;
            }
            break;
        case R.id.record:
            if (isOpenCamera) {
                startRecordCamera();
                Log.e("xyz", "打开录制");
            }
            break;
        case R.id.stop:
            stopRecrod();
            Log.e("xyz", "结束录制");
            Log.e("xyz", "recordPath"+recordPath);
            break;

        case R.id.preview://预览
             File file = new File(recordPath);
             if (file.exists()) {
                if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                    if (mediaPlayer != null) {
                        mediaPlayer.stop();
                        mediaPlayer.release();
                        mediaPlayer =null;
                    }
                } else{
                    preView();

                }
            } else {
                Toast.makeText(this, "file isnot exist ,record failed", Toast.LENGTH_LONG).show();
            }
            break;
        default:
            break;
        }
    }

demo下载地址:http://download.csdn.net/detail/qq_20967339/9599266

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值