136 lines
7.8 KiB
Markdown
136 lines
7.8 KiB
Markdown
|
|
# 跨平台虚拟显示协作系统技术方案
|
|||
|
|
|
|||
|
|
## 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 连接通用:支持RNDIS、WiFi、以太网等多种连接方式
|
|||
|
|
|
|||
|
|
- **网络抽象层(Network Agnostic)**:设计统一的网络接口,自动选择或同时管理多种物理连接。
|
|||
|
|
- **USB RNDIS**:优先使用,提供近似有线的高带宽、低延迟体验。
|
|||
|
|
- **Wi-Fi 局域网**:提供无线便利性,支持一对多广播。
|
|||
|
|
- **有线以太网**:为台式机等设备提供稳定连接。
|
|||
|
|
|
|||
|
|
- **技术实现**:NetworkManager负责探测可用连接,根据性能(延迟、带宽)自动优选或负载均衡。应用层无需关心底层是USB虚拟网卡还是真实网卡。
|
|||
|
|
|
|||
|
|
- **受益**:用户无需手动配置网络,系统自动选择最佳路径,并提供从有线到无线的无缝切换能力。
|
|||
|
|
|
|||
|
|
### 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、以太网
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3.2 核心模块说明
|
|||
|
|
|
|||
|
|
1. **核心共享库(Core)**:包含整个系统的"大脑",完全跨平台。
|
|||
|
|
- **会话管理**:创建、维护、销毁显示会话,支持一对多。
|
|||
|
|
- **通用协议**:基于Google FlatBuffers的跨平台序列化,定义视频帧、输入事件等。
|
|||
|
|
- **编解码器**:支持H.264(硬件加速)/VP8(软件)/MJPEG等多种编解码器,自适应选择。
|
|||
|
|
- **网络抽象**:统一管理RNDIS、WiFi等连接,提供可靠UDP传输。
|
|||
|
|
|
|||
|
|
2. **平台适配层(Platforms)**:各平台特有功能的薄封装。
|
|||
|
|
- **Android**:通过MediaProjection捕获屏幕,ImageReader获取帧,处理触摸输入。
|
|||
|
|
- **Windows**:使用DirectX进行高效渲染,通过IddCx驱动框架实现真虚拟显示器,处理键鼠输入。
|
|||
|
|
|
|||
|
|
3. **角色层(Roles)**:实现不同的协作模式。
|
|||
|
|
- **主机角色**:负责屏幕捕获、编码、发送。
|
|||
|
|
- **客户端角色**:负责接收、解码、渲染。
|
|||
|
|
- **对等角色**:同时运行主机和客户端逻辑。
|
|||
|
|
|
|||
|
|
## 4. 典型应用场景
|
|||
|
|
|
|||
|
|
**场景一:高效办公(Android -> Windows)**
|
|||
|
|
|
|||
|
|
- **描述**:用户通过USB RNDIS将安卓平板连接至Windows电脑。
|
|||
|
|
- **角色**:Android设备作为主机(Host),Windows电脑作为客户端(Client)。
|
|||
|
|
- **价值**:平板屏幕变为电脑的低延迟副屏,用于扩展显示代码文档、聊天工具,提升桌面工作效率。
|
|||
|
|
|
|||
|
|
**场景二:会议演示(一对多广播)**
|
|||
|
|
|
|||
|
|
- **描述**:讲者的安卓平板通过Wi-Fi将屏幕内容广播到会议室的多台设备。
|
|||
|
|
- **角色**:Android设备作为主机(Host),多台Windows电脑/安卓电视/平板作为客户端(Client)。
|
|||
|
|
- **价值**:无需线缆,即可实现一人屏幕、多人同步观看,适用于教学、培训和会议。
|
|||
|
|
|
|||
|
|
**场景三:移动协作(Android <-> Android,对等模式)**
|
|||
|
|
|
|||
|
|
- **描述**:两名设计师的安卓平板通过Wi-Fi建立对等(Peer) 会话。
|
|||
|
|
- **角色**:两台Android设备均作为对等端(Peer),即同时兼任主机和客户端。
|
|||
|
|
- **价值**:每人的平板上同时显示自己和对方的屏幕,实现真正的双向实时画板协作,创意无缝对接。
|
|||
|
|
|
|||
|
|
**场景四:移动协作(Android -> Android,主从模式)**
|
|||
|
|
|
|||
|
|
- **描述**:用户将手中的安卓手机(高性能)屏幕,扩展至另一台安卓平板(大屏幕)上显示。
|
|||
|
|
- **角色**:安卓手机作为主机(Host),安卓平板作为客户端(Client)。
|
|||
|
|
- **价值**:充分发挥设备特性。用户可在手机上进行私密操作(如游戏、使用特定APP),而将主画面投送至平板大屏上进行展示或共享,兼顾隐私与分享需求。这充分体现了角色的灵活性——安卓设备可根据需求,自由扮演主机或客户端的角色。
|
|||
|
|
|
|||
|
|
## 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. 总结
|
|||
|
|
|
|||
|
|
本方案通过真正跨平台的核心设计、动态角色分配和多连接方式抽象,突破了现有副屏方案的局限性。它不仅仅是一个"副屏工具",更是一个为未来多设备协作世界打造的、极具扩展性的通用显示协作平台。该架构确保了项目在性能、灵活性和可持续性上的领先优势。
|