在一切都讲究订阅制的当下,我偏偏想自己折腾一款“看片自由”的播放器。
原因很简单:网上的免费公开源确实多,但像夸克这类开源播放器基本是“抓到什么就播什么”,没有做源调度或缓存优化。晚上 prime time 一到,播放就像买彩票——中一次清晰流畅都算运气好。于是,这篇文章算是一个真实的折腾复盘,看看我如何把零散资源拼成一个能在手机上稳定播放的 LibreTV。
情景:资源多≠体验好
那些公开接口就像海边的贝壳,随便捡。问题是:
- 站点格式各不相同,播放器只能一个个“手动换源”;
- 夜间同时在线的人太多,服务器直接被压趴;
- 用户只想“点开就播”,却被迫做半个采集工程师。
你是经常卡在“能找到资源但播不了”,还是“播放器太多反而不知道用哪个”?欢迎留言吐槽。
任务:手机上实现“看片自由”
我给自己设了三个小目标:
① 把这些公开源聚在一个 App 里,尽量免配置;
② 晚上拥堵时能自动换到还能播的源;
③ 搜索和切换要足够顺滑,让折腾党愿意留下来继续“白嫖”。
行动:先解决“慢、卡、乱”
-
并发搜索,谁先返回谁露脸
在VideoRepository写了一个searchVideosStreaming,用channelFlow + async同时向多个源发请求。只要有一个源先有结果,就推给 SearchActivity,避免“等最慢的那一个”。ViewModel 这边也改成流式处理,首批有结果后再写入搜索历史,避免空记录。 -
小交互也要爽
SearchActivity 里就算只命中一个源,也照样显示来源列表、让用户点着切剧集;按键状态、空态提示、加载条都跟多源情况统一体验。
MainActivity 的电影/电视剧标签改成加粗 + 下划线,没有厚重背景,搭配子分类自动收起,看起来更轻。 -
砍掉历史包袱
扫了一轮资源引用,删了 40 多个完全没用到的 drawable,以及没用的模板测试和空壳 Fragment,包体和 IDE 提示都清爽许多。
提问 2|如果可以选择,你更想要“功能全,但偶尔卡顿”还是“功能少,但特别稳”的播放器?
结果:能播、能忍、能继续折腾
- 搜索体验快了:通常 1–2 个源一返回就能看到结果,用户不必盯着 loading 发呆。
- 夜间不那么怕:某个源抽风,UI 还能提示“其他源加载中”,起码心理有底。
- 包体小了:干掉的资源不止省空间,也让后续维护简单。
- 夸克式“裸资源”虽然也能播,但没做调度优化还是容易卡;LibreTV 至少让我看到“原来免费资源也能被好好使用”。
如果是你掌舵下一版,会优先多接几个源,还是做更聪明的推荐/缓存?
写给同样想折腾的人
- 别押注单一源:哪怕只为自己用,数据层也要设计好并发和降级,UI 才不用天天返工。
- 保留可玩性:喜欢折腾的用户宁愿多点几下,也希望手上有“瑞士军刀”,别把所有入口封死。
- 定期体检:老旧 drawable、测试模板和配置文件,能删就删,不要让未来的你背锅。
最后,如果你也在追求“免费看剧自由”,欢迎在评论区分享接口、换坑经验,或者一起想想下一个可折腾的点。免费的资源很多,但让它们真正好用,才是最有趣的地方。