Dart Simple Live完整指南:如何用Flutter 3步搭建多平台聚合直播应用
【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live
Dart Simple Live(Simple Live)是一个基于Flutter和Dart的聚合直播工具,统一支持虎牙、斗鱼、哔哩哔哩、抖音四个平台的播放、弹幕与多设备同步,可跑在手机、桌面和电视上。
📌 项目速写
- 定位:项目口号"简简单单的看直播"是最准确的描述,它不追求大而全,只把"找直播间、看直播、收弹幕"这条链路做扎实。
- 解决的问题:关注的主播分散在四个平台,原生App各看各的。这个项目用一套统一接口把四家数据收拢到一起,一个App切平台追更。
- 项目构成:主README 写明四个子项目——
simple_live_core核心库(各平台数据与弹幕)、simple_live_app手机/桌面客户端、simple_live_tv_appAndroid TV客户端、simple_live_console控制台工具。 - 核心依赖:核心库以 dio 做网络请求、web_socket_channel 走弹幕长连接、protobuf 解析抖音弹幕包,虎牙的Tars协议则用仓库内自带的
tars_dart包实现。
| 技术组件 | 版本 | 作用 |
|---|---|---|
| Flutter | 3.38 | 跨平台UI框架 |
| simple_live_core | 1.0.3 | 聚合直播核心库 |
| media_kit | ^1.2.2 | 视频播放引擎 |
| get | ^4.7.3 | 状态管理与路由 |
| canvas_danmaku | ^0.2.7 | 弹幕渲染 |
🚀 3步跑起来
1. 环境准备:安装 Flutter 3.38 SDK,这是 README 中指定的版本,装好命令行工具后flutter doctor确认设备可用。
2. 获取项目:
git clone https://gitcode.com/GitHub_Trending/da/dart_simple_live cd dart_simple_live/simple_live_app && flutter pub get3. 首次运行:连接手机或模拟器,在simple_live_app目录下直接flutter run即可进入首页。桌面平台在 README 里标注 BETA,建议先用移动端验证流程;不想构建完整客户端的话,可以先跑simple_live_console里的脚本确认核心库数据链路是否通。
🔍 核心能力逐个看
多平台统一数据接口
先解决"一个App怎么取四家数据"的问题。核心库接口 里定义了LiveSite基类,把每个平台的差异收拢成一组固定方法:
class LiveSite { Future<List<LiveCategory>> getCategores(); // 拉取分类 Future<LiveSearchRoomResult> searchRooms(String keyword); // 搜索直播间 Future<LiveRoomDetail> getRoomDetail({required String roomId}); Future<List<LivePlayQuality>> getPlayQualites({required LiveRoomDetail detail}); Future<LivePlayUrl> getPlayUrls({required LiveRoomDetail detail, required LivePlayQuality quality}); LiveDanmaku getDanmaku(); // 获取弹幕实例 }各平台实现类(BiliBiliSite、DouyinSite 等)只管"怎么调自己的接口",上层UI完全不需要感知当前在哪个平台。简单讲,新增一个平台就是再写一个实现类。配套的模型层(LiveRoomItem、LiveRoomDetail 等)把四家的返回数据归一化成同一套结构,客户端列表页因此可以四个平台混排展示。
弹幕协议处理方式
弹幕是这类工具里最磨人的部分,四家协议各不相同:B站走标准WebSocket,抖音弹幕是Protobuf包且请求需要签名,虎牙连播放地址都要通过Tars长连接协议去换CDN token,斗鱼则有自定义的心跳规则。核心库把这些差异全部封装在LiveDanmaku接口后面,对上层只暴露 onMessage、onReady、onClose 三个回调和统一的 start/stop/heartbeat 方法。
| 平台 | 弹幕通道 | 特殊处理 |
|---|---|---|
| 哔哩哔哩 | WebSocket | Cookie 携带 buvid 设备指纹 |
| 抖音 | WebSocket + Protobuf | 请求签名(内置JS引擎执行签名脚本) |
| 虎牙 | Tars 长连接 | CDN 播放地址换取 |
| 斗鱼 | 私有协议 | 心跳保活与消息解码 |
播放引擎与设备适配
App 层用 media_kit(底层是mpv)做播放,canvas_danmaku 把弹幕叠在画面上,播放器控制器 里还集成了屏幕常亮、横竖屏切换、画中画、音量调节这些看直播的高频操作,并允许在设置页里切换音频输出驱动。弹幕默认开启,可以整体隐藏,也有关键词屏蔽(弹幕护盾)功能;深色模式效果如下:
关注数据跨设备同步
"我的"页面下提供两条同步链路:局域网 SignalR 同步(两台设备扫二维码直连)和远端 WebDAV 同步(接入自己的 WebDAV 服务)。关注的主播、标签和观看历史存在本地 Hive 数据库中,同步本质上是把这份数据打包传到另一台设备再解包,不依赖任何中心化服务器。
⚠️ 实战中的几个关键点
- 没有现成安装包,只能自己编译:README 开头就声明不提供 Release 包,找不到下载链接很正常,直接
flutter build或flutter run自己出包。 - Flutter版本要对着装:项目指定 3.38,SDK 版本偏低时依赖解析容易失败,先升级工具链再跑 pub get,能省掉一堆莫名其妙的报错。
- 核心库是本地路径依赖:
simple_live_app通过path: ../simple_live_core引用核心库,核心库内部还依赖同目录的tars_dart包和一个 git 依赖 dart_quickjs。想拿核心库写自己的客户端,记得把路径改对,别漏了这几个隐式依赖。 - 登录态影响功能完整度:部分画质和平台请求在设置 Cookie 后更稳,B站内置了扫码登录,抖音源码注释里写明只要有 ttwid 这个Cookie字段就能拿主流画质,不用完整登录态。
- iOS播放有已知问题:App的README TODO 里挂着"iOS播放问题"和"全屏、非全屏弹幕样式分离",在iOS真机上遇到问题先对照已知清单排查,别急着怀疑自己的环境。
🎬 还能怎么玩
- 自建轻量客户端:核心库与UI完全解耦,拿它写电视盒子、车机或任意Flutter项目的直播模块,TV版就是现成样例。
- 终端弹幕监控:用 simple_live_console 直接在终端拉弹幕和直播状态,适合接着写自动化脚本。
- 接入新平台:实现一个 LiveSite 加一个 LiveDanmaku 子类,就能把新平台挂进整个App。
- TV+手机组合:TV版和手机版用同一套同步功能共享关注列表,客厅大屏追更。
整个项目的分层思路很清晰:核心库管数据,客户端管体验,声明也写明仅供学习交流。想上手的话,克隆仓库后在 simple_live_app 下跑一次 flutter run,再顺着 simple_live_core/lib/src/interface/ 把 LiveSite 接口读一遍,基本就摸清了整个项目的骨架。
【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考