Simple Live 完整指南:一个 App 打通四大直播平台的 Flutter 直播聚合工具
【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live
手机里躺着四五个直播 App,想看哪个就得翻一次桌面,切来切去还各登各的号。Simple Live 的思路很直接:一个应用同时接入哔哩哔哩、斗鱼、虎牙、抖音,用同一套界面选台、看播、刷弹幕,把碎片化的观看体验收拢到一个 Flutter 跨平台直播工具里。
📺 它解决什么问题:把"换 App"变成"换平台标签"
看直播这件事,卡点从来不是播放器,而是入口太散。Simple Live 把四个平台的直播房间装进同一个列表,你在首页下拉刷新看到的可能是 B 站,往上滑两屏又轮到斗鱼,主播、封面、在线人数全部对齐成卡片样式。它支持的直播渠道包括哔哩哔哩直播、斗鱼直播、虎牙直播、抖音直播,客户端则覆盖 Android、iOS,以及处于 Beta 阶段的 Windows、macOS、Linux 和 Android TV。
也就是说,同一份代码既能跑在手机里,也能推到电视上——客厅的遥控器场景,项目专门给了 TV 端客户端来承接。
跑起来之前,先确认本地装了 Flutter(项目按 3.38 环境开发),剩下的步骤只有四行命令。
🚀 三步跑起项目:克隆、装依赖、选入口
把仓库拉到本地,装好 Dart 包,就能启动:
git clone https://gitcode.com/GitHub_Trending/da/dart_simple_live cd dart_simple_live/simple_live_app flutter pub get flutter run仓库里其实藏了四个可运行的入口,各管一段场景:
dart_simple_live/ ├── simple_live_core/ # 核心库:各平台接口与弹幕协议 ├── simple_live_app/ # 手机/电脑端客户端(功能最全) ├── simple_live_tv_app/ # Android TV 专用客户端 └── simple_live_console/ # 命令行版本,只跑核心库日常使用建议直接进simple_live_app;想在电视上看,切到simple_live_tv_app;而simple_live_console适合想单测某个平台接口、不关心 UI 的开发者。
跑通之后,接下来聊几个真实的看播场景,以及每个场景下应用替你做了什么。
🎯 三种典型看播场景,体验各有什么细节
按平台刷推荐。首页按平台分页,每个平台各自拉取推荐房间,滚动加载、下拉刷新是标配;想看别的分类,分类页把各平台的子类目并列出来,点进去就是对应房间列表。
关注主播、回来接着看。把感兴趣的主播加进关注列表后,关注页会显示谁在开播;你进过的房间也会记进观看历史,下次不用重新搜。数据落在本地 Hive 存储里,重启不丢。
换台设备接着用。关注列表和观看记录可以跨设备同步,两条路线任选:局域网内扫码互传,或者对接自己的 WebDAV 网盘做云端备份。同步相关界面和逻辑集中在 simple_live_app/lib/modules/sync/ 里,本地同步走局域网协议,远程同步走 WebDAV 上传下载,选哪种取决于你有没有自己的网盘空间。
界面本身支持深浅两套主题,深色适合关灯看播,浅色适合白天,跟随系统或手动指定都行——细节不炫技,够用就好。
看完了"用"的部分,下面钻进代码里,看看这些能力底下是怎么搭的。
💬 弹幕:同一块屏幕,四套私有语言
弹幕是直播的灵魂,也是最难跨平台的零件。四个平台的弹幕通道协议互不相同:有的走 WebSocket 二进制帧,有的要处理加密和签名,抖音甚至直接带了一套 protobuf 定义。应用要做的,是把四套方言翻译成普通话。
simple_live_core/lib/src/danmaku/ 下每个平台一个实现文件,对外统一收敛成同一个接口——上层播放器只关心"来了消息",不关心消息是谁、以什么格式发来的。这套做法也让屏蔽词、弹幕开关这些功能可以只做一遍,四个平台同时生效。
协议统一之后,剩下的就是架构层面的事了,下一节看整体分层。
🔍 源码速览:一个基类撑起所有平台
核心逻辑全部沉在 simple_live_core/lib/src/ 里,分层很克制:interface/定契约,model/放数据类,每个平台一个*_site.dart做具体实现。所有平台实现都挂在一个LiveSite基类上,看它的默认方法就知道一个平台要提供哪些能力:
class LiveSite { String id = ""; String name = ""; Future<List<LiveCategory>> getCategores(); // 读取平台分类 Future<LiveCategoryResult> getRecommendRooms({int page}); // 拉取推荐房间 Future<LiveRoomDetail> getRoomDetail({required String roomId}); // 房间详情 Future<List<LivePlayQuality>> getPlayQualites(...); // 清晰度列表 Future<LivePlayUrl> getPlayUrls(...); // 解析播放地址 }注意这些方法都有空实现——新平台哪怕先只交一个"能播"的版本,应用也不会崩,缺的功能自然退化成空白页。基类把差异封装在默认行为里,是这套架构里最值得学的一手。
应用层则薄得多:GetX 管状态和路由,每个页面配一个 Controller,负责调核心库、喂数据给 UI。核心库甚至被独立打包,命令行版本直接依赖它运行,等于给核心库做了一重"无 UI 冒烟测试"。
理解了这套契约,给它加一个平台就不再是什么架构工程,按下面的顺序走就行。
🧩 想加一个新平台:照三步走
第一步,写平台实现。在simple_live_core/lib/src/下新建xxx_site.dart,继承LiveSite,按优先级补方法:先getRoomDetail和getPlayUrls保证能播,再补getRecommendRooms、getCategores让列表页可用,最后接弹幕。
第二步,注册进应用。在 simple_live_app/lib/app/sites.dart 的站点表里加一行:
static final Map<String, Site> allSites = { Constant.kBiliBili: Site( id: Constant.kBiliBili, name: "哔哩哔哩", liveSite: BiliBiliSite(), ), // 新平台按同样格式补一条 };第三步,放图标、过一遍 UI。把平台 logo 丢进assets/images/,然后在首页、分类、搜索几个页面各点一遍,确认新平台的卡片、详情页、弹幕都正常渲染。
顺序反过来也行——先通弹幕再接推荐,只要最终五个核心方法都能返回数据,应用侧几乎不用改动。
💡 上手前最后几条提醒
- 项目不提供预编译安装包,想尝鲜就按上面的步骤自己
flutter run编译,这也是 README 开头就声明的。 - 桌面端(Windows/macOS/Linux)和 TV 端目前是 Beta,建议以手机端为主力体验。
- 项目定位是学习交流用途,基于公开资料开发,没有逆向或破解成分;商业用途请勿使用。
- 依赖较多(播放器、WebView、画中画等),首次
pub get和网络慢的话,耐心等它把 media_kit 这类带本地库的包下完。
工具的价值,最终体现在你少开了几个 App。
如果"一个应用看遍四大平台"正是你要的,不妨把 Simple Live 跑起来,给仓库点个 Star 支持一下持续更新;想动手加平台的话,照着三步扩展指南试一个,你会发现这套接口契约比想象中好上手。
【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考