夜雨聆风学习资料网

ARTICLE · 1215132

给开源项目提了个 PR,让安卓平板插根线就能当 Mac 副屏

给开源项目提了个 PR,让安卓平板插根线就能当 Mac 副屏

上周六收到一封 GitHub 邮件,是 android-airplay-server 的作者回复的:

Appreciate the help! This is really useful :)

说实话挺开心的。这事得从头说起。

起因:公司 Wi‑Fi 投不了屏

公司办公室有台荣耀 MagicPad 13,一直想拿它当 MacBook 的副屏。android-airplay-server 这个开源项目能把安卓设备变成 AirPlay 接收端,Mac 在「屏幕镜像」里选「用作单独的显示器」,平板就成了第二块屏。

问题是公司网络。平板连的是 IoT 专用 Wi‑Fi,Mac 在办公网,两边不在一个网段,Mac 根本搜不到平板。AirPlay 靠局域网广播发现设备,跨网段就没戏。

那就别走 Wi‑Fi 了,直接插线。

插线也没那么简单

思路很直接:平板打开 USB 网络共享,Mac 那边会多出一块「USB 网卡」,两台设备就在一根线上组了个小网络。

结果一连踩了三个坑。

第一,Wi‑Fi 版平板在设置里根本没有 USB 网络共享的开关,只能用 adb 打开。

第二,打开之后 Mac 不认。安卓默认用 RNDIS 协议共享网络,而 macOS 只支持 NCM,得用 adb 强制切成 NCM。

第三个最麻烦:网络通了,Mac 照样搜不到平板。查了半天发现,安卓系统负责广播「我是 AirPlay 设备」的那个服务,只有在应用启动时 USB 网卡已经存在,才会在上面广播;数据线一拔一插,它就不管 USB 这条线了。

所以我给这个项目加了一个小模块:在 USB 网卡上自己广播,系统广播了就让开,系统不管了就顶上。然后整理成 PR #57 提给了作者。

作者合并时把它简化成了设置里的一个开关,叫「USB only」。打开后只通过数据线广播,Wi‑Fi 上就看不到这台平板了。

顺带一提,我之前还提过一个小 PR #56,把华为麒麟芯片的 H.265 硬件解码器加进了白名单,这次也一起合并了,用华为平板的朋友也能用上硬解。两个改动都在 v0.0.33 里。

实际用起来怎么样

现在每天插上线、解锁平板、在 Mac 上点一下「屏幕镜像」,副屏就出来了。不用管 Wi‑Fi,Mac 上也什么都没装。

打开调试面板看了下:H.265 硬件解码,2880×1840 原生分辨率,60 帧,用了十几分钟一帧没丢。USB 网络延迟大概 2 毫秒,带宽接近 2Gbps,投屏那点流量根本不算什么。而且数据线还能顺便给平板充电,开一整天也不用管电量。

还有个意外的好处:开了 USB only,平板不在 Wi‑Fi 上露面,同事的电脑搜不到它,不会有人误投屏。

想试试的话

  1. 到 GitHub 下载 v0.0.33 或更新版本,装到平板上,在设置里打开 USB only。

  2. 先插线,再解锁平板。顺序反了的话,网络共享不会自动打开。

  3. Mac 上「控制中心」→「屏幕镜像」,选平板,再选「用作单独的显示器」。

偶尔插上后 Mac 搜不到,拔插一次数据线一般就好了。

理论上安卓 11 以上、支持 USB 网络共享的设备都可以试试,用别的品牌跑通了的话,欢迎留言告诉我。

项目地址:github.com/jqssun/android-airplay-server

相关学习资料