【问题标题】:Get the optimal video preview size for a high-speed video session获得高速视频会话的最佳视频预览大小
【发布时间】:2019-04-21 10:25:00
【问题描述】:

此问题针对的是高速视频会话,而不是普通视频会话。

目前在 Android Camera2 API 中,为了解决最佳预览尺寸,我使用目标视频输出尺寸作为参考,并通过使用返回的尺寸选择列表从中计算最佳预览尺寸:

// SurfaceTexture.class to get the preview sizes supported by the surface
StreamConfigurationMap.getOutputSizes(SurfaceTexture.class);

视频输出大小从以下返回的列表中选择: StreamConfigurationMap.getHighSpeedVideoSizes();

预览尺寸计算是通过从 SurfaceTexture.class 列表中选择尺寸来完成的,具有与视频输出尺寸相同的纵横比,并且在 1920x0180 尺寸约束(即最大预览)内大小由 camera2 API 保证。

话虽如此,当使用createHighSpeedRequestList 时,如果它发现传递给会话的任何表面都没有支持的高速尺寸的尺寸,则此方法将失败,这也适用于预览表面。请参阅以下来源: android.hardware.camera2.utils.SurfaceUtils.checkConstrainedHighSpeedSurfaces

问题是,为高速视频会话获取有效预览大小的最佳方法是什么?我不能依赖 SurfaceTexture.class 返回的选项列表,因为这些选项与高速会话无关。

我最好的猜测是我应该遍历所有这些,然后在 StreamConfigurationMap.getHighSpeedVideoSizes 返回的高速尺寸列表中找到一个,但我想知道是否有一个更可靠的方法,或者我可以看看的一个很好的例子。

【问题讨论】:

    标签: android video android-camera2 highspeed


    【解决方案1】:

    在您的情况下,无需调用 StreamConfigurationMap.getOutputSizes(SurfaceTexture.class)。您从 StreamConfigurationMap.getHighSpeedVideoSizes() 获得的列表中的任何大小都将满足前一个条件。请注意,如果您选择某些特定的 FPS,可能不支持后面列表中的某些尺寸。通常我们更喜欢最大的可用尺寸,但如果您的要求允许更小的尺寸,请选择它:这可能会显着降低电池消耗并提高设备响应能力。

    【讨论】:

    • 我的担心,请告诉我您的想法,是关于是否在依靠 getHighSpeedVideoSizes 作为源解决预览大小时,突然一个品牌发布了一款具有 4K 慢动作的新设备,这意味着预览大小为 4K。尽管我认为短期内不太可能发生,但将这一事实放在一边,在正常的非高速视频会话中,用较小的显示尺寸设备录制 4K 不是问题,因为预览是从 SurfaceTexture 解决的。类和这样的大小与视频输出无关,因此可以限制为 1920x1080。
    • 我对您的担忧表示同情,但我可以提出多种解决问题的方法如果,当引入 4K 高速视频时。首先,高速捕获的预览表面必须与记录器表面尺寸相同的限制,这个限制是人为的,可以为所有或自定义平台取消。其次,同一设备可以提供 4K 或更多屏幕。最后,他们可能会说 120 FPS 的捕获不再是“高速”,并且将遵循常规录制的规则。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多