MirrorCaster 完全实战指南:三步把 Android 手机投屏到电脑,1080P 下平均延迟低至 28ms

MirrorCaster 完全实战指南:三步把 Android 手机投屏到电脑,1080P 下平均延迟低至 28ms MirrorCaster 完全实战指南三步把 Android 手机投屏到电脑1080P 下平均延迟低至 28ms【免费下载链接】MirrorCaster开源、高效、低延迟的Android投屏工具项目地址: https://gitcode.com/gh_mirrors/mi/MirrorCasterMirrorCaster 是一款开源的 Android 投屏工具手机侧用系统自带的 screenrecord 做 H.264 编码编码流通过 adb 管道直接送进电脑端的 mpv 实时解码渲染USB 连接下 1920×1080 分辨率能跑到 60FPS实测平均显示延迟最低 28ms 出头。全部源码放在一个 C# WinForms 工程里GPLv3 协议想改哪里都能直接下手。先说痛点市面投屏方案差在哪用云投屏 App 的话画面要经过厂商服务器绕一圈延迟动辄几百毫秒玩快闪游戏基本没法看用 Scrcpy 之类的命令行工具虽然快但要自己拼命令、调参数对新手不友好。MirrorCaster 的思路是图形界面 内置 adb 和 mpv你只管连手机、点按钮编码、传流、解码整条链路它自动串好。三步跑起来编译、连手机、开投屏环境要求很朴素项目要求电脑系统Windows运行框架.NET Framework 4.5 及以上手机侧开启 USB 调试开发者选项里打开依赖无需额外安装adb 与 mpv 已内置在lib/目录仓库代码结构一目了然MirrorCaster/ ├── MirrorCaster/ │ ├── Program.cs # 程序入口创建并运行主窗口 │ ├── MainForm.cs # 主窗口投屏启停、码率设置、虚拟按键、设备信息轮询 │ ├── DeviceInfoData.cs # 设备信息分辨率、刷新率、横竖屏状态 │ ├── StreamPipe.cs # 异步流管道把 adb 的输出接到 mpv 的输入 │ ├── MirrorCaster.csproj # 工程文件 │ └── lib/ │ ├── adb/ # 内置 adb.exe 及 Windows 平台 DLL │ └── mpv/ # 内置 mpv.exe 播放器 ├── MirrorCaster.sln # Visual Studio 解决方案文件 └── images/demo.webp # 投屏效果演示动图操作步骤克隆仓库git clone https://gitcode.com/gh_mirrors/mi/MirrorCaster用 Visual Studio 打开MirrorCaster.sln编译通过后运行MirrorCaster.exe手机 USB 接电脑手机上点允许调试点界面上的开始投屏输入码率默认 30Mbps 即可手机画面就出来了延迟到底多低三台手机真机实测官方用了一个相当硬核的测法手机运行 UFOTEST 的丢帧测试用慢动作摄影机同时拍手机和电脑两块屏幕随机取三帧比较两块屏幕上格数的差值再乘每帧时长取平均值得到显示延迟。三台测试机全是 USB 2.0 连接机型处理器 / 系统屏幕分辨率帧率平均显示延迟Xiaomi MIX 3骁龙 845 / MIUI 11Android 101080×234060FPS28.42msXiaomi MIX 2骁龙 835 / MIUI 11Android 91080×216060FPS41.66msGoogle Pixel 3 XL骁龙 845 / Android 101440×296060FPS57.38ms几点解读28ms 意味着从手机发出画面到电脑显示只隔了不到两帧60FPS 下每帧约 16.7ms肉眼几乎感觉不到拖影同为骁龙 845MIX 3 比 Pixel 3 XL 快了将近一倍——延迟差异主要来自手机侧 H.264 编码速度而不是传输链路分辨率越高编码压力越大Pixel 3 XL 的 1440P 屏就是因此拖了后腿。所以弱鸡机型可以把投屏分辨率调低换帧率。链路拆解screenrecord StreamPipe mpv 是怎么串起来的整个投屏过程就是三个进程握手核心逻辑都在 MainForm.cs 里读这一百多行主逻辑就能完全看懂。第一步手机侧编码。通过内置的 adb 启动一条循环录屏命令输出直接打到标准输出而不是存文件adb exec-out while true;do screenrecord --bit-rate30000000 --output-formath264 --size 1920x1080 - ;donewhile true循环很关键screenrecord 单次最长跑 180 秒循环保证录屏流不断线--size由程序自动填入设备当前分辨率。第二步管道传输。StreamPipe.cs用 4KB 缓冲区做异步读写的搬运工——从 adb 进程的 stdout 读一块就写一块进 mpv 的 stdin写完立即 Flush不积压。这就是低延迟的第一道保险。第三步mpv 硬解渲染。mpv 启动时带上了一整套为低延迟定制的参数关键的几个参数作用--profilelow-latency--cacheno启用低延迟预设、禁用缓存--framedropdecoder--video-latency-hacksyes帧率跟不上时直接丢帧宁可少画不可积压--hwdecyes--vogpu硬件解码 GPU 输出--no-correct-pts --fps60按手机刷新率强制解码节奏可选--titleMirror Caster Source给窗口命名方便 OBS 按窗口名捕获渲染窗口还有个小巧思内嵌模式Internal下程序调用SetParent把 mpv 的窗口句柄搬进主窗口的容器里再配合分层窗口属性做穿透处理你看到的就是一整个干净的窗口而不是 mpv 的完整播放器界面。界面里的四档模式超低延迟 / 均衡偏低延迟 / 均衡偏稳定 / 稳定模式本质上是切换 mpv 的取帧策略超低延迟用--untimed来了就播稳定模式则不做干预让 mpv 自己平滑。进阶玩法OBS 抓画面直播、码率怎么选、按键控制独立窗口模式抓屏直播主界面有独立窗口投屏模式会单独弹出一个标题为Mirror Caster Source的 mpv 窗口。做 OBS 直播时先把手机切到横屏应用页面再点确定开始投屏该模式不跟随画面旋转和分辨率自适应OBS 里添加窗口捕获模式选捕获特定窗口窗口选[mpv.exe] Mirror Caster Source。因为窗口标题固定OBS 里配置一次就能长期复用比抓屏幕区域稳定得多。码率给多少开始投屏时会弹出码率输入框单位 Mbps上限 200官方建议值传输方式建议码率互联网异地 ADB10USB一般手机30百兆局域网编码强的手机100USB旗舰编码能力≤200码率越高画质越好但手机编码压力也越大延迟会跟着涨。日常 USB 投屏用默认 30 就很稳追求画质且手机是旗舰的话可以试 50~100。虚拟按键远程操控投屏期间界面会亮起一排按键电源、返回、Home、多任务、菜单、音量加/减全部通过adb shell input keyevent下发源码见ADBKeySend相关方法例如返回键对应KEYCODE_BACK。演示和调试场景下不用拔线点手机直接鼠标点点完事。ADB 投屏常见坑与处理提示找不到任何设备或模拟器手机没连上或没点允许调试。检查 USB 是否只开了充电模式开发者选项里确认 USB 调试已开。提示multiple devices/emulators同一台电脑插了多部开了调试的手机。断开其他设备或在 ADB 里指定单台。画面转屏后不同步程序内置了心跳定时器轮询dumpsys window displays解析当前分辨率和刷新率正则抓curWxH和refresh-rate … fps检测到横竖屏切换会自动重启投屏换分辨率——内嵌模式下无需你操心独立窗口模式则建议投屏前先摆好横屏。手机断开提示设备已断开连接心跳轮询发现设备消失后会自动停止投屏并弹窗重连手机再开即可。帧率不稳先切均衡偏向低延迟档位还不行就把码率从 30 降到 10~16或关掉硬件解码排除显卡驱动干扰。二次开发从哪下手三个文件讲透核心逻辑代码量不大改功能基本围绕三个文件转MirrorCaster/MainForm.cs约 500 行投屏启停、码率输入、四档模式参数表、设备信息轮询、虚拟按键全在这。想加新的 mpv 参数改StdIn()里拼参数的那一行即可想加虚拟按键照VolUpKeyButton_Click抄一个再绑个KEYCODE_*就行。MirrorCaster/StreamPipe.cs约 50 行纯异步管道4KB 缓冲 取消令牌。想加流统计或断流重连逻辑改Connect()里的循环体。MirrorCaster/DeviceInfoData.cs10 行设备宽高、刷新率、竖屏标志四个字段是解析结果的载体想扩展设备信息比如电池温度从这里加字段。依赖层面lib/adb/和lib/mpv/里的二进制是随工程一起分发的替换更新版本的 adb 或 mpv 时注意保持目录结构不变代码里是按AppDomain.CurrentDomain.BaseDirectory lib\adb\adb.exe这种相对路径硬编码加载的。小结适合谁用如果你是直播主需要把手机画面低延迟地送进 OBS如果你是开发者想要一个能直接读源码、随便魔改的 ADB 投屏基座或者你就是受够了高延迟云投屏只想安安静静把手机画面投到电脑上——MirrorCaster 用screenrecord 编码 adb 管道 mpv 硬解这套极简链路证明了不开 Root、不装手机端 AppUSB 2.0 上 28ms 的显示延迟完全够打。GPLv3 协议下随便读、随便改商用注意保留许可证声明即可。【免费下载链接】MirrorCaster开源、高效、低延迟的Android投屏工具项目地址: https://gitcode.com/gh_mirrors/mi/MirrorCaster创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考