问题

目前大多数投屏的技术方案(包括airplay,DLNA,chromecast,miracast等)有一个共同的特点就是基于局域网的设备发现。这个特点明显的好处就是完全不依赖于internet,不需要连接外网就能正常工作。

但随着时代的发展,1.越来越多的设备可以上网(参见物联网的定义 IoT:Internet of Thing),2.绝大多数的视频都来自网络。基于以上两点 “不依赖internet” 带来的好处并不明显。但带来的缺点去越来越突出:

  • 设备配对操作复杂:airplay、DLNA、chromecast需要在同一局域网内并且用专门的硬件和客户端软件才能操作成功。miracast更需要连接wifi热点。
  • 私有协议互不兼容:airplay只能用于apple生态系统,chromecast需要注册成为google的开发者,开发和调试程序都需要通过google。
  • 可扩展性差:airplay的字幕一直不能自定义,播放进度条永远挡住字幕,这些都没发由开发者自己定义。
  • 交互逻辑陈旧:例如airplay依然是扩展屏幕的概念,部分ipad app airplay到itv时,ipad的app竟然必须保持开启且常亮。难道不能同时用ipad干点儿别的吗?
  • 稳定性和兼容性差:airplay是所有方案中最稳定的,但也经常出错。

方案

基于互联网的投屏方案

基于互联网的投屏方案

这个方案的特点是:

  1. 多了一个云端的server,不再基于设备发现。不再需要设备配对的过程,也不强制在同一个局域网内。
  2. 采用PUB/SUB的模型,解除部分耦合、简单稳定且易于理解。

备注

  1. chromecast也是有中央服务器的,但是它依然机遇设备发现。这就导致了:1. 将chromecast插在酒店电视上,但酒店的局域网时不互通的导致chromecast没法用。2. youtube用chromecast播放必须安装一个chrome插件。……
  2. airplay和其他的方案在播放远程视频时也是传输的URL。但airplay还需要在客户端显示视频的进度条和下载速度等信息,这可能导致很多同步的错误。
  3. airply和chromecast的应用场景比这个方案的应用场景要宏大的多(mirror功能)。本方案只想解决最基础和常用的功能。(mirror功能的延迟和画质真的是惨不忍睹呀)