修复 YouTube Music 歌曲在非 YouTube 服务器激活时播放失败

问题

切换到 Subsonic/Jellyfin/Plex 服务器后, 播放收藏夹/最近播放里的 YouTube Music 歌曲会失败, 日志里反复出现:

{"message":"Failed to find specified track","name":"TrackNotFound","statusCode":404}

原因

YouTube Music 后端从不给歌曲打 serverId 标签。_serverTypeForExtrasMediaItemBuilder._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

Merge request reports

Loading