在我的 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 应该返回硬件支持的详尽的分辨率列表我错过了什么吗?请提出解决方案或解决方法