//解决办法直接写在注释里了
//我只试过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();
}
}
}