ios - 如何通过远程相机 API 在 a7iii/a7riii/a9 上获得对焦模式
问题描述
问题
索尼 a7iii/a7riii 和 a9 都存在通过远程相机 API 进行自动对焦拍摄的问题。显然有一个解决方法(因为它似乎与 PlayMemories 应用程序配合得很好),我试图在我制作的应用程序中重现它,但它似乎并不完全完美,并且在反复拍摄时会导致问题就像一个游戏中时光倒流。
问题是,在 AF/w 快门打开的情况下(不要问为什么不是相反),相机偶尔会在actTakePicture
40400 上出错。
解决方法尝试
我尝试的解决方法如下:
- 检查型号以及是否为 a7iii/a7riii/a9(以及其他几个)
- 检查焦点状态,如果没有聚焦(或为零)
- 检查对焦模式以及 AF 还是 nil(这是问题!)
- 半按快门
- 等待focusState更改为focused
问题是,a7iii 等似乎没有通过事件报告他们的焦点模式,或者getFocusMode
即使它在他们支持的函数中列出,也没有响应 API 请求。这意味着代替上面的第 5 步,我必须:
- 半按响应后立即执行
actTakePicture
,因为如果相机处于 MF 状态,则对焦状态不会改变。 - 如果此操作失败并显示 40400(拍摄失败),请忽略该错误,因为它可能是我们处于 AF 中。
这一切在理论上都有效:
自动对焦
用户按下快门 → 调用 halfPressShutter → 调用 actTakePicture → 如果成功,则完成,如果失败 → 等待远离“聚焦”事件 → 调用 actTakePicture
手动对焦
用户按下快门 → 调用 halfPressShutter → 调用 actTakePicture → 应该成功
问题的下一部分
问题的下一部分是,如果用户在 MF 中,相机仍然会经常出现 40400 故障,这会触发“自动对焦”下的流程,但是因为我们在 MF 中,所以我们没有得到任何从相机事件中改变焦点。出于这个原因,我可以检查相机是否处于 MF 或 AF 并简单地跳过 MF 非常重要,halfPressShutter
否则我的代码会卡住等待focusState
更改。
调用getFocusMode
a7iii 似乎返回 40401(相机未就绪)并且在响应中可用getMethodTypes
,但似乎从未可用或通过getEvent
. 如果有人设法使它可用,或者想出如何通过令人难以置信的事件发送它!
解决方案
推荐阅读
- bash - 用 tr 或类似的交换 bash 中的两个字符
- python - 使用 GroupBy 并使用 Jinja2 将 Pandas Dataframe 渲染为单独的 HTML 文件
- c# - С# LINQ IQueryable Take
- c - OpenGL的工作组大小和本地大小有什么区别?
- r - 基于R中时间序列的平均值删除变量
- spring-boot - Spring Boot REST服务Kafka主题commitSync失败
- sas - 吐出打开的程序中使用的数据源和库
- haskell - 使用 floskell 格式化时,有没有办法不对齐我的代码?
- tableau-api - 使用列的 Tableau 筛选器
- javascript - 如何在第一张幻灯片上使用简单的密码保护网站