写了一个程序,实现了 mac 的随航自由,可以将任何设备作为 mac 的扩展屏幕/屏幕镜像 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zanjie1999
V2EX    macOS

写了一个程序,实现了 mac 的随航自由,可以将任何设备作为 mac 的扩展屏幕/屏幕镜像

  •  2
     
  •   zanjie1999 2024-10-08 11:37:39 +08:00 4467 次点击
    这是一个创建于 419 天前的主题,其中的信息可能已经有所发展或是发生改变。

    咩 Display

    不知道是不是人们都觉得用的起 macOS 的都买得起 iPad 啊,一直都没有可以在 Apple M1 系上实现 Android 平板作为扩展屏的方案
    (咩咩买 mac 是工作需要,靠这电脑吃饭的,花了 13899 虽然非常贵但是没办法,咩咩没有钱)

    使用任何设备(只要有浏览器),作为 mac 的副屏/镜像(实现 Apple 官方随航的功能),不限制平台,黑苹果也可以用的,依赖 ffmpeg ,其他系统都自带了

    基于之前手搓的 http 服务 httpRandomMusic
    这个项目实现了实时音频转码,实现了小爱音响播放音乐的自由(可以让单片机级别配置的小爱 play 增强版播放本地 nas 音乐)

    写这东西主要是为了实现将之前买的辣鸡 Chromebook Duet 作为 mac 的副屏用,实现“将 Android 平板用作 Mac 的第二台显示器”,类似于 Windows 端 spacedesk 的功能,因为使用浏览器作为客户端,对目标设备没有限制,就算没有浏览器也可以直接使用视频播放器打开视频流

    实测 M1 Pro 在 mjpg 情况下 3k 分辨率 60hz 只有 100ms 延迟
    d4872a33dad8a1e0f383bd2c5001ff37.jpg

    目前已支持在浏览器使用 mjpg 和 vp8 串流,h264 和 hevc 浏览器兼容性问题还没调好,播放器可以正常播放

    Github 仓库: https://github.com/zanjie1999/meDisplay
    演示视频: https://www.bilibili.com/video/BV1Qf25YQEj4?p=2

    32 条回复    2025-11-03 14:57:34 +08:00
    Lowlife
        1
    Lowlife  
       2024-10-08 11:40:46 +08:00 via Android
    这真不错
    ZTom
        2
    ZTom  
       2024-10-08 11:48:53 +08:00
    挺好
    nenosyyan
        3
    nenosyyan  
       2024-10-08 12:10:59 +08:00
    群友打卡
    wsbqdyhm
        4
    wsbqdyhm  
       2024-10-08 12:20:28 +08:00
    留着备用。
    jccaipc
        5
    jccaipc  
       2024-10-08 14:42:59 +08:00
    收藏
    yanyuechuixue
        6
    yanyuechuixue  
       2024-10-08 15:42:09 +08:00
    感谢! 支持!
    zanjie1999
        7
    zanjie1999  
    OP
       2024-10-08 16:16:23 +08:00
    喜报,浏览器的 h264 和 hevc 串流实现了,3k 60hz 下延迟有 3 秒左右,相比 vp8 的 1 秒和 mjpg 的 100ms 还有很大的优化空间,不过没有使用 js ,mjpg 模式在 kindle 的浏览器下大概也是可用的
    yanyuechuixue
        8
    yanyuechuixue  
       2024-10-08 22:16:28 +08:00
    我这边似乎延迟比较高,即便是用 mjpg 延迟也在 1s 左右。没有虚拟屏幕,就是直接 stream 的 macbook m1 pro 显示器。用的已经是 5G wifi 了,请问大概是怎么回事儿呢?
    BearCookie
        9
    BearCookie  
       2024-10-09 09:40:42 +08:00
    这么好的 app 居然是免费的,谢谢楼主分享啊
    barfi1316
        10
    barfi1316  
       2024-10-09 10:54:57 +08:00
    之前有个老的 ipad 不支持随访,现在可以用起来了。
    Anna1879
        11
    Anna1879  
       2024-10-09 13:46:13 +08:00
    谢谢大佬
    wxjback
        12
    wxjback  
       2024-10-09 14:34:08 +08:00
    我的老 IPAD 有用武之地了?
    vorabend
        13
    vorabend  
       2024-10-09 14:45:52 +08:00
    @yanyuechuixue 同 使用 mjpg 延迟很高 1s 多一点 不知道问题出在哪
    zanjie1999
        14
    zanjie1999  
    OP
       2024-10-09 16:05:09 +08:00
    @yanyuechuixue 你可以尝试降低分辨率看看有没有帮助,打开 py 文件可以编辑分辨率限制,当然了路由的性能也是很重要的,我这用的 ipq6000 虽然设备是 5g wifi 的,但信号再差延迟也不会超过半秒,如果是 android 还可以用 usb 连接后用 adb 的端口转发功能实现有线传输

    adb reverse tcp:65532 tcp:65532

    这样可以直接在设备的浏览器上打开 http://127.0.0.1:65532 来访问电脑上的服务
    zanjie1999
        15
    zanjie1999  
    OP
       2024-10-09 16:05:42 +08:00
    @vorabend 刚没 at 到,看上一条
    luka77
        16
    luka77  
       2024-10-09 16:27:16 +08:00
    问一下副屏上没有鼠标指针是怎么回事?
    zanjie1999
        17
    zanjie1999  
    OP
       2024-10-09 16:44:30 +08:00
    @luka77 如果你使用的不是最新版本,那确实有这个问题,最新版我把缺的参数加上了,因为最初我是在黑苹果上开发的,这个采集鼠标指针的参数在白的才有
    zanjie1999
        18
    zanjie1999  
    OP
       2024-10-09 16:47:12 +08:00
    ![]( https://img.picui.cn/free/2024/10/09/670641a22896d.jpg)
    这是串流的 14 寸 mac 的内置 3K 屏幕,分辨率宽度限制为 1920 ,占用 12m/s 带宽,延迟 133ms
    suitts
        19
    suitts  
       2024-10-10 09:54:48 +08:00
    挺有意思的
    zanjie1999
        20
    zanjie1999  
    OP
       2024-10-10 10:56:45 +08:00
    做了一下 Windows 和 Linux(x11)的支持,可以快速在局域网进行无需客户端的屏幕镜像,比如说在开会的时候将屏幕画面镜像到没有 hdmi 输入功能的大屏触摸一体机上
    arare
        21
    arare  
       2024-10-10 13:16:26 +08:00
    非常好,延迟可以接受
    bgo
        22
    bgo  
       2024-10-10 22:13:15 +08:00
    打卡
    wanpp
        23
    wanpp  
       2024-10-10 22:36:31 +08:00
    请问 op IMac 可以给 mbp 随航吗?
    zanjie1999
        24
    zanjie1999  
    OP
       2024-10-11 10:52:24 +08:00
    @wanpp
    mac 投 mac 可以直接在显示设置的无线显示器上选吧,我黑苹果用的 intel 网卡没法 airplay ,我没试过,但 iPhone 可以 airplay 到 mbp 上
    或者你直接用这个程序也行,反正显示端只要有个浏览器或者能打开 url 的视频播放器就行
    wanpp
        25
    wanpp  
       2024-10-11 13:16:56 +08:00
    @zanjie1999 #24 谢谢 op 的回复,我有空去试试。主要 mac 投 mac 只能用通用控制,同一套键鼠,但是系统还是各自独立的,我只想作为一个显示器用
    zanjie1999
        26
    zanjie1999  
    OP
       2024-10-12 17:10:14 +08:00
    适配了 Safari 和 Firefox ,并且增加了自动旋转,因为发现了 ios 上的 Safari 原来不支持横屏( 6s ios15 , 就像 ipad os 不支持纵向分屏一样奇怪)
    发现一个有意思的事情,mac 可以在 60hz 的视频流中实时复制显示的内容,并且只占用 100% cpu ,也就是一个核心
    beyondgamp
        27
    beyondgamp  
       2024-10-12 17:29:36 +08:00
    能拿 windows 笔记本做 mac 的副屏吗?
    zanjie1999
        28
    zanjie1999  
    OP
       2024-10-12 18:03:07 +08:00
    @beyondgamp 当然可以,有浏览器就行
    我感觉 Kindle 也可以,虽然那个浏览器内核很老
    laris
        29
    laris  
       2024-10-14 21:25:45 +08:00
    BetterDummy 用哪个?我看上游收费了,有几个 fork 项目
    不知道哪个 fork 项目支持自信的 macOS v15

    如果能把手机做副屏还是很实用
    zanjie1999
        30
    zanjie1999  
    OP
       2024-10-15 10:23:00 +08:00
    @laris 随便用一个,免费的功能就完全够用,或者自己插个 hdmi 诱骗器,我比较偏向于诱骗器,因为 BetterDummy 会影响待机,后续考虑自己实现一下虚拟显示器的事情,不过目前没有任何头绪,想做很久了,现在这个屏幕采集的方法还是写的那天晚上突然想到的,这程序就是这样弄了一晚写出来的
    yangyp2
        31
    yangyp2  
       200 天前
    测试了下 mac 自带的屏幕镜像(mac mini m4,雷电 4 连接到 imac 24,4K 镜像),手机拍摄延迟秒表大概在四十多毫秒,感觉就像 60 刷新率切换到 30 刷新率,用这个项目本地起服务,本地浏览器打开大概在 100 多,期待后续优化,(udp)会不会改善,询问 gpt,Http 的延迟挺大的
    zanjie1999
        32
    zanjie1999  
    OP
       28 天前
    @yangyp2 超强的兼容性与极致的性能不可兼得(比如能支持 kindle 自带浏览器,或是 mjpg 模式能兼容上古 ie),目前最大的延迟在于 mac 的屏幕采集,ffmpeg 调用的也是系统的屏幕采集 api ,分辨率越大,采集速度越慢,延迟也越高,压缩和传输到是挺快的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     968 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 22:45 PVG 06:45 LAX 14:45 JFK 17:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86