Skip to content

scrcpy 源码拆解从 ADB 到像素

沿真实数据流读懂 scrcpy 4.1:桌面端 C 客户端、Android Java 服务端、媒体传输、低延迟播放与输入控制。

scrcpy source notes
4.1拆解源码版本
259核心 C / Java 文件
41,620生产源码行数
15 + 3主线章节与附录

这套笔记解决什么问题

scrcpy 的命令行看起来很直接:连接 Android 设备,弹出一个窗口,然后就能看、能听、能控制。但源码里的真实问题远比“截屏后通过 ADB 发送”复杂:谁主动建立 socket?为什么一份视频包可以同时送给屏幕和录像器?设备旋转时如何不中断进程?音频生产者和声卡消费者时钟不一致时为什么不能简单丢帧?鼠标输入为什么有三条完全不同的后端路径?

这套文档不重复官方使用手册,而是回答这些实现层的问题。你会沿着一条完整链路阅读:

命令行参数 → 桌面端选择设备并推送 server → ADB reverse / forward 建立三条逻辑通道 → Android 采集并编码音视频 → 自定义二进制协议传输 → FFmpeg 解码 / 分流录制 → SDL 播放与渲染 ↔ 输入、剪贴板、UHID 输出反向流动

源码基线来自 Genymobile/scrcpy v4.1。本站是独立学习资料,不是官方文档。

适合谁

  • 想理解“低延迟投屏”而不只会调用工具的音视频工程师;
  • 需要设计跨设备协议、ADB 隧道或双进程生命周期的系统开发者;
  • 想在 C 中学习接口表、消息队列、线程退出与失败回滚的读者;
  • 想研究 Android app_process、shell 身份、隐藏系统服务与输入注入的人;
  • 准备修改 scrcpy 的视频源、输出 sink、控制消息或输入后端的贡献者。

阅读路线开始,或直接进入第 1 章:全局架构

基于 scrcpy 4.1 源码的独立学习笔记