小程序硬件近场 1 对多传输方案

链路架构图 · 流程对比 · 独家能力说明

一、完整链路图:相机 → A → B/C/D

📷
相机
① 蓝牙发现
② 相机 WiFi
🙋
机主 A
③ 微信群/二维码
👥
B / C / D
④ 直连相机下载原图(不经过 A)

二、完整交互时序图(Mermaid)

sequenceDiagram participant 相机 as 📷 相机 participant A as 🙋 机主A
(小程序) participant 云 as ☁️ 服务端 participant BCD as 👥 B/C/D
(接收方) Note over 相机,A: 阶段1:A 连接相机 + 选图 相机->>A: ① 蓝牙广播(发现设备) A->>相机: 蓝牙握手,交换连接凭证 相机->>A: ② 相机 WiFi 连接就绪 A->>相机: 切换相机 WiFi(局域网) 相机->>A: 返回照片列表/缩略图 Note over A: A 勾选目标照片 Note over A,云: 阶段2:上传索引 + 生成临时相册 A->>云: ③ 蜂窝数据上传照片索引 云->>A: 返回临时相册凭证(Token) A->>BCD: ④ 微信群卡片 / 二维码(含凭证) Note over BCD,相机: 阶段3:BCD 直连相机下载(并行) BCD->>相机: ⑤ 蓝牙发现相机(~0.8s) BCD->>相机: ⑥ 自动切换相机 WiFi(~0.8s) BCD->>云: 携带凭证请求临时相册 云->>BCD: 返回 A 选中的照片索引 BCD->>相机: ⑦ 直接下载原图(不经过A) 相机->>BCD: 原图文件流 Note over BCD: 保存到本地相册 ✅ Note over A: 全程无感知,不参与原图传输 ✅

三、流程对比:现有方案 vs 本方案

-70%
A 端手动
操作步骤
-60%
BCD 每人
操作步骤
-85%
整体流程
耗时(3人场景)
并行
B/C/D 同时
下载,互不等待
现有方案 约 5 步 · 15~25 次操作
flowchart TD S([用户想分享照片]) --> A1 A1["① A 手动连接相机 WiFi"] --> A2 A2["② A 下载全部照片到手机\n⚠️ 占用大量手机内存"] --> A3 A3["③ A 在微信逐一发送原图\n⚠️ 耗费大量移动流量\n⚠️ 微信缓存急剧增大"] --> A4 A4{{"BCD 收到通知"}} A4 --> W1 A4 --> W2 W1["BCD 全程被动等待\n⏳ 只能等 A 操作完"] --> B1 W2["⚠️ 未及时点下载原图\n只保留压缩图\n画质损失,无法找回"] --> B1 B1["BCD 逐张点击下载原图"] --> E1([完成]) style S fill:#ffebee,stroke:#e57373,color:#c62828 style E1 fill:#ffebee,stroke:#e57373,color:#c62828 style A1 fill:#fff,stroke:#ef9a9a style A2 fill:#fff3e0,stroke:#ffb74d,color:#bf360c style A3 fill:#fff3e0,stroke:#ffb74d,color:#bf360c style A4 fill:#fce4ec,stroke:#f48fb1,color:#880e4f style W1 fill:#fff,stroke:#ef9a9a,color:#c62828 style W2 fill:#fff8e1,stroke:#ffe082,color:#e65100 style B1 fill:#fff,stroke:#ef9a9a
本方案 约 3+2 步 · 4~6 次操作
flowchart TD S([用户想分享照片]) --> B1 B1["① A 打开小程序\n蓝牙自动发现相机"] --> B2 B2["② A 勾选照片\n一键生成临时相册"] --> B3 B3["③ A 一键发微信群\nA 后续无任何操作 ✅"] --> P P{{"📲 BCD 点群卡片/扫码"}} P --> C1 C1["后台自动连接相机WiFi\n~2s,用户无感知"] --> C2 C2["BCD 各自勾选照片\n直接从相机下载原图"] --> E2([保存完成 ✅]) C2 -.->|真并行| PAR["B / C / D\n同时下载,互不等待"] style S fill:#e8f5e9,stroke:#a5d6a7,color:#1b5e20 style E2 fill:#e8f5e9,stroke:#a5d6a7,color:#1b5e20 style P fill:#e3f2fd,stroke:#90caf9,color:#0d47a1 style PAR fill:#f3e5f5,stroke:#ce93d8,color:#4a148c style B1 fill:#fff,stroke:#a5d6a7 style B2 fill:#fff,stroke:#a5d6a7 style B3 fill:#fff,stroke:#a5d6a7 style C1 fill:#fff,stroke:#a5d6a7 style C2 fill:#fff,stroke:#a5d6a7