This commit is contained in:
huhuang03 2025-07-02 15:17:32 +08:00
commit a7c89981a3

84
doc/archive.org Normal file
View file

@ -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 架构?或者你想自己基于它做些二次开发,我可以帮你找入口点(比如如何改输入、如何替换编码器等)。