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

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

索尼相机配备 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 软件。

答案1

你可能想看看这个欢乐回忆另类项目。一位杰出的开发人员对索尼修改后的 PTP/IP 协议的专有部分进行了逆向工程,并设法使其与自定义 Python 脚本和G照片2

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

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

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

答案2

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

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

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

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

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

相关内容