Nickelodeon, iOS 后台播放 Youtube 的 App

花了近一个半月时间做了一个 iOS 上可以后台播放 Youtube 的 App。开始做是因为 Youtube 上发现了喜欢的歌手的演唱会,但是 Youtube 却不让后台播放,用个网页播放也是各种不方便。

初期版本包括后台和离线(下载)播放,其他的功能以后看精力在加吧,现在想到的可能就是 chromecast 和 airdrop 分享,其他的就不打算做了,毕竟是一个无法上架的 app,不想耗费太多的精力。


下面是一点技术细节,算是个总结。

项目的核心是基于 youtube-dl 做的,理论上该库支持的视频网站都可以解析。只是由于服务器部署在纽约,中国绝大部分资源并不能访问,虽然做个方向代理就可以绕过去了,但是由于需求不强烈,所以就不做了。

  1. 服务器

是用的 flask uwsgi nginx 套路三联,因为此博客已经是 nginx serve 的了,所以加了一个子域名 (nickelodeon.camelcc.com) proxy 给 flask 用来给客户端提供解析服务。

  1. UI - Material Components

客户端界面是想套用 Material Design ,使用 material-components-ios 作为实现一些基本组件。坑就是这个库的完成度还不是很高,有的地方不太好用,还有些细节没有打磨到精致。最大的坑是我感觉此 repo 随时会被 deprecate。

  1. Realm

使用 Realm 实现本地数据库,本来想用 firebase 的,但是 firebase 不是本地的。Realm 似乎没有我想象中的好用。最大的坑是 Realm 的 notification 需要关联一个 realm 实例,这样的实现使得代码不太容易解耦合。而且有 bug? ,如果短期不停的进行 write transaction ,update 事件到达以前,数据就已经是最新的了,不知道是否是 by design ,如果是的话,这个也算个坑把,更新列表的时候,逻辑会异常的复杂。

  1. 为什么自己实现 player

主要是因为以前写了一个 player ,但是没有做出最终 app 来,这次算是把之前的代码写完。同时想以后添加 airplay 和 chromecase 功能。