修复 YouTube Music 歌曲在非 YouTube 服务器激活时播放失败
问题
切换到 Subsonic/Jellyfin/Plex 服务器后, 播放收藏夹/最近播放里的 YouTube Music 歌曲会失败, 日志里反复出现:
{"message":"Failed to find specified track","name":"TrackNotFound","statusCode":404}原因
YouTube Music 后端从不给歌曲打 serverId 标签。_serverTypeForExtras 和 MediaItemBuilder._inferBackendTypeFromServer 在缺少 serverId 时会回退到当前激活的服务器类型。于是当激活服务器是 Subsonic 时, YouTube 视频 ID 被当成 Subsonic track ID 拼进 rest/stream.view?id=... 请求, 远端查不到就返回 404。
修复
audio_handler._serverTypeForExtras: 只在歌曲显式携带serverId时才解析后端类型, 否则返回null(走 YouTube Music 路径)MediaItemBuilder._inferBackendTypeFromServer: 只从显式serverId推断backendType, 不再回退到激活服务器
这样未打标签的歌曲一律按 YouTube Music 处理, 不受当前激活服务器影响。已经带 serverId 的 Subsonic/Jellyfin/Plex 歌曲不受影响。
验证
flutter analyze lib/services/audio_handler.dart lib/models/media_Item_builder.dart无问题
Summary by CodeRabbit
- Bug Fixes
- Improved desktop playback reliability when starting songs or switching tracks.
- Fixed playback interruptions caused by timing issues during media loading.
- Prevented untagged song identifiers from being incorrectly routed through the currently active server.
- Unspecified song identifiers now retain YouTube Music behavior by default.
Edited by ien free