恢复 USB 相机连接、边拍边传、三品牌驱动与 SwiftUI 历史导入页,通过适配层对接现有本地上传与 OSS 管道。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.3 KiB
2.3 KiB
CameraOTG
模块职责
提供 USB OTG 相机有线连接能力,支持 Sony / Canon / Nikon 三品牌:
- USB 设备发现、授权、Session 管理与设备缓存重连
- 边拍边传(Sony PTP、Canon EOS GetEvent、Nikon catalog 轮询)
- 相机历史照片枚举与下载(供旅拍相册历史导入页使用)
不包含 OSS 上传与后端 API;上传由 Features/TravelAlbum 的 WiredCameraTransferPipeline 负责。
核心类型
| 类型 | 职责 |
|---|---|
ConnectionManager |
单例,ImageCaptureCore 设备发现与会话编排 |
ConnectionState |
连接状态机 |
CameraDriver |
品牌无关的枚举/下载协议 |
CameraFactory / PlatformDetector |
品牌识别与 Driver 创建 |
OTGPhotoSink |
照片落盘协议,由旅拍模块实现 |
OTGPhotoFileWriter |
scoped 本地文件写入 |
品牌实现
| 品牌 | 边拍边传 | 历史导入 |
|---|---|---|
| Sony | SonyRemoteCaptureService + SDIO PTP |
SonyCameraDriver(需 MTP 模式) |
| Canon | CanonRemoteCaptureService + EOS GetEvent |
CanonCameraDriver |
| Nikon | NikonCatalogLiveCaptureService + catalog 监听 |
NikonCameraDriver |
连接流程
- 有线传图页
start→ConnectionManager.configureLiveTransfer+start ICDeviceBrowser发现相机 → 申请 contents/control 授权 →requestOpenSessionPlatformDetector识别品牌 →CameraFactory.makeDriver- Sony 立即初始化 SDIO 远程会话;Canon/Nikon 边拍边传在 content catalog 就绪后启动
- 页面离开
detach:仅解绑 delegate,保留设备缓存;App 终止时disconnect
与旅拍相册集成
OTGLiveTransferCoordinator实现ConnectionManagerDelegate与TravelAlbumOTGPhotoSink- 边拍边传落盘 →
WiredCameraTransferPipeline.ingestDownloadedAsset→ OSS 上传(边拍边传模式) - 历史导入由
CameraHistoryImportView独立 Sheet 呈现
依赖
ImageCaptureCore(系统框架)PTPUtilities通用 PTP 容器编解码
注意事项
- Sony 历史导入需 MTP 模式;边拍边传使用 PC Remote 模式(见
SonyMTPHelpContent) - Canon 远程模式在 catalog 就绪后初始化,避免打断 SD 卡枚举
- 不使用 ExternalAccessory / MFi,仅 ImageCaptureCore