Skip to content

术语表 ​

这些词在 scrcpy 源码中有特定含义。先统一术语,可以避免把业务角色、网络角色和媒体层级混在一起。

A–D ​

ADB forward ​

把电脑本地 TCP 端口转发到设备 abstract socket。此模式下 Android 端监听、桌面端连接。若 reverse 失败会自动回退,入口见 adb_tunnel.c。

ADB reverse ​

把设备端对 abstract socket 的连接反向转到电脑本地 TCP listener。scrcpy 默认优先使用;此时业务上的 Android server 在网络层是 connector。

AOA ​

Android Open Accessory。scrcpy 使用 AOA 2.0 HID 请求,让电脑通过 USB accessory 协议注册并发送键盘、鼠标、手柄 report,不经过 Android server 控制 socket。

App process ​

Android 用来启动 framework Java 类的进程入口。scrcpy 通过 CLASSPATH + app_process 直接运行 Server.main(),不是安装并启动 Activity。

Config packet ​

编码器输出的 codec-specific data,如 H.264 SPS/PPS 或 Opus header。媒体协议用 PTS bit62 标记,客户端映射为 AV_NOPTS_VALUE;它不是可展示帧。

Control channel ​

全双工 socket。桌面向设备发送 23 类 ControlMessage,设备向桌面发送 3 类 DeviceMessage。

F–P ​

Frame sink / source ​

消费/产生已解码 AVFrame 的 C 接口。screen、audio regulator、V4L2 属于 frame sink。实现见 frame_source.c。

client_resized ​

视频 session meta 的标志,说明此次远端尺寸改变源自桌面用户调整 flex virtual display。screen 用它阻止自动 resize 形成反馈环。

Demuxer ​

scrcpy 客户端中解析自定义媒体 framing 的线程,不是传统意义上解析 MP4/MKV 的容器 demuxer。

FakeContext ​

设备端为非标准 app_process 环境构造的最小 Android Context,使用 shell package identity,并补齐 framework 调用所需行为。

HID report ​

物理/虚拟键鼠手柄的二进制状态报告。与 Android keycode 不同,report 描述硬件当前按键、轴或按钮状态。

Packet sink / source ​

消费/产生压缩 AVPacket 的 C 接口。decoder 和 recorder 都是 packet sink;demuxer 是 packet source。

Position mapper ​

服务端把编码 frame 坐标映射回真实/虚拟 display 坐标的对象,吸收 crop、scale、rotation 等采集变换。

PTS ​

Presentation Timestamp。scrcpy 媒体协议使用微秒,低 61 位存值;recorder 写容器前换算到 stream time base。

R–Z ​

Regulator ​

客户端的节奏调节组件。video regulator 按 PTS 延时交付帧;audio regulator 维持目标 buffer 并通过重采样补偿时钟漂移,两者机制不同。

scid ​

每次客户端运行生成的 31 位随机实例 ID,用于构造唯一 socket 名 scrcpy_<hex>,支持多实例并避免旧连接串线。

Session packet ​

视频字节流中的 12 字节控制包,最高位为 1,携带当前 width/height 与 client-resized 标志。旋转/resize 后在同一连接内开启新媒体会话。

Shell UID ​

ADB shell 的 Android 用户身份,通常 UID 2000。它提供 scrcpy 需要的多项系统能力;server 即使从 root 启动也会主动降到 shell。

Surface capture ​

能把图像持续渲染到编码器输入 Surface 的抽象。实现包括真实 display、Camera2 和新虚拟 display。

UHID ​

Linux userspace HID。scrcpy 通过设备端 /dev/uhid 创建 Android 识别的虚拟键盘、鼠标和手柄,输入 report 经 control socket 到达。

V4L2 sink ​

Linux-only 的 frame consumer,把解码 YUV 帧写到 /dev/videoN 虚拟摄像头。它与 recorder 不同,必须经过解码。

Watchdog ​

客户端关闭 socket 后给 Android server 的 1 秒正常退出窗口;超时则主动终止设备端进程,防止睡眠设备上的阻塞调用永久挂起。

容易混淆的三组词 ​

不要混淆区别
Android server vs TCP serverreverse 模式下 Android 是业务 server,却是网络 connector
packet vs framepacket 是压缩码流,frame 是解码像素/采样
SDK input vs UHID/AOASDK 注入操作系统事件;UHID/AOA 模拟硬件设备

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