diff --git a/doc/archive.org b/doc/archive.org new file mode 100644 index 00000000..29348d5e --- /dev/null +++ b/doc/archive.org @@ -0,0 +1,84 @@ +✅ 一、Scrcpy 原理概述 +scrcpy 的基本工作流程可以分为两部分: + +安卓端:使用 adb 启动 scrcpy-server 进程 + +PC 端:用 FFmpeg + SDL 渲染视频流 + 模拟输入事件 + +数据流程图: ++--------------+ adb push +------------------+ +| PC (host) | ---------------> | Android Device | +| | | (scrcpy-server) | +| | <---------------| (Video encoded) | +| | stream | | +| | (H.264) | | ++--------------+ +------------------+ + + ↑用户输入 ↓视频流 + 控制指令(按键、点击等) +🧱 二、Scrcpy 架构分层图 +┌────────────────────────────┐ +│ 用户界面(GUI) │ ← 可选,如 scrcpy-gui +├────────────────────────────┤ +│ PC 客户端主程序 │ +│ - 接收视频流(H.264) │ +│ - 解码并渲染(ffmpeg + SDL)│ +│ - 接收用户操作(键鼠事件) │ +│ - 通过 ADB 发送到手机 │ +├────────────────────────────┤ +│ ADB 通道(USB/TCP) │ ← 用于传输视频流和输入控制 +├────────────────────────────┤ +│ 安卓设备上的 server │ +│ - scrcpy-server.jar │ +│ - 采集屏幕 MediaProjection │ +│ - 编码成 H.264 │ +│ - 接收 PC 发来的输入事件 │ +└────────────────────────────┘ +🔍 三、关键模块详解 +1. Android 端:scrcpy-server.jar +编译后以 jar 文件形式内嵌在 PC 程序中(PC 会用 adb push 推送它到手机上) + +核心功能: + +使用 MediaProjection API 捕获屏幕 + +使用 MediaCodec 编码为 H.264 视频流 + +将视频数据发送给 PC + +接收 PC 发来的输入事件并使用 InputManager 注入事件 + +2. ADB 通道 +通过 adb exec-out 启动 server,然后用 adb 端口转发(默认 27183) + +使用 adb reverse 映射安卓端口到 PC 本地端口,实现双向通信 + +支持 USB 和 TCP/IP 模式(无线连接) + +3. PC 客户端 +用 C 实现(跨平台,依赖 SDL 和 FFmpeg) + +核心功能: + +通过 socket 接收安卓端的 H.264 视频流 + +用 FFmpeg 解码、SDL 渲染到窗口 + +捕获鼠标键盘输入,转换为 Android 输入事件(通过 adb 发送) + +⚙️ 四、扩展功能支持(可选) +剪贴板同步(双向) + +文件拖拽(通过 adb push) + +录屏功能(通过本地保存 H.264) + +多设备支持(通过指定序列号) + +📌 总结 +模块 技术 作用 +Android 端 MediaProjection + MediaCodec 采集并压缩屏幕 +ADB 通道 adb exec-out + socket 建立连接和通信 +PC 端 FFmpeg + SDL + ADB 解码、显示、控制、输入转发 + +是否需要我画一张图帮助你更直观理解 scrcpy 架构?或者你想自己基于它做些二次开发,我可以帮你找入口点(比如如何改输入、如何替换编码器等)。 \ No newline at end of file