fix(plex): support no-burn transcode subtitles

This commit is contained in:
edde746
2026-05-20 17:21:31 +02:00
parent 2b167a60f5
commit c93a266722
34 changed files with 1103 additions and 192 deletions
+27 -1
View File
@@ -46,6 +46,25 @@ extension _VideoPlayerBuildMethods on VideoPlayerScreenState {
});
}
int? _selectedSourceSubtitleStreamId(List<MediaSubtitleTrack> tracks) {
if (tracks.isEmpty) return null;
for (final track in tracks) {
if (track.selected) return track.id;
}
return 0;
}
List<MediaSubtitleTrack> _sourceSubtitleTracksForControls() {
final tracks = _currentMediaInfo?.subtitleTracks ?? const <MediaSubtitleTrack>[];
if (!_isTranscoding) return tracks;
return tracks
.where((track) {
final hasKey = track.key != null && track.key!.isNotEmpty;
return hasKey || CodecUtils.isTextSubtitleCodec(track.codec);
})
.toList(growable: false);
}
Widget _buildLoadingSpinner() {
return const Scaffold(
backgroundColor: Colors.black,
@@ -201,6 +220,9 @@ extension _VideoPlayerBuildMethods on VideoPlayerScreenState {
onPrevious = (canRestartOrPrevious && _canNavigateEpisodes()) ? _restartOrPlayPrevious : null;
}
final sourceAudioTracks = _currentMediaInfo?.audioTracks ?? const <MediaAudioTrack>[];
final sourceSubtitleTracks = _sourceSubtitleTracksForControls();
return Video(
player: player!,
controls: (context) => plexVideoControlsBuilder(
@@ -215,8 +237,11 @@ extension _VideoPlayerBuildMethods on VideoPlayerScreenState {
serverSupportsTranscoding: _serverSupportsTranscoding,
isTranscoding: _isTranscoding,
isOfflinePlayback: _isOfflinePlayback,
sourceAudioTracks: _currentMediaInfo?.audioTracks ?? const [],
sourceAudioTracks: sourceAudioTracks,
selectedAudioStreamId: _selectedAudioStreamId,
sourceSubtitleTracks: sourceSubtitleTracks,
selectedSubtitleStreamId: _selectedSourceSubtitleStreamId(sourceSubtitleTracks),
sourcePartId: _currentMediaInfo?.partId,
onTogglePIPMode: _togglePIPMode,
boxFitMode: _videoFilterManager?.boxFitMode ?? 0,
onCycleBoxFitMode: _cycleBoxFitMode,
@@ -225,6 +250,7 @@ extension _VideoPlayerBuildMethods on VideoPlayerScreenState {
onAudioTrackChanged: _onAudioTrackChanged,
onSubtitleTrackChanged: _onSubtitleTrackChanged,
onSecondarySubtitleTrackChanged: _onSecondarySubtitleTrackChanged,
onSeekRequested: _seekPlayback,
onSeekCompleted: _notifyWatchTogetherSeek,
onBack: _handleBackButton,
onReachedEnd: ({skipAutoPlayCountdown = false}) =>