Android - 预览在录制视频时调整大小

时间:2017-01-12 16:11:08

标签: android video camera android-camera android-mediarecorder

在我工作的应用中,我有一个区域,其中有视频录制预览来录制视频。我有以下代码来开始预览:

mCamera = Camera.open();
mCamera.setPreviewDisplay(mHolder);

Camera.Parameters parameters = mCamera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();

Camera.Size previewSize = previewSizes.get(0);

parameters.setPreviewSize(previewSize.width, previewSize.height);
parameters.setVideoStabilization(false);

mCamera.setParameters(parameters);
mCamera.startPreview();
mCamera.unlock();

对于我的MediaRecorder,我有以下设置代码:

if (mMediaRecorder == null) mMediaRecorder = new MediaRecorder();

mMediaRecorder.setCamera(mCamera);

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setVideoEncodingBitRate(3072 * 1000);
mMediaRecorder.setVideoFrameRate(60);
mMediaRecorder.setVideoSize(1280, 720);
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());

出于某种原因,在我开始录制视频后,预览会自行调整大小,显示为“放大”。我尝试了用户发布的一些解决方案,询问相同的问题,但这些解决方案无效。显然我需要将预览大小设置为16:9的宽高比,以使其正常工作。有谁知道任何解决方案?

1 个答案:

答案 0 :(得分:0)

无法保证所有设备都支持1280x720的视频录制。你应该迭代supported video recording sizes并选择一个你最喜欢的。您可以使用getPreferredPreviewSizeForVideo()作为特定设备推荐的视频录制大小。

您应该选择最适合您的方式,而不是选择getSupportedPreviewSizes()返回的第一个预览大小。在所有实际情况中,您可以预期在getSupportedVideoSizes()和getSupportedPreviewSizes()列表 1 中可以找到相同的大小。

您可以选择任何尺寸,不一定是16:9宽高比之一。在特殊罕见的情况下,如果在支持的视频和预览尺寸之间找不到令人满意的匹配,则应选择具有相同方面(即宽度/高度)比例的尺寸。例如。 1280x720和640x360。

请注意,视频预览查看(通常为SurfaceView)也应与您选择的预览尺寸具有相同的宽高比(但尺寸不同),例如:你可以选择预览1280x780并查看大小1180x720。否则,屏幕上的预览将会失真(太胖或太窄)。

书中的

1 ,在某些设备上,getSupportedVideoSizes()可能会返回 null 。然后,您应该使用getSupportedPreviewSizes()返回的列表。