0

在我的 Android 应用程序中,我想使用 16:9 分辨率进行相机预览和通过 WebRTC 调用传输想要使用 360p (640x360),因为它很常见,并且不需要高比特率来传输

我正在使用 Camera2 API。作为最佳实践,我首先确定了设备上支持的分辨率列表,以检查是否支持 360p。验证后,我继续创建 cameraCapturesession

但此检查在某些设备中失败 - Real Me 5 Pro、Redmi Note 7S、redmi note 7(所有运行的 android 版本> = 9)虽然它似乎是一种流行的分辨率,但 360p 在支持的分辨率列表中不可用这些设备

列表是通过 cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP).getOutputSizes(SurfaceTexture.class) 它也不适用于 getOutputSizes(ImageFormat.JPEG)

当我在没有验证支持的分辨率的情况下强制创建 640*360 的 cameraCaptureSession 时,它确实有效 - 它能够捕获 640x360 分辨率。看起来设备相机实际上支持它,但在从 cameraCharacteristics 获取的列表中不可用。

我假设我不能在不进行检查的情况下强制执行此分辨率 - 因为它可能在某些设备中不起作用并且会引发异常/崩溃我想通过选择最接近的 360p 匹配来添加回退 - 要么必须妥协 16:9 要么 1280x720必须选择 - 它需要更高的比特率来传输

我认为 360p 是一种标准分辨率 - 任何可能的原因为什么它没有被列为支持,但在强制时实际上有效?根据我对文档的理解,SCALER_STREAM_CONFIGURATION_MAP 应该返回硬件支持的详尽的分辨率列表我错过了什么吗?请提出解决方案或解决方法

4

1 回答 1

0

640x360 的 16:9 在现代移动相机上的使用并不多,因为它的分辨率太低了。720p 大约是人们想要录制视频的最低尺寸,因此可以反映在支持的尺寸上。

但是,保证支持 640x480 (4:3 VGA),因此如果您想获得 16:9,安全的做法是使用它并进行裁剪。

假设未列出的大小将起作用是非常冒险的-它可能会或可能会被拉伸,或者它可能会起作用,但如果您添加一些其他输出,它可能会翻倒。所有这些都将是特定于设备的,所以你不会提前知道,一些新设备可能会失败。所以我完全不推荐它。

于 2021-05-26T22:02:10.233 回答