通过街景直接上传

2.1 版

背景

在早期版本的 API 中,符合 OSC 标准的相机会创建一个 Google 街景 iOS 和 Android 应用可连接的 Wi-Fi 接入点。该应用将引导 OSC 相机拍摄照片,并从相机下载拍摄的内容,然后发布到 Google 街景。为了加快内容的发布内容速度,我们引入了一个新的可选工作流,可让 OSC 相机将内容直接上传到街景服务器。这样就消除了将内容从相机传输到应用再从应用传输到街景服务器的漫长双重传输。此 API 是在 API 级别 2.1 中添加的,仅与 OSC 相机相关,这些相机既能提供 Wi-Fi 接入点,又能连接到可访问互联网的基础架构 Wi-Fi 接入点。

概览

新的上传工作流需要相机提供一种方式(例如,专用的实体按钮或现有按钮的组合),让用户能够在两种 Wi-Fi 模式之间切换:

  • 直接模式:在此模式下,相机可作为接入点,供移动设备用来连接到相机。在此模式下,移动设备可以控制相机来执行拍照等任务。移动设备还可以为相机提供 Wi-Fi 接入点凭据,然后相机可以使用该凭据切换到互联网模式
  • 互联网模式:在此模式下,相机会连接到可连接到互联网的 Wi-Fi 接入点。当相机之前处于直接模式时,它将使用应用提供给它的接入点标识符和密码。在此模式下,移动设备可以直接启动从相机到街景服务器的上传操作。他们还可以继续控制相机以执行拍照等任务。

在摄像头关闭并重新开启后,摄像头模式应保持不变。此外,强烈建议摄像头提供信号(例如灯光、声音或屏幕上的指示标志),告知用户当前 Wi-Fi 模式。

相机还应实现发现协议(请参阅发现),以便在相机处于互联网模式时处理通信。

互联网模式设置

  1. 用户开启摄像头。由于尚未设置互联网模式,因此它以直接模式启动。
  2. 移动设备会连接到相机的 Wi-Fi 网络。
  3. 应用会生成自签名证书。
  4. 应用向相机发送 switchWifi 命令,其中包含相机需要连接到的基础架构 Wi-Fi 接入点的 SSID、该接入点的密码以及相机稍后用于对应用进行身份验证的自签名证书
    • 请注意,相机应安全地存储 Wi-Fi 凭据和应用的自签名证书。
    • 建议相机存储多个 Wi-Fi 凭据,因为相机可能需要连接到不同基础架构的 Wi-Fi 接入点。对该相机的最低要求是存储最新的 Wi-Fi 凭据。
  5. 相机通过其自签名证书进行响应,应用稍后会使用该证书对相机进行身份验证。
  6. 用户现在可以直接通过摄像头(例如使用实体切换按钮)在直接模式互联网模式之间切换。

发现广告系列

OSC 相机发现是一项基于 Zeroconf 的协议。摄像头必须实现 IPv4 链路本地地址,并且必须符合 mDNS(多播 DNS)和 DNS-SD(基于 DNS 的服务发现)规范:

服务实例名称

对于服务实例名称的 <Service> 部分,OSC 相机应使用 _osc._tcp。对于服务实例名称的 <Domain> 部分,OSC 相机应使用 local.。请注意,local 后面有一个 .

TXT 记录

我们要求相机在 TXT 记录中发送以下键值对:txtverstyid

文本文件

若要允许未来更新 TXT 版本,请使用键值对 txtvers=1

ty

提供用户可读的相机名称,例如 ty=Google Street View Optimized Spherical Camera Model XYZ

id

提供相机的唯一 ID,例如 id=A unique id of the cameraid 的值必须与 /osc/info 输出中的 cameraId 相同。

通告

在摄像头启动或关闭时,摄像头必须执行 mDNS 规范中所述的通知步骤。应至少发送两次相应的通告,两次之间至少应间隔 1 秒。

初创公司

在摄像头启动时,它必须执行探测和公告步骤,如 mDNS 规范中所述。在这种情况下,应发送 SRV、PTR 和 TXT 记录。如果可能,建议将所有记录分组到一个 DNS 响应中。否则,建议按以下顺序排列:SRV、PTR、TXT 记录。

关停

摄像头关闭时,应尝试通过发送包含 TTL=0 的“再见数据包”来通知所有相关方(如 mDNS 文档的第 10.1 节中所述)。

自签名证书

应用和相机可以使用在互联网模式设置期间共享的自签名证书相互进行身份验证,并使用 SSL 双向身份验证构建一个安全通道来保护交换的数据。

互联网模式下,应用充当 SSL 服务器,相机充当客户端。相机会检查服务器的证书是否与应用的自签名证书一致,然后应用会检查客户端的证书是否与相机的证书一致。

互联网模式下,您可以使用任何支持双向身份验证的 SSL 库(例如 OpenSSL)在应用和相机之间建立 SSL 连接。

新上传流程

  1. 如果相机未处于互联网模式,用户会将其切换为互联网模式。 相机使用存储的凭据连接到基础架构 Wi-Fi。
  2. 移动设备还会连接到基础架构 Wi-Fi 并发现相机。
    • 这需要相机实现本地发现协议 mDNS/DNS-SD(请参阅发现)。
    • 对其实现方式没有特定要求(mDNSResponder 是一个很好的参考信息)。
    • 互联网模式设置期间,应用和相机都会生成并共享自签名证书。在互联网模式下,应用和相机均通过双向 SSL 身份验证相互进行身份验证。
    • 发现相机后,可基于 HTTP 1.1 直接通过本地网络与相机进行客户端通信。数据格式基于 JSON。请求可以是 GET 或 POST 请求。
  3. 应用使用 listFiles 命令向相机查询文件列表。
  4. 应用使用 uploadFile 命令启动上传,将图片或视频直接从相机上传到街景服务器。
  5. 该应用使用 status 命令定期轮询相机,以查看上传进度。