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

9.3 KiB
Raw Permalink Blame History

DisplayFlow 项目结构说明

目录结构

DisplayFlow/
├── CMakeLists.txt              # 根 CMake 配置文件
├── .gitignore                  # Git 忽略文件配置
├── README.md                   # 项目概述和技术方案
├── DEVELOPMENT_PLAN.md         # 详细开发计划
├── README_BUILD.md             # 构建指南
├── PROJECT_STRUCTURE.md        # 本文件:项目结构说明
│
├── core/                       # 跨平台核心库
│   ├── CMakeLists.txt
│   ├── include/
│   │   └── displayflow/
│   │       └── core/
│   │           ├── common/     # 通用类型和常量
│   │           │   ├── types.h
│   │           │   └── constants.h
│   │           ├── network/    # 网络抽象层
│   │           │   ├── network_manager.h
│   │           │   ├── network_interface.h
│   │           │   ├── nat_traversal/  # NAT 穿透模块
│   │           │   │   ├── stun_client.h
│   │           │   │   ├── turn_client.h
│   │           │   │   ├── ice_agent.h
│   │           │   │   ├── candidate.h
│   │           │   │   └── nat_type.h
│   │           ├── protocol/   # 协议层
│   │           │   ├── protocol_handler.h
│   │           │   └── message_serializer.h
│   │           ├── session/    # 会话管理
│   │           │   ├── session_manager.h
│   │           │   └── session.h
│   │           ├── codec/      # 编解码抽象
│   │           │   ├── codec_manager.h
│   │           │   └── codec_interface.h
│   │           ├── role/       # 角色管理
│   │           │   ├── role_manager.h
│   │           │   ├── role_interface.h
│   │           │   ├── host_role.h
│   │           │   ├── client_role.h
│   │           │   └── peer_role.h
│   │           ├── file_transfer/  # 文件传输模块
│   │           │   ├── file_transfer_manager.h
│   │           │   ├── file_transfer_session.h
│   │           │   ├── file_chunk.h
│   │           │   └── transfer_progress.h
│   │           └── utils/      # 工具类
│   │               ├── logger.h
│   │               └── timer.h
│   └── src/                    # 对应的源文件实现
│       ├── network/
│       │   └── nat_traversal/
│       ├── protocol/
│       ├── session/
│       ├── codec/
│       ├── role/
│       ├── file_transfer/
│       └── utils/
│
├── platforms/                  # 平台适配层
│   ├── android/                # Android 平台实现
│   │   ├── CMakeLists.txt
│   │   ├── include/
│   │   │   └── displayflow/
│   │   │       └── platform/
│   │   │           └── android/
│   │   │               ├── platform_adapter.h
│   │   │               ├── capture/      # 捕获模块
│   │   │               │   ├── screen_capture.h
│   │   │               │   ├── media_projection_wrapper.h
│   │   │               │   └── camera_capture.h  # 摄像头捕获
│   │   │               ├── render/       # 渲染引擎
│   │   │               │   └── render_engine.h
│   │   │               ├── input/        # 输入处理
│   │   │               │   └── touch_handler.h
│   │   │               └── network/      # 网络管理
│   │   │                   └── android_network_manager.h
│   │   └── src/                # 对应的源文件实现
│   │       ├── capture/
│   │       │   ├── screen_capture.cpp
│   │       │   ├── media_projection_wrapper.cpp
│   │       │   └── camera_capture.cpp
│   │       ├── render/
│   │       ├── input/
│   │       ├── network/
│   │       └── platform_adapter.cpp
│   │
│   └── windows/                # Windows 平台实现
│       ├── CMakeLists.txt
│       ├── include/
│       │   └── displayflow/
│       │       └── platform/
│       │           └── windows/
│       │               ├── platform_adapter.h
│       │               ├── virtual_display/  # 虚拟显示器
│       │               │   ├── virtual_display.h
│       │               │   └── iddcx_wrapper.h
│       │               ├── capture/          # 捕获模块
│       │               │   └── camera_capture.h  # 摄像头捕获
│       │               ├── render/           # 渲染引擎
│       │               │   ├── directx_renderer.h
│       │               │   └── d3d11_renderer.h
│       │               ├── input/            # 输入处理
│       │               │   ├── keyboard_handler.h
│       │               │   └── mouse_handler.h
│       │               └── network/          # 网络管理
│       │                   └── windows_network_manager.h
│       └── src/                # 对应的源文件实现
│           ├── virtual_display/
│           ├── capture/
│           │   └── camera_capture.cpp
│           ├── render/
│           ├── input/
│           ├── network/
│           └── platform_adapter.cpp
│
├── docs/                       # 文档目录
│   ├── ARCHITECTURE.md         # 架构设计文档
│   └── API.md                  # API 文档
│
├── prototypes/                 # 原型和测试代码
│   └── README.md
│
└── tools/                      # 开发工具脚本
    └── README.md

模块说明

核心库 (core/)

100% 跨平台的业务逻辑实现,不依赖任何平台特定 API。

  • common/: 基础类型定义和常量
  • network/: 网络抽象层,统一管理 RNDIS、Wi-Fi、以太网
    • nat_traversal/: NAT 穿透模块STUN/TURN/ICE
  • protocol/: 基于 FlatBuffers 的协议定义和序列化
  • session/: 会话生命周期管理
  • codec/: 编解码器抽象接口和管理
  • role/: 角色Host/Client/Peer实现
  • file_transfer/: 文件传输模块(断点续传、多文件传输)
  • utils/: 通用工具类(日志、定时器等)

平台适配层 (platforms/)

各平台特定功能的薄封装层。

Android

  • capture/:
    • 屏幕捕获MediaProjection API 封装)
    • 摄像头捕获Camera2 API / NDK Camera API
  • render/: 渲染引擎(用于 Client 角色)
  • input/: 触摸输入处理
  • network/: Android 网络管理USB RNDIS、Wi-Fi

Windows

  • virtual_display/: IddCx 驱动框架封装,创建虚拟显示器
  • capture/:
    • 摄像头捕获DirectShow / Media Foundation
  • render/: DirectX 渲染引擎
  • input/: 键盘和鼠标输入处理
  • network/: Windows 网络管理USB RNDIS、Wi-Fi、以太网

命名空间

  • displayflow::core - 核心库
  • displayflow::platform::android - Android 平台适配
  • displayflow::platform::windows - Windows 平台适配

构建系统

使用 CMake 作为统一构建系统:

  • 根目录 CMakeLists.txt 负责平台检测和子目录管理
  • 各模块有独立的 CMakeLists.txt
  • 支持条件编译,根据平台自动选择对应的适配层

当前状态

所有基础框架文件已创建,包含:

  • 完整的目录结构
  • 所有头文件和源文件占位符
  • CMake 构建配置
  • 基础类型和接口定义

下一步:开始实现核心功能模块。

新增功能模块

文件传输模块 (core/file_transfer/)

支持在设备间传输文件,特性包括:

  • 断点续传
  • 多文件并发传输
  • 传输进度监控
  • 文件校验MD5/SHA256
  • 传输队列管理

远程摄像头模块

支持使用对方的摄像头作为视频源,特性包括:

  • 摄像头设备枚举和选择
  • 视频流捕获和编码
  • 与屏幕共享复用相同的传输通道
  • 支持多摄像头切换
  • 摄像头参数控制(分辨率、帧率等)

NAT 穿透模块 (core/network/nat_traversal/)

支持通过互联网连接设备,突破局域网限制,特性包括:

  • STUN 客户端NAT 类型检测和公网 IP 发现
  • TURN 客户端:中继服务器支持(当直连失败时)
  • ICE 协议:自动选择最佳连接路径
  • 候选地址收集收集本地、STUN、TURN 候选地址
  • 连接建立:自动尝试多种连接方式,选择最优路径

连接方式优先级:

  1. 局域网直连(最快)
  2. 公网直连(通过 STUN 发现)
  3. TURN 中继(最慢但最可靠)

架构优势:

  • 文件传输复用现有的网络抽象层和协议层
  • 摄像头捕获复用现有的编码和传输机制
  • NAT 穿透完全透明,上层无需关心连接方式
  • 完全集成到现有角色模型中
  • 保持跨平台兼容性