Duet Display,是一款由前苹果工程师开发的 Mac → iOS 单向屏幕拓展应用,共有桌面版与移动版两个客户端。在这之前,笔者已经介绍过 Duet Display,今天想再进一步,聊聊它背后的技术。

在 上回的文章 发布之后,有读者评论说:「之前有很多类似功能的屏幕拓展应用,为何唯独 Duet Display 一问世就迅速走红?它何德何能?」

首先,Duet Display 颠覆了基于 Wi-Fi 的传统运作原理,改经 USB 数据线实现,虽然此前也有使用 USB 的类似应用,但二者的实现方式有本质的区别。其次,Duet Display 并非通过纯粹的「屏幕拓展」来实现,而是依靠 Mac 端的视频压缩技术,将当前画面传输到 iOS 端显示。这样做的优点在于,能有效避免无线局域网带来的 Lag(延迟)缺点是它需要设备拥有相对较强的性能,否则会出现类似卡顿、帧数不稳定的现象……

不管如何解释,以上这些不过是一面之词,若要真实还原 Duet Display 的运行原理,还得从最底层的技术说起。

PeerTalk,由瑞典技术人员 Rasmus Andersson 开发的一种可通过 USB 基座和 TCP 协议,实现 iOS / Mac 间通讯的 Cocoa(Objective-C)库,这是 Duet Display 实现「通过数据线输出视频」的核心技术,也是与同类应用在实现方式上最大的差别。和原始的设备通讯原理相比,PeerTalk 可以在 热插拔 状态下,实现自动断开和连接的效果(见视频),无需反复配置也不会影响到系统运行状态,并且由于无需顾虑网络环境方面的因素,所以相对来说更加稳定

【跳转播放视频】

相比基于 Wi-Fi 的同类应用,笔者的观点是:两者都有硬限制,一个是数据线,一个是无线局域网,非常明显,前者在大多数情况下远比后者来得更稳定。打个比喻,如果无线局域网的传输速度为音速,那么数据线不仅可以超音速,而且还能无视磁场干扰……哪个更值得选择应该不言而喻了吧?

不过有人表示,PeerTalk 其实是用了 iTunes / iOS 设备间进行同步的 usbmux 系统和只有通过逆向所得的私有 API,简而言之,就是意味着开发者用了「不符合规矩」的手段,才能实现这样的效果,所以理论上这样的应用是无法上架 iTunes Store 的。可是按现在的情况来看,如果苹果官方将来不会下架 Duet Display,那是不是意味着其他客户端也能钻这个空子了呢?目前笔者无法得知答案,但来自《OS X 高手进阶》系列图书的作者 @ibuick 王飞老师的一句忠告还是非常值得思考,笔者对此的理解是:凡是与 iTunes 技术相关的应用,如果它能与 iTunes 共存,那你就放心地用,否则的话,就建议你做好心理准备:要不将来它会被下架,要不就是被告上法庭,永久停止服务。

CocoaSplit,一种用于视频流媒体服务的技术,有网友通过它成功地实现了 YouTube 视频直播,而 Duet Display 的 Mac 客户端就用了 CocoaSplit,笔者猜测,这或许就是 Duet Display 支持多种分辨率和帧数选择的原因。(有网友认为,Duet Display 开发者可能违反了 CocoaSplit 的某条开源协议,但笔者觉得,这至少不会导致非常严重的后果)

可换个角度想,我认为手动调节分辨率和帧数不是很可靠。在老款 iPad 2 上测试,即使勾选了 60 帧模式,Duet Display 也无法完美达到「流畅」的效果,何谈 30 帧呢?那么在用新款 iPad Air 测试时,Retina 视网膜的显示效果很出众,但不知道为何开发者加入了「非 Retina」模式,因为有些人就提出了疑点:难道在小屏幕低分辨率的条件下,OS X 也能实现精细清晰的渲染吗?答案因人而异,但笔者不是非常认可「手动调节显示效果」这一做法,望开发者能加以改进。

GPUImage,一个由 Brad Larson 托管在 Github 上的基于 BSD 开源的 iOS 库,主要用于实现滤镜、摄像头实时滤镜等图像效果(很多「滤镜」软件都使用了这一技术),由于其处理效果是基于 GPU(图形处理器)而不是 CPU(中央处理器)的,所以一般情况下,它的处理性能更好。那么在 Duet Display 这款软件中,GPUImage 的作用发挥在了视频输出上,以便让 iOS 端的显示效果更好。


综上所述,其实 Duet Display 的强大是来自于多方面技术的整合,通过这位前苹果工程师之手,让它们摩擦融合,并最终诞生了这款让人感到意外的「屏幕拓展工具」,我认为在这位开发者身上,我们应该注意到的是他独创性的想法,而不是技术本身。开发者已经表示会在近月内完成对 Duet Display 的改善点击获得更多有趣的玩儿法),我也希望他能尽快解决目前一些比较严重的问题。说到问题,最后不妨再提下近期笔者刚整理过的反馈,各位「中枪者」请对号入座:

  • 2013 年前的 iOS 机型无法流畅控制 Mac 端画面,暂无法解决,只能等开发者升级。
  • 在部分 MacBook Air 机型上会发生卡死、黑屏、重启等现象,可通过完全删除解决。
  • 在已开启「减少透明度」的条件下,开启 Duet Display 并同时连接 iOS 设备后,会出现 Dock 栏自动恢复「完全透明度」状态。暂时只能通过重新设置解决。
  • 使用过程中,iOS 设备可能无法正常播放视频,重新连接即可。

▲ 本文部分内容借鉴自 Github 与 V2EX