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 源码的独立学习笔记