相机 - 开始录制视频后预览更改

时间:2014-05-24 11:42:28

标签: android camera android-camera preview mediarecorder

我在横向模式下有自定义全屏相机。设备尺寸为1024 x 600。

支持的预览尺寸列表
宽x高
 176 x 144
 320 x 240
 352 x 288
 528 x 432
 640 x 480
 1024 x 576
 1024 x 768

支持的视频尺寸列表
      宽x高
         176 x 144
         320 x 240
         352 x 288
         640 x 480
         720 x 480
         1280 x 720

如果没有setPreviewSize,我的预览会从顶部和底部压缩而来 从左到右更长。

我的预览getOptimalPreviewSize返回1024 x 576大小, 近视频尺寸为1280 x 720

因此,在设置视频大小并开始录制视频后

  

mediaRecorder.setVideoSize(1280,720);

表面视图中的

更改(在本例中为缩放)。

我想知道,如何解决尺寸差异问题 在录制之前和之后总是看到相同的预览?

3 个答案:

答案 0 :(得分:1)

事实上,这是一个棘手的问题,因硬件而异。简而言之,某些硬件供应商有时无法实现这一目标。

硬件供应商决定如何处理原始相机传感器分辨率,请求的预览视图和视频捕获大小之间的大小和宽高比差异,以及后续处理(使用插值调整大小)以使预览适合屏幕分辨率。 / p>

通常,“处理”涉及:

  • 裁剪,意味着原始图像的某些部分 - 边距 - 被简单地丢弃。
  • 调整大小 - 意味着使用插值和平均算法生成不同大小的图像。宽高比可能会改变。

两者通常都被编程为在专用硬件或GPU上运行。片上系统(SoC)意味着除了CPU和GPU之外还有许多专用硬件供供应商(并且只有供应商)可以用于处理。


如果您的设备使用裁剪作为适合尺寸的方法,则预览和最终图像/视频边界将不匹配。除非您为此设备型号定制其他处理代码,否则您无能为力。

此外,并非所有预览尺寸都以与相机传感器相同的宽高比返回。这应该是显而易见的,因为预览大小本身具有宽高比的混合。

答案 1 :(得分:0)

我会坚持使用1280x720。如果你在不录制视频的情况下使用这个预览尺寸,我认为会有很大的性能提升。

让我解释一下:您在setPreviewSize()中选择的分辨率有两个效果:它定义SurfaceView或TextureView接收的图像的宽高比,并定义Camera中接收的数据缓冲区的大小。 PreviewCallback.onPreviewFrame()(如果使用setPreviewCallback())。此分辨率不会影响在曲面或纹理上渲染预览的时间,因为这些操作是在硬件中执行的。

答案 2 :(得分:-1)

我有类似的问题。阅读文档并确保我以正确的顺序调用所有录音机和摄像机方法来修复它。

https://developer.android.com/guide/topics/media/camera.html