Files
DisplayFlow/README.md
2025-12-11 22:58:25 +08:00

151 lines
9.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 跨平台虚拟显示协作系统技术方案
## 1. 项目概述
本项目旨在构建一个高性能、高灵活性的虚拟显示协作系统。其核心目标是打破传统副屏方案在平台、角色和连接方式上的限制,实现任何设备、任何角色、任何网络下的无缝显示扩展与协作。
**核心愿景**:打造一个"显示即服务"的通用平台,让显示资源能够在设备间自由流动。
## 2. 核心设计理念与突出优势
本方案摒弃了"主机-客户端"的固化思维,采用全新的"角色-平台-连接"解耦设计,从而实现三大核心优势:
### 2.1 真正跨平台:同一套核心代码支持所有目标平台
- **核心共享库Platform-Agnostic Core**将所有业务逻辑协议、会话管理、编解码、网络抽象封装为100%跨平台的C++核心库。平台相关代码(显示渲染、输入捕获)被严格隔离为薄薄的适配层。
- **技术实现**使用CMake作为统一的构建系统通过条件编译链接不同的平台适配层。核心算法、数据结构和通信协议在所有平台间完全一致确保行为统一极大降低开发和维护成本。
- **受益**一次开发多平台部署。目前支持Android、Windows未来可快速扩展至Linux、macOS乃至嵌入式系统。
### 2.2 角色灵活:任何设备可动态充当任何角色
- **角色抽象Role Agnostic**:系统内置三种基础角色,设备可动态切换或同时兼任:
1. **主机Host**提供显示内容来源。示例Android平板共享屏幕。
2. **客户端Client**接收并显示内容。示例Windows电脑将平板屏幕作为副屏。
3. **对等端Peer**:同时作为主机和客户端,实现双向屏幕共享。示例:两个安卓设备互作副屏。
- **技术实现**通过RoleManager进行动态角色管理和切换。会话协议中携带角色信息使通信双方能正确理解数据流方向。
- **受益**:应用场景极大丰富,从简单的副屏扩展到复杂的多设备协作演示、双向画板等。
### 2.3 连接通用:支持局域网和互联网连接
- **网络抽象层Network Agnostic**:设计统一的网络接口,自动选择或同时管理多种连接方式。
- **局域网连接**(优先使用):
- **USB RNDIS**:优先使用,提供近似有线的高带宽、低延迟体验。
- **Wi-Fi 局域网**:提供无线便利性,支持一对多广播。
- **有线以太网**:为台式机等设备提供稳定连接。
- **互联网连接**(通过 NAT 穿透):
- **STUN**NAT 类型检测和公网 IP 发现,支持公网直连。
- **TURN**:中继服务器支持,当直连失败时自动切换。
- **ICE 协议**:自动选择最佳连接路径(局域网 > 公网直连 > TURN 中继)。
- **技术实现**NetworkManager负责探测可用连接根据性能延迟、带宽自动优选或负载均衡。集成 ICE 协议实现 NAT 穿透,支持局域网和互联网无缝切换。应用层无需关心底层连接方式。
- **受益**:用户无需手动配置网络,系统自动选择最佳路径。支持跨网络、跨地域的设备连接,突破局域网限制,实现真正的远程协作。
### 2.4 扩展性强:轻松支持新设备类型与未来场景
- **模块化架构**:核心、平台、角色三大模块界限清晰,通过标准接口通信。
- **易于扩展**
- **新平台**实现对应的Platform Adapter显示、输入即可接入。
- **新角色**:在角色模型中定义新角色类型及其行为。
- **新功能**如AR/VR流传输可在协议中增加新的数据帧类型无需重构。
- **受益**:技术生命周期长,能快速适应未来新的硬件和设备形态。
## 3. 系统架构设计
### 3.1 软件架构图
```
[ 应用层 ]
|
[ 角色层 (Role Layer) ] <- Host, Client, Peer 角色实现
|
[ 平台适配层 (Platform Adapter) ] <- Android显示捕获 / Windows DirectX渲染
|
[ 核心层 (Core Layer) ] <- 会话管理、协议、编解码、网络抽象 (100%跨平台)
|
[ 传输层 (Transport Layer) ] <- 局域网RNDIS/USB、Wi-Fi、以太网、互联网STUN/TURN/ICE
```
### 3.2 核心模块说明
1. **核心共享库Core**:包含整个系统的"大脑",完全跨平台。
- **会话管理**:创建、维护、销毁显示会话,支持一对多。
- **通用协议**基于Google FlatBuffers的跨平台序列化定义视频帧、输入事件等。
- **编解码器**支持H.264(硬件加速)/VP8软件/MJPEG等多种编解码器自适应选择。
- **网络抽象**统一管理RNDIS、WiFi等局域网连接以及STUN/TURN/ICE互联网连接提供可靠UDP传输。
2. **平台适配层Platforms**:各平台特有功能的薄封装。
- **Android**通过MediaProjection捕获屏幕ImageReader获取帧处理触摸输入。
- **Windows**使用DirectX进行高效渲染通过IddCx驱动框架实现真虚拟显示器处理键鼠输入。
3. **角色层Roles**:实现不同的协作模式。
- **主机角色**:负责屏幕捕获、编码、发送。
- **客户端角色**:负责接收、解码、渲染。
- **对等角色**:同时运行主机和客户端逻辑。
## 4. 典型应用场景
**场景一高效办公Android -> Windows**
- **描述**用户通过USB RNDIS将安卓平板连接至Windows电脑。
- **角色**Android设备作为主机HostWindows电脑作为客户端Client
- **价值**:平板屏幕变为电脑的低延迟副屏,用于扩展显示代码文档、聊天工具,提升桌面工作效率。
**场景二:会议演示(一对多广播)**
- **描述**讲者的安卓平板通过Wi-Fi将屏幕内容广播到会议室的多台设备。
- **角色**Android设备作为主机Host多台Windows电脑/安卓电视/平板作为客户端Client
- **价值**:无需线缆,即可实现一人屏幕、多人同步观看,适用于教学、培训和会议。
**场景三移动协作Android <-> Android对等模式**
- **描述**两名设计师的安卓平板通过Wi-Fi建立对等Peer 会话。
- **角色**两台Android设备均作为对等端Peer即同时兼任主机和客户端。
- **价值**:每人的平板上同时显示自己和对方的屏幕,实现真正的双向实时画板协作,创意无缝对接。
**场景四移动协作Android -> Android主从模式**
- **描述**:用户将手中的安卓手机(高性能)屏幕,扩展至另一台安卓平板(大屏幕)上显示。
- **角色**安卓手机作为主机Host安卓平板作为客户端Client
- **价值**充分发挥设备特性。用户可在手机上进行私密操作如游戏、使用特定APP而将主画面投送至平板大屏上进行展示或共享兼顾隐私与分享需求。这充分体现了角色的灵活性——安卓设备可根据需求自由扮演主机或客户端的角色。
**场景五:远程协作(跨网络、跨地域)**
- **描述**:用户在家中通过互联网连接到办公室的 Windows 电脑,实现远程显示扩展。
- **角色**:办公室 Windows 电脑作为主机Host家中设备作为客户端Client
- **连接方式**:通过 STUN/TURN 服务器实现 NAT 穿透,自动选择最佳连接路径。
- **价值**:突破局域网限制,支持跨网络、跨地域的设备连接。无论设备在哪里,只要有互联网连接,就能实现无缝显示协作。适用于远程办公、技术支持、远程演示等场景。
## 5. 技术规格与指标
- **支持平台**Android 5.0+ Windows 10/11
- **最大分辨率**4K依赖设备性能
- **最大帧率**60 FPS
- **端到端延迟**< 30ms USB RNDIS模式下
- **最大客户端数量**理论上无限制实践中受网络带宽和主机性能约束建议≤20
## 6. Git仓库结构建议
```
DisplayFlow/
├── core/ # 跨平台核心库
├── platforms/
│ ├── android/ # Android平台实现
│ └── windows/ # Windows平台实现
├── docs/ # 文档
├── prototypes/ # 原型和测试代码
└── tools/ # 开发工具脚本
```
## 7. 技术栈
完全由C++实现
## 8. 总结
本方案通过真正跨平台的核心设计、动态角色分配和多连接方式抽象,突破了现有副屏方案的局限性。它不仅仅是一个"副屏工具",更是一个为未来多设备协作世界打造的、极具扩展性的通用显示协作平台。该架构确保了项目在性能、灵活性和可持续性上的领先优势。