问题出现在我的Nexus 6P
设备上。在完成所有动作以检测最佳预览,宽高比,视频大小等后,我最终得到以下信息:
SurfaceView dimens 2392x1440(全屏)
使用相机预览分辨率的宽高比重新测量后,根据计算方法,此值将更改为2560x1440或2392x1351。
相机预览尺寸:1920x1080
使用setPreviewSize()
在相机参数上设置:
params.setPreviewSize(mOptimalPreviewSizes.width, mOptimalPreviewSizes.height);
媒体录制器视频大小:1920x1080(由设置强制)
这是在媒体记录器上设置的:
mMediaRecorder.setVideoSize(mOptimalVideoSize.width, mOptimalVideoSize.height);
当我点击录制按钮时,相机预览会放大',即调整视频大小。如果我将视频大小设置更改为例如3840x2160,则预览工作正常,无需调整大小。
我的印象是,可以将视频大小分别设置为预览大小,所以我有点困惑,为什么我会看到这个,以及如何解决这个问题。
编辑:
例如,OpenCamera似乎能够将预览表面分辨率与视频分辨率分开。 https://sourceforge.net/p/opencamera/code/ci/master/tree/src/net/sourceforge/opencamera/
为了确保,我在video_recorder.prepare();
之前添加了一行来设置自定义视频尺寸(video_recorder.setVideoSize(640,480);
)。预览表面仍在2392x1351附近全屏测量,相机预览仍设置为1920x1080。我还对结果视频进行了双重检查,预期为640x480。不幸的是,我在代码中看不到任何可以表明如何实现的内容。
编辑2:
我也注意到这个'缩放''动作总是发生在特定的分辨率/值上。无论我是以1920x1080还是320x200进行录制,预览都会变焦并在录制开始前丢失大约一厘米的可用图像。结束视频具有与分辨率相关的预期裁剪。
答案 0 :(得分:0)
问题似乎与视频稳定有关。我认为这实际上是有道理的,因为稳定防抖通常需要裁剪,当预览分辨率已经明显低于表面大小时,它会使图片“跳跃”或“缩放”。删除视频稳定功能可以解决问题。