首页 > 解决方案 > 如何通过远程相机 API 在 a7iii/a7riii/a9 上获得对焦模式

问题描述

问题

索尼 a7iii/a7riii 和 a9 都存在通过远程相机 API 进行自动对焦拍摄的问题。显然有一个解决方法(因为它似乎与 PlayMemories 应用程序配合得很好),我试图在我制作的应用程序中重现它,但它似乎并不完全完美,并且在反复拍摄时会导致问题就像一个游戏中时光倒流。

问题是,在 AF/w 快门打开的情况下(不要问为什么不是相反),相机偶尔会在actTakePicture40400 上出错。

解决方法尝试

我尝试的解决方法如下:

  1. 检查型号以及是否为 a7iii/a7riii/a9(以及其他几个)
  2. 检查焦点状态,如果没有聚焦(或为零)
  3. 检查对焦模式以及 AF 还是 nil(这是问题!)
  4. 半按快门
  5. 等待focusState更改为focused

问题是,a7iii 等似乎没有通过事件报告他们的焦点模式,或者getFocusMode即使它在他们支持的函数中列出,也没有响应 API 请求。这意味着代替上面的第 5 步,我必须:

  1. 半按响应后立即执行actTakePicture,因为如果相机处于 MF 状态,则对焦状态不会改变。
  2. 如果此操作失败并显示 40400(拍摄失败),请忽略该错误,因为它可能是我们处于 AF 中。

这一切在理论上都有效:

自动对焦

用户按下快门 → 调用 halfPressShutter → 调用 actTakePicture → 如果成功,则完成,如果失败 → 等待远离“聚焦”事件 → 调用 actTakePicture

手动对焦

用户按下快门 → 调用 halfPressShutter → 调用 actTakePicture → 应该成功

问题的下一部分

问题的下一部分是,如果用户在 MF 中,相机仍然会经常出现 40400 故障,这会触发“自动对焦”下的流程,但是因为我们在 MF 中,所以我们没有得到任何从相机事件中改变焦点。出于这个原因,我可以检查相机是否处于 MF 或 AF 并简单地跳过 MF 非常重要,halfPressShutter否则我的代码会卡住等待focusState更改。

调用getFocusModea7iii 似乎返回 40401(相机未就绪)并且在响应中可用getMethodTypes,但似乎从未可用或通过getEvent. 如果有人设法使它可用,或者想出如何通过令人难以置信的事件发送它!

标签: iossonysony-camera-api

解决方案


推荐阅读