@@ -13,6 +13,7 @@ import 'package:fladder/models/items/channel_model.dart';
1313import 'package:fladder/models/items/chapters_model.dart' ;
1414import 'package:fladder/models/items/episode_model.dart' ;
1515import 'package:fladder/models/items/item_shared_models.dart' ;
16+ import 'package:fladder/models/items/item_stream_model.dart' ;
1617import 'package:fladder/models/items/media_segments_model.dart' ;
1718import 'package:fladder/models/items/media_streams_model.dart' ;
1819import 'package:fladder/models/items/season_model.dart' ;
@@ -344,14 +345,17 @@ class PlaybackModelHelper {
344345 oldModel? .mediaStreams? .currentSubStream,
345346 newStreamModel? .subStreams,
346347 newStreamModel? .defaultSubStreamIndex);
348+ final actualItem = (item is ItemStreamModel && newStreamModel != null )
349+ ? item.copyWith (mediaStreams: newStreamModel)
350+ : item;
347351
348352 //Native player does not allow for loading external subtitles with transcoding
349353 final isNativePlayer =
350354 ref.read (videoPlayerSettingsProvider.select ((value) => value.wantedPlayer == PlayerOptions .nativePlayer));
351355 final isExternalSub = newStreamModel? .currentSubStream? .isExternal == true ;
352356
353357 final Response <PlaybackInfoResponse > response = await api.itemsItemIdPlaybackInfoPost (
354- itemId: item .id,
358+ itemId: actualItem .id,
355359 body: PlaybackInfoDto (
356360 startTimeTicks: startPosition? .toRuntimeTicks,
357361 audioStreamIndex: audioStreamIndex,
@@ -374,7 +378,11 @@ class PlaybackModelHelper {
374378 return null ;
375379 }
376380
377- final mediaSource = playbackInfo.mediaSources? [newStreamModel? .versionStreamIndex ?? 0 ];
381+ final requestedMediaSourceId = newStreamModel? .currentVersionStream? .id;
382+ final mediaSource = (requestedMediaSourceId != null )
383+ ? (playbackInfo.mediaSources? .firstWhereOrNull ((element) => element.id == requestedMediaSourceId) ??
384+ playbackInfo.mediaSources? .firstOrNull)
385+ : playbackInfo.mediaSources? [newStreamModel? .versionStreamIndex ?? 0 ];
378386
379387 if (mediaSource == null ) {
380388 return null ;
@@ -396,12 +404,13 @@ class PlaybackModelHelper {
396404
397405 if (type == PlaybackType .tv && mediaPath != null ) {
398406 final tvModel = TvPlaybackModel (
399- channel: item as ChannelModel ,
407+ channel: actualItem as ChannelModel ,
400408 isNativePlayerBackend: isNativePlayer,
401- item: item ,
409+ item: actualItem ,
402410 queue: libraryQueue,
403411 playbackInfo: playbackInfo,
404412 media: Media (url: mediaPath),
413+ mediaStreams: mediaStreamsWithUrls,
405414 );
406415 tvModel.startTracking (ref);
407416 return tvModel;
@@ -429,7 +438,7 @@ class PlaybackModelHelper {
429438 );
430439
431440 return DirectPlaybackModel (
432- item: item ,
441+ item: actualItem ,
433442 queue: libraryQueue,
434443 mediaSegments: mediaSegments? .body,
435444 chapters: chapters,
@@ -441,7 +450,7 @@ class PlaybackModelHelper {
441450 );
442451 } else if ((mediaSource.supportsTranscoding ?? false ) && mediaSource.transcodingUrl != null ) {
443452 return TranscodePlaybackModel (
444- item: item ,
453+ item: actualItem ,
445454 queue: libraryQueue,
446455 mediaSegments: mediaSegments? .body,
447456 chapters: chapters,
0 commit comments