解決華爲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();
        }
    }
}



發佈了42 篇原創文章 · 獲贊 26 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章