【发布时间】:2018-08-29 18:19:14
【问题描述】:
在我们的移动应用程序中,Android 设备上的摄像头捕获作为视频流发送到远程服务器。
我需要自动调整我的相机 fps 以适应网络速度。基本上,如果我检测到网络很慢,我需要降低 fps 并不断降低,直到达到平衡。
我使用 Camera2 API 上的 CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 字段获取可用的 fps 范围。我使用CONTROL_AE_TARGET_FPS_RANGE 字段设置目标fps。
假设可能的范围列表是 (30, 30) 和 (15, 30)。
我首先将目标设置为最高 fps(在我们的例子中为 (30, 30))。一旦我检测到网络很慢,我将 fps 范围减小到 (15, 30)。但是,我注意到该设备继续产生大约 29 fps 的速度。
作为一个实验,我强制目标 fps 值为 (15, 15)。这似乎成功了。系统开始生成 15 fps,这是我预期的值。
但是,这让我想知道CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 和CONTROL_AE_TARGET_FPS_RANGE 之间的关系到底是什么。我的印象是目标
在相机上设置的范围必须是从CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES 接收的值之一。在我的情况下,这将是 (30, 30) 或 (15, 30)。但是,如果 (15, 15) 也被接受为有效的目标 fps,我想知道是否可以在有效范围内指定任何范围。例如,我想将 fps 设置为 (29, 29)、(28, 28) 等,直到达到平衡。这是否允许?
【问题讨论】: