
用 Dart 一套代码聚合四大直播平台3 个关键决策 3 个协议坑【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_liveSimple Live仓库名 dart_simple_live是一个基于 Flutter 的直播聚合工具虎牙、斗鱼、B站、抖音四个平台的房间信息、播放直链、实时弹幕用同一个核心库读出来不用各平台开各的网页也不用自己研究各家的私有协议。一图看懂四个入口、一个核心库这节用一张图讲清仓库里四个子工程的关系建立整体认知。图里最关键的是simple_live_coreapp、TV、控制台三个入口全部只依赖它四个平台的接口请求、签名、弹幕包差异全被封在各自的LiveSite实现类里。快速跑通从 clone 到看到直链、弹幕这节给你从拿到代码到看到效果的最短路径原理放到下一节。准备 Flutter 3.38 以上环境Dart SDK 3.10。克隆代码并先跑控制台验证核心库它不依赖手机和模拟器git clone https://gitcode.com/GitHub_Trending/da/dart_simple_live cd dart_simple_live/simple_live_console dart pub get dart run -i https://live.bilibili.com/1 # 房间信息清晰度播放直链 dart run -d https://live.bilibili.com/1 # 持续输出弹幕控制台能看到房间信息、弹幕滚动后说明核心库已经通了。手机或模拟器上跑完整应用进入simple_live_app目录执行flutter pub get flutter run。想跑电视端同样步骤进simple_live_tv_app目录即可。三个关键决策核心库跨平台怎么做的这节讲清三个当初差点选错的技术点都发生在simple_live_core层。统一 LiveSite 接口而不是各平台各写一套爬虫四个平台被收敛成同一套方法签名上层业务完全不感知当前在看虎牙还是 B 站。理由是平台差异只集中在怎么请求、怎么签名、怎么解弹幕包这三件事上接口统一后新增一个平台等于新增一个实现类app 一行代码都不用动。class LiveSite { String name ; LiveDanmaku getDanmaku(); // 核心逻辑各平台弹幕连接实现 FutureLiveRoomDetail getRoomDetail({required String roomId}); FutureLivePlayUrl getPlayUrls({required LiveRoomDetail detail, required LivePlayQuality quality}); // 核心逻辑解析播放直链 }完整接口定义在 simple_live_core/lib/src/interface/live_site.dart四个平台的对应实现在 simple_live_core/lib/src/ 下。播放器为什么用 MediaKit 而不用 VideoPlayer官方 VideoPlayer 对直播直链常用的 flv/m3u8 覆盖不全解码器和缓冲策略可调项少。MediaKit 底层是 ffmpeg核心库能解析出的直播流基本都能放还支持硬解和延迟控制播放端代码在 simple_live_app/lib/modules/live_room/player/。抖音签名为什么用 QuickJS 跑而不是自己实现抖音接口的校验参数由官方 JS 代码算出把算法翻译成 Dart 硬编码站点一更新就挂。项目用 dart_quickjs 内嵌 JS 引擎直接跑签名脚本算法更新只换脚本入口在 simple_live_core/lib/src/scripts/douyin_sign.dart。踩坑与对策三个协议坑最容易卡半天这节列三个高频坑每个按现象 → 原因 → 解法说。抖音弹幕当 JSON 解全是乱码。现象是 WebSocket 收到的消息体直接 jsonDecode 报错或出乱码。原因是抖音弹幕协议的数据包是 protobuf 二进制不是文本。解法是写好 .proto 后编译生成 Dart 代码项目里已经生成好了直接参考 simple_live_core/lib/src/danmaku/proto/ 目录下的 douyin.pb.dart。虎牙弹幕连接被服务端断连。现象是手动拼包发请求后立刻被断开。原因是虎牙用的是 Tars 二进制序列化协议包头结构和普通 HTTP JSON 完全不是一回事手写字节拼装极易错。解法是用项目内置的 simple_live_core/packages/tars_dart/ 子包它专门负责 Tars 包的拆包组包。播放链接放两三分钟就断流。现象是开始播放正常几分钟后画面卡死。原因是直播平台的直链按时间片签发都带有效期过期即失效。解法是断流后重新调用getPlayUrls拉一条新链接热替换app 的播放控制器里就是这个逻辑。能力边界现在能做什么、还做不到什么这节坦率列出当前的边界避免踩空。能做的四个平台的房间信息、分类、搜索、全清晰度直链读取四个平台的弹幕实时接收与展示Android、iOS 正式支持Windows、macOS、Linux 处于 BETA做不到的官方不提供 Release 安装包所有平台都需要自行编译iOS 端播放存在已知问题simple_live_app的 TODO 里标注着没有手表等穿戴形态适配也没有弹幕发送能力下一步跑通控制台的-i命令看到直链后把播放源换成自己的 URL 在 app 里验证 MediaKit 播放然后照着LiveDanmaku的写法接上你自己要看的平台弹幕协议每一步对应的参考代码都在仓库里。【免费下载链接】dart_simple_live简简单单的看直播项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考