mirror of
https://github.com/Genymobile/scrcpy.git
synced 2025-08-10 01:59:04 +00:00
up
This commit is contained in:
parent
f01231dff8
commit
a7c89981a3
1 changed files with 84 additions and 0 deletions
84
doc/archive.org
Normal file
84
doc/archive.org
Normal 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 架构?或者你想自己基于它做些二次开发,我可以帮你找入口点(比如如何改输入、如何替换编码器等)。
|
Loading…
Add table
Add a link
Reference in a new issue