937bcdd63d2e3dc29fa4298325a7d474d45233a1
实测(公网链路,自然播完 -> 自动下一首)暴露两个新问题: 1. 看门狗在 buffering 抖动时永远不触发 原实现每次 buffering=true 都重置 30s 计时器,而弱网下它会 true/false 每 2~5s 抖一次,于是计时器一直被重置,卡死 60s+ 也不会自愈。 改为记录"最近一次缓冲时间",用「进度 30s 未推进 + 20s 内发生过缓冲」 两个条件判定,暂停时不会误触发。 2. 元数据抓取在起播瞬间抢带宽 新歌 open 后 mpv 还在持续填缓冲,此时插入 2MB 标签下载会把缓冲打回 0。 实测下一首因此要等 60s+。 改为等播放真正稳定(进度 >= 5s 且连续 2s 不在 buffering,最多等 30s) 再抓元数据;等不到就跳过本次(下次播放再试),优先保证出声。 验证:公网 + 移动数据下切歌,next 发起后 2ms 即 open; 未稳定时日志出现"播放未稳定,跳过本次元数据抓取",不再有 2MB 下载与播放抢带宽。
清听 QingTing
让远程音乐,像本地音乐一样可靠。
清听是一个面向 Android 的 WebDAV 音乐播放器。
它解决的事情很简单:
让存储在 WebDAV 服务器上的音频文件,获得稳定、连续、可控的本地级播放体验。
✨ 能力
- WebDAV 流式播放,无需下载
- 后台播放,退出应用不停
- 通知中心、锁屏、耳机控制
- 元数据读取与 SQLite 缓存
- 通知栏封面图
🚀 快速开始
# 克隆
git clone https://your-repo/qingting.git
cd qingting
# 获取依赖
flutter pub get
# 运行
flutter run
详细步骤:Getting Started →
📖 文档
- 整体架构 —— 系统怎么组织的
- 播放链路 —— 一首歌从点击到喇叭
- 元数据 —— 歌曲信息怎么被认识
- Android 集成 —— 怎么成为 Android 播放器
- 存储策略 —— 远程与本地如何共存
- 设计决策 —— 为什么选了这些方案
最好的播放器,是当你开始听歌之后,就再也感觉不到它技术细节的那一个。
Languages
Dart
96.7%
PowerShell
2.1%
Kotlin
1.2%