gitbobobo / StreamMusic

支持 Android、iOS、macOS、Windows 平台的 Subsonic/Navidrome/Jellyfin/Emby/AudioStation 客户端。
https://music.aqzscn.cn/
912 stars 33 forks source link

切换歌曲时概率性无法播放 #596

Open Rirmach opened 1 month ago

Rirmach commented 1 month ago

Describe the bug (BUG 描述,多条问题请分别建立 issue) 移动网络环境下,播放列表中的歌曲时,存在概率性的停止播放问题。表现在播放界面中则为当前时间和音乐总长度均为0,播放按钮为正在播放的状态。有时点击两次播放按钮可继续播放,或等待数十秒至数分钟不等的时间可继续播放。

To Reproduce (复现步骤,复现问题是处理问题的必要条件) Steps to reproduce the behavior:

  1. 将音乐加入播放列表并播放音乐
  2. 为加快问题复现速度,可拖动进度条至音乐末尾,等待自动切换至下一首
  3. 重复若干次,可能遇到问题

Expected behavior (期望行为) 每次音乐切换不存在概率性的停止播放问题

Screenshots (截图)

INFO 💡 当前版本:1.3.1,构建次数:2090
INFO 15:40:26.739 (+0:00:00.017630)
INFO 💡 数据库位置:/data/user/0/cn.aqzscn.stream_music/app_flutter/stream_music.db
INFO 15:40:26.742 (+0:00:00.021618)
INFO 💡 数据库版本:20
INFO 15:40:26.746 (+0:00:00.024826)
INFO 💡 TV 模式:false
INFO 15:40:26.746 (+0:00:00.025306)
INFO 💡 当前网络连接类型:移动网络
INFO 15:40:26.746 (+0:00:00.025313)
INFO 💡 检查线路中...
INFO 15:40:26.828 (+0:00:00.106858)
INFO 💡 歌曲占用空间: 654.54 MB,元数据占用空间: 86.35 MB,系统占用空间: 719.53 KB
INFO 15:40:26.832 (+0:00:00.111297)
INFO 💡 应用初始化完毕
INFO 15:40:27.174 (+0:00:00.453111)
INFO 💡 最新版本: 1.3.1
INFO 15:40:27.436 (+0:00:00.714975)
INFO 💡 上次播放队列歌曲数量:500
INFO 15:40:27.436 (+0:00:00.715335)
INFO 💡 播放列表恢复完成
INFO 15:40:27.451 (+0:00:00.730169)
INFO 💡 代理服务已启动,端口号: 33235
WARNING 15:40:27.576 (+0:00:00.855457)
WARNING ⚠️ 当前为移动网络,跳过自动下载
INFO 15:40:27.823 (+0:00:01.101832)
INFO 💡 服务器状态同步完成
INFO 15:40:35.474 (+0:00:08.752895)
INFO 💡 歌曲占用空间: 653.42 MB,元数据占用空间: 86.55 MB,系统占用空间: 724.25 KB
INFO 15:40:36.297 (+0:00:09.576562)
INFO 💡 相同的媒体资源,切换播放状态
INFO 15:40:36.405 (+0:00:09.684011)
INFO 💡 [player]开始播放
INFO 15:40:38.291 (+0:00:11.569744)
INFO 💡 [player]跳转至:0:05:20.989000
INFO 15:40:39.205 (+0:00:12.484401)
INFO 💡 [player]跳转至:0:05:45.626000
INFO 15:40:53.470 (+0:00:26.749392)
INFO 💡 切换到下一首歌曲
INFO 15:40:59.845 (+0:00:33.124445)
INFO 💡 跳转到指定位置:0:02:10.745000
INFO 15:40:59.845 (+0:00:33.124481)
INFO 💡 [player]跳转至:0:02:10.745000
INFO 15:41:06.110 (+0:00:39.389375)
INFO 💡 跳转到指定位置:0:02:26.998000
INFO 15:41:06.110 (+0:00:39.389408)
INFO 💡 [player]跳转至:0:02:26.998000
INFO 15:41:10.620 (+0:00:43.899399)
INFO 💡 切换到下一首歌曲
INFO 15:41:39.285 (+0:01:12.563715)
INFO 💡 切换到下一首歌曲
INFO 15:41:39.285 (+0:01:12.563756)
INFO 💡 切换到下一首歌曲
INFO 15:41:46.624 (+0:01:19.902681)
INFO 💡 跳转到指定位置:0:04:34.633000
INFO 15:41:46.624 (+0:01:19.902714)
INFO 💡 [player]跳转至:0:04:34.633000
INFO 15:41:52.131 (+0:01:25.409698)
INFO 💡 切换到下一首歌曲
INFO 15:42:48.515 (+0:02:21.793911)
INFO 💡 [player]跳转至:0:04:19.348000
INFO 15:43:18.803 (+0:02:52.082207)
INFO 💡 切换到下一首歌曲
INFO 15:45:04.193 (+0:04:37.472547)
INFO 💡 [player]跳转至:0:05:13.295000
INFO 15:45:22.953 (+0:04:56.232390)
INFO 💡 切换到下一首歌曲
INFO 15:45:28.027 (+0:05:01.306139)
INFO 💡 切换播放模式:PlayMode.shuffle
INFO 15:45:29.605 (+0:05:02.884387)
INFO 💡 [player]暂停播放
INFO 15:45:30.117 (+0:05:03.396416)
INFO 💡 切换到指定索引:87
INFO 15:45:35.809 (+0:05:09.087823)
INFO 💡 歌曲占用空间: 715.53 MB,元数据占用空间: 88.29 MB,系统占用空间: 730.18 KB
INFO 15:46:00.082 (+0:05:33.361462)
INFO 💡 [player]跳转至:0:03:20.084000
INFO 15:46:10.597 (+0:05:43.876163)
INFO 💡 切换到下一首歌曲
INFO 15:46:13.993 (+0:05:47.272554)
INFO 💡 切换到下一首歌曲
ERROR 15:46:14.520 (+0:05:47.799256)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:46:26.157 (+0:05:59.436360)
INFO 💡 [player]跳转至:0:04:23.890000
INFO 15:46:29.915 (+0:06:03.194011)
INFO 💡 切换到下一首歌曲
INFO 15:46:33.043 (+0:06:06.322284)
INFO 💡 [player]跳转至:0:04:00.736000
INFO 15:46:38.578 (+0:06:11.856950)
INFO 💡 切换到下一首歌曲
INFO 15:46:40.219 (+0:06:13.497743)
INFO 💡 [player]跳转至:0:02:55.128000
INFO 15:46:50.234 (+0:06:23.513390)
INFO 💡 切换到下一首歌曲
INFO 15:46:52.113 (+0:06:25.392061)
INFO 💡 [player]跳转至:0:03:40.855000
INFO 15:47:02.624 (+0:06:35.902937)
INFO 💡 切换到下一首歌曲
INFO 15:47:43.704 (+0:07:16.983402)
INFO 💡 切换到下一首歌曲
INFO 15:47:46.423 (+0:07:19.701686)
INFO 💡 [player]跳转至:0:02:24.674000
INFO 15:47:48.439 (+0:07:21.718405)
INFO 💡 切换到下一首歌曲
ERROR 15:47:48.448 (+0:07:21.727249)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:48:20.728 (+0:07:54.007558)
INFO 💡 [player]跳转至:0:02:30.952000
INFO 15:48:24.989 (+0:07:58.268319)
INFO 💡 切换到下一首歌曲
INFO 15:48:26.838 (+0:08:00.116920)
INFO 💡 [player]跳转至:0:04:25.585000
INFO 15:48:39.089 (+0:08:12.367811)
INFO 💡 切换到下一首歌曲
INFO 15:48:41.523 (+0:08:14.802429)
INFO 💡 [player]跳转至:0:05:06.245000
INFO 15:48:55.786 (+0:08:29.065077)
INFO 💡 切换到下一首歌曲
INFO 15:48:59.455 (+0:08:32.733884)
INFO 💡 [player]跳转至:0:00:24.032000
INFO 15:49:00.464 (+0:08:33.742807)
INFO 💡 切换到下一首歌曲
ERROR 15:49:00.468 (+0:08:33.747539)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:49:38.488 (+0:09:11.766891)
INFO 💡 [player]跳转至:0:00:00.000000
INFO 15:49:39.551 (+0:09:12.830313)
INFO 💡 [player]跳转至:0:02:09.116000
INFO 15:50:11.909 (+0:09:45.188412)
INFO 💡 [player]跳转至:0:04:11.199000
INFO 15:50:17.922 (+0:09:51.200762)
INFO 💡 切换到下一首歌曲
INFO 15:50:22.123 (+0:09:55.401845)
INFO 💡 切换到下一首歌曲
ERROR 15:50:22.662 (+0:09:55.941576)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:50:36.200 (+0:10:09.479199)
INFO 💡 歌曲占用空间: 825.79 MB,元数据占用空间: 89.50 MB,系统占用空间: 741.08 KB
INFO 15:50:40.697 (+0:10:13.975882)
INFO 💡 [player]跳转至:0:03:43.388000
INFO 15:50:46.957 (+0:10:20.236292)
INFO 💡 切换到下一首歌曲
INFO 15:51:07.674 (+0:10:40.952634)
INFO 💡 [player]暂停播放
INFO 15:52:18.398 (+0:11:51.676806)
INFO 💡 [player]开始播放
INFO 15:52:19.105 (+0:11:52.384212)
INFO 💡 [player]跳转至:0:03:17.578000
INFO 15:52:22.618 (+0:11:55.896890)
INFO 💡 切换到下一首歌曲
INFO 15:52:25.207 (+0:11:58.486574)
INFO 💡 [player]跳转至:0:04:26.421000
INFO 15:52:30.729 (+0:12:04.008341)
INFO 💡 切换到下一首歌曲
ERROR 15:52:30.754 (+0:12:04.033510)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:52:32.037 (+0:12:05.316188)
INFO 💡 [player]跳转至:0:00:00.000000
INFO 15:52:37.649 (+0:12:10.928307)
INFO 💡 [player]跳转至:0:00:00.000000
INFO 15:52:56.303 (+0:12:29.582114)
INFO 💡 [player]跳转至:0:01:56.942000
INFO 15:52:59.547 (+0:12:32.825641)
INFO 💡 切换到下一首歌曲
ERROR 15:53:00.075 (+0:12:33.354117)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:53:56.650 (+0:13:29.929060)
INFO 💡 [player]跳转至:0:05:53.906000
INFO 15:54:09.168 (+0:13:42.447160)
INFO 💡 切换到下一首歌曲
INFO 15:54:12.492 (+0:13:45.771552)
INFO 💡 [player]跳转至:0:02:21.923000
INFO 15:54:20.006 (+0:13:53.285143)
INFO 💡 切换到下一首歌曲
ERROR 15:54:20.018 (+0:13:53.296656)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.
INFO 15:54:26.130 (+0:13:59.408926)
INFO 💡 切换到下一首歌曲
ERROR 15:54:26.654 (+0:13:59.932939)
ERROR ⛔ 下载歌曲失败:DioException [request cancelled]: The request was manually cancelled by the user.

Platform and Device Info (操作系统及设备信息)

Music Server Type (音乐服务器类型) Navidrome 0.53.2

Additional context (额外信息) 目前连接方式为 IPv6 直连家宽,结合 log 中频繁的 DioException [request cancelled],推测可能原因是移动网络长连接限制。如可确认为该原因,建议客户端同服务器的连接支持 HTTP3(目前抓包发现并未支持),或在当前播放的音乐缓存完毕且无需通信的情况下,后台定期释放并重新建立连接。

gitbobobo commented 1 month ago

cancelled by the user 的报错是你切歌动作太快,软件的预缓存下一曲还未完成而被取消导致的。

日志中的其他信息则不足以查明原因。

据我所知 flutter 的 HTTP 客户端是不支持 HTTP3 的,不过目前音流正在逐步替换 APP 内的网络请求至兼容性更好的 HTTP 客户端,有可能解决此问题。