android mediarecorder自制录相机花屏问题

今天在写使用mediarecorder进行录像时,遇到了花屏的问题,在魅族上面一切正常,但是在小米上面,就会出现花屏的现象。针对这个问题,我也在网上,好好搜了一把,在这里我主要是参考了:http://blog.csdn.net/top_along/article/details/16368379的文章,你们也可以看看。

这是一段初始化相机的代码:

    private void initCamera() throws IOException {
        if (mCamera != null) {
            freeCameraResource();
        }
        try {
            mCamera = Camera.open();
        } catch (Exception e) {
            e.printStackTrace();
            freeCameraResource();
        }
        if (mCamera == null)
            return;
        // setCameraParams();
        parameters = mCamera.getParameters();
        parameters.setJpegThumbnailQuality(100);// 设置质量
        // parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);//闪光灯
        parameters
                .setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);// 1连续对焦
        mCamera.setParameters(parameters);
        //将捕获的画面旋转多少度显示:由于摄像头默认捕获的画面byte[]是根据横向来的,而应用是竖向的,所以需要旋转90度
        mCamera.setDisplayOrientation(90);
        mCamera.setPreviewDisplay(mSurfaceHolder);
        //注:避免花屏第一步:开启预览,就不用解锁摄像头啦
        //开启预览
        mCamera.startPreview();
//        mCamera.unlock();//解锁摄像头
        mCamera.cancelAutoFocus();// 2如果要实现连续的自动对焦,这一句必须加上
    }
这是一段初始化MediaRecord的代码:

    private void initRecord() throws IOException {
        mMediaRecorder = new MediaRecorder();
        mMediaRecorder.reset();
        // 取消摄像头预览,解锁并将摄像头指向MediaRecorder
        if (mCamera != null) {
            //注:避免花屏第二步:真正拍摄时,解锁摄像头时,关闭预览
            mCamera.stopPreview();
            mCamera.unlock();
            mMediaRecorder.setCamera(mCamera);
        }
        mMediaRecorder.setOnErrorListener(this);
        mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
        // 指定源
        mMediaRecorder.setVideoSource(VideoSource.CAMERA);// 视频源
        mMediaRecorder.setAudioSource(AudioSource.MIC);// 音频源
        mMediaRecorder.setOutputFormat(OutputFormat.MPEG_4);// 视频输出格式
        mMediaRecorder.setVideoEncoder(VideoEncoder.MPEG_4_SP);// 视频录制格式
        mMediaRecorder.setAudioEncoder(AudioEncoder.AMR_NB);// 音频格式
        mMediaRecorder.setVideoSize(mWidth, mHeight);// 设置分辨率:
        mMediaRecorder.setVideoFrameRate(16);// // 视频帧频率
        mMediaRecorder.setVideoEncodingBitRate(1 * 1280 * 720);// 设置帧频率,然后就清晰了
        mMediaRecorder.setOrientationHint(90);// 输出旋转90度,保持竖屏录制
        // mediaRecorder.setMaxDuration(Constant.MAXVEDIOTIME * 1000);
//        mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
        mMediaRecorder.setOutputFile(mRecordFile.getAbsolutePath());//指定输出文件
        mMediaRecorder.prepare();
        try {
            mMediaRecorder.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

其实自制摄像机的核心代码也就这么多,其实花屏的解决方案:在预览的时候,开启预览,不解锁相机,在拍摄的时候,关闭预览,解锁相机。


项目链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值