解决华为M2 平板前置摄像头录制视频黑屏


//解决办法直接写在注释里了
//我只试过4.4  5.0  6.0三种机型
关于黑屏的分析请看:http://blog.csdn.net/afei__/article/details/51540188
private void startPreView(SurfaceHolder holder) {
    if (mCamera == null) {
        mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);//默认打开前置
    }
    if (mCamera != null) {
        mCamera.setDisplayOrientation(or);
        try {
            List<Camera.Size> previewSizes = mCamera.getParameters().getSupportedPreviewSizes();
            for (int i = 0; i < previewSizes.size(); i++) {
                Camera.Size psize = previewSizes.get(i);
		//把可以设置的尺寸打印出来
                LogUtils.e("BG" + "initCamera", "PreviewSize,width: " + psize.width + " height: " + psize.height);
            }
            mCamera.setPreviewDisplay(holder);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
		//华为M2(6.0)不能设置Parameters
                profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
            } else {
		//华为4.4及其他5.0手机需要设置parameters,不然在SurfaceView上只有第一帧后面不动了
                mParameters = mCamera.getParameters();
                List<Camera.Size> mSupportedPreviewSizes = mParameters.getSupportedPreviewSizes();
                List<Camera.Size> mSupportedVideoSizes = mParameters.getSupportedVideoSizes();
                Camera.Size optimalSize = CameraHelper.getOptimalVideoSize(mSupportedVideoSizes,
                        mSupportedPreviewSizes, mSurfaceView.getWidth(), mSurfaceView.getHeight());
                
                previewWidth = optimalSize.width / 2;
                previewHeight = optimalSize.height;
                mParameters.setPreviewSize(previewWidth, previewHeight);
                profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
                // 这里是重点,分辨率和比特率
                // 分辨率越大视频大小越大,比特率越大视频越清晰
                // 清晰度由比特率决定,视频尺寸和像素量由分辨率决定
                // 比特率越高越清晰(前提是分辨率保持不变),分辨率越大视频尺寸越大。
                profile.videoFrameWidth = optimalSize.width;
                profile.videoFrameHeight = optimalSize.height;
                // 这样设置 1080p的视频 大小在5M , 可根据自己需求调节
                profile.videoBitRate = 2 * optimalSize.width * optimalSize.height;
                List<String> focusModes = mParameters.getSupportedFocusModes();
                if (focusModes != null) {
                    for (String mode : focusModes) {
                        mode.contains("continuous-video");
                    }
                }
                mCamera.setParameters(mParameters);
            }




            mCamera.startPreview();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}



发布了43 篇原创文章 · 获赞 27 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_30878303/article/details/78352757