Просмотр исходного кода

fix(player): Jellyfin无法播放的问题

chendeben 7 месяцев назад
Родитель
Сommit
eca03cbd96

+ 1 - 1
entry/src/main/ets/common/network/JellyfinApi.ets

@@ -409,7 +409,7 @@ export class JellyfinApi {
     const auth = await this.ensureAuth(account);
     const baseUrl = this.buildBaseUrl(account);
     const apiKey = encodeURIComponent(auth.token);
-    return `${baseUrl}/Items/${encodeURIComponent(itemId)}/Download?api_key=${apiKey}`;
+    return `${baseUrl}/Audio/${encodeURIComponent(itemId)}/stream?api_key=${apiKey}`;
   }
 
   async buildPrimaryImageUrl(account: WebDavAccount, itemId: string, width: number = 600, height: number = 600): Promise<string> {

+ 3 - 3
entry/src/main/ets/view/LocalMusic.ets

@@ -13487,9 +13487,6 @@ export struct LocalMusic {
       this.mIjkMediaPlayer.setVolume(this.volume.toString(), this.volume.toString());
     }
 
-    //设置视频源
-    Logger.info(TAG, `IjkPlayer setDataSource url=${url}`);
-    this.mIjkMediaPlayer.setDataSource(url);
     // 构建规范的HTTP请求头(统一一次性设置,避免未带认证提前发起连接)
     const headers = new Map<string, string>();
     headers.set("User-Agent", "TTMusic-WebDAV/1.0");
@@ -13535,6 +13532,9 @@ export struct LocalMusic {
         Logger.error(`heanup 构建百度请求头失败: ${(error as Error).message}`);
       }
     }
+    //设置视频源(先准备好认证头,再设置数据源)
+    Logger.info(TAG, `IjkPlayer setDataSource url=${url}`);
+    this.mIjkMediaPlayer.setDataSource(url);
     this.mIjkMediaPlayer.setDataSourceHeader(headers);
     if (this.currentSong && isRemoteCloudType(this.currentSong.type) && !isBaiduType(this.currentSong.type)) {
       console.log(`heanup 为WebDAV播放设置IjkPlayer选项`);