如何从 Linux 通过 Wifi 连接到索尼相机

Cyr*_*aze 10 linux wifi camera

索尼相机配备 Wifi 连接,但他们的软件仅适用于 Mac 和 Windows。(www.sony.net/pm/)

如何从 Linux 连接到它?(具体来说,Fedora 22 <--> DSC-HX60)

当我启用 Wifi 推送时,相机告诉我需要先通过 USB 添加设备信息。这似乎只能通过上述 PlayMemories 软件实现。

有没有人想出如何在 Linux 中做同样的事情?

具有讽刺意味的是,相机本身似乎在 BusyBox 上运行:/ http://oss.sony.net/Products/Linux/DI/DSC-HX60V.html

ps 我宁愿不使用 Wine 或 VM 来运行 Windows 软件。

小智 5

您可能想查看这个Playmemories Alternative项目。一位杰出的开发人员对索尼修改后的 PTP/IP 协议的专有部分进行了逆向工程,并设法使其与自定义 Python 脚本和GPhoto2的组合一起工作。

索尼传输图片的方式是通过 PTP/IP(基于 Internet 协议的图片传输协议)。从相机启用“发送到计算机”选项的那一刻,它开始通过网络将 UPNP UDP 数据包广播到多播地址 (239.255.255.250:1900)。这也称为简单服务发现协议 (SSDP)。同时,摄像机在端口 15740 上启动 PTP/IP 服务器。UPNP 数据包包含所有连接详细信息。Playmemories 应用程序(或 sony-pm-alt.py)看到这些数据包,然后转而访问 PTP/IP 服务器并传输图片。

索尼需要一些非标准数据包才能在相机上显示“正在发送...”。这也适用于完成后的自动关闭功能。如果没有这个,您有大约 2 分钟的时间在相机停止之前传输图片,并且您无法确认它是否有效。此外,相机将保持开启状态,因此您无法走开,否则您的电池将继续耗尽。我希望有一个魔法包可以打开这些选项,但事实似乎并非如此。执行一系列 tcpdumps 我能够确定哪些数据包使其工作。我开始需要 100 多个数据包,最后将其缩小到 23 个数据包(更新:开始 4 个数据包,结束 3 个数据包)。我还希望我可以使用与 gphoto 不同的 tcp 会话直接从 python 发送这些数据包,但没有运气。所以,我最终真的破解了 libgphoto 代码来完成这项工作。libgphoto 的开发人员当时非常友好地与我合作,并进行了更改,以使事情在没有黑客攻击的情况下正常工作。

我自己还没有测试过,但看起来@falk0069已经完成了自耕农的工作,为连接到支持索尼 wifi 的相机提供了一个起点。


小智 0

以下内容适用于索尼 A7,我猜其他索尼相机也类似,但不知道 DSC-HX60。

该相机有 2 种 Wifi 连接模式: (a) AP 模式(“连接到智能手机”),其中相机充当可以连接的 AP。只允许访问 JPG,而不是 raw。API 是专有但公开的 ( https://developer.sony.com/develop/cameras/ ) (b) 基础设施模式(“连接到计算机”),其中相机连接到 AP 并将任何文件推送到 AP 上的计算机本地网络。使用一些 MTP 风格(基于 PTP/IP)。

我假设你的意思是(b)。您可以尝试 gphoto2,它应该能够使用 PTP 连接(但是,在我尝试的 5 分钟内我无法让它工作)。如果您将 Linux 广泛定义为包括 Android,那么您可以使用raw2dng将原始文件复制到您的手机/平板电脑 - 它使用自己的 PTP/IP 堆栈(免责声明:我是作者)。

然而,对于 (b),无论如何,您都必须首先使用 USB 将相机与计算机“配对”。它是一种专有协议,仅在索尼的 Win/Mac 程序中实现。它所做的只是告诉相机保存计算机的 MAC 地址。在将来的连接中,主机将其 MAC 地址作为初始连接请求的一部分发送(不需要来自实际的网络接口)。

raw2dng 可以将“配对”MAC 地址作为输入,gphoto2 也可以(不确定 - 如果您想尝试,它是 16 字节 UID:8 * 0x00 + 2 * 0xFF + MAC)。因此,您可能可以将相机与您可能有权访问的另一台 Win/Mac 计算机配对,然后使用该计算机的 MAC 地址从您的 Linux 盒子进行连接...(未经测试)