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

Posted

技术标签:

【中文标题】Android - 录制视频时预览调整大小【英文标题】:Android - Preview resizes when recording video 【发布时间】:2017-05-27 20:11:01 【问题描述】:

在我正在开发的应用程序中,我有一个区域可以进行视频录制预览以录制视频。我有以下代码来开始预览:

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】:

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

与其选择 getSupportedPreviewSizes() 返回的第一个预览尺寸,不如选择最适合您的尺寸。在所有实际情况下,您都可以在 getSupportedVideoSizes() 和 getSupportedPreviewSizes() 列表中找到相同的大小1

您可以选择任何尺寸,不一定是 16:9 纵横比之一。在极少数情况下,当您无法在支持的视频和预览尺寸之间找到令人满意的匹配时,您应该选择具有相同纵横比(即宽度/高度)比率的尺寸。例如。 1280x720 和 640x360。

请注意,视频预览 View(通常是 SurfaceView)也应与您选择的预览尺寸具有相同的纵横比(但大小不同),例如您可以选择 1280x780 的预览和 1180x720 的视图大小。否则,屏幕上的预览会失真(太宽或太窄)。

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

【讨论】:

以上是关于Android - 录制视频时预览调整大小的主要内容,如果未能解决你的问题,请参考以下文章

使用与生成的视频文件不同的预览大小录制视频

Android视频录制从不入门到入门系列教程————Camera Parameter

录制的视频主题音量能减吗

Android CameraX实现摄像头预览拍照录制视频

Android 使用CameraX实现预览/拍照/录制视频/图片分析/对焦/缩放/切换摄像头等操作

Android 微信小视频录制功能实现