From b7e12cb26ae7656a307226bfa4bd290ef099eda6 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Tue, 7 Apr 2026 01:30:39 +0530 Subject: [PATCH] fix: remove trailer data source layer leaking for normal playback --- .../PlatformPlaybackDataSourceFactory.android.kt | 12 ++++++++++-- .../app/features/player/PlayerEngine.android.kt | 6 +++++- .../PlatformPlaybackDataSourceFactory.android.kt | 5 ++++- .../details/components/TrailerPlayerPopup.kt | 1 + .../com/nuvio/app/features/player/PlayerEngine.kt | 1 + .../nuvio/app/features/player/PlayerEngine.ios.kt | 1 + 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/composeApp/src/androidFull/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt b/composeApp/src/androidFull/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt index e56c9c2c9..c5201af60 100644 --- a/composeApp/src/androidFull/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt +++ b/composeApp/src/androidFull/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt @@ -1,9 +1,17 @@ package com.nuvio.app.features.player import androidx.media3.datasource.DataSource +import androidx.media3.datasource.DefaultHttpDataSource import com.nuvio.app.features.trailer.YoutubeChunkedDataSourceFactory internal object PlatformPlaybackDataSourceFactory { - fun create(defaultRequestHeaders: Map): DataSource.Factory = - YoutubeChunkedDataSourceFactory(defaultRequestHeaders = defaultRequestHeaders) + fun create( + defaultRequestHeaders: Map, + useYoutubeChunkedPlayback: Boolean, + ): DataSource.Factory = + if (useYoutubeChunkedPlayback) { + YoutubeChunkedDataSourceFactory(defaultRequestHeaders = defaultRequestHeaders) + } else { + DefaultHttpDataSource.Factory().setDefaultRequestProperties(defaultRequestHeaders) + } } \ No newline at end of file diff --git a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt index 029dc9c64..3d907a9f3 100644 --- a/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt +++ b/composeApp/src/androidMain/kotlin/com/nuvio/app/features/player/PlayerEngine.android.kt @@ -63,6 +63,7 @@ actual fun PlatformPlayerSurface( sourceUrl: String, sourceAudioUrl: String?, sourceHeaders: Map, + useYoutubeChunkedPlayback: Boolean, modifier: Modifier, playWhenReady: Boolean, resizeMode: PlayerResizeMode, @@ -116,7 +117,10 @@ actual fun PlatformPlayerSurface( .setTsExtractorTimestampSearchBytes(1500 * TsExtractor.TS_PACKET_SIZE) val mediaSourceFactory = DefaultMediaSourceFactory( - PlatformPlaybackDataSourceFactory.create(defaultRequestHeaders = sanitizedSourceHeaders), + PlatformPlaybackDataSourceFactory.create( + defaultRequestHeaders = sanitizedSourceHeaders, + useYoutubeChunkedPlayback = useYoutubeChunkedPlayback, + ), extractorsFactory, ) diff --git a/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt b/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt index a3896fc80..946488b73 100644 --- a/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt +++ b/composeApp/src/androidPlaystore/kotlin/com/nuvio/app/features/player/PlatformPlaybackDataSourceFactory.android.kt @@ -4,6 +4,9 @@ import androidx.media3.datasource.DataSource import androidx.media3.datasource.DefaultHttpDataSource internal object PlatformPlaybackDataSourceFactory { - fun create(defaultRequestHeaders: Map): DataSource.Factory = + fun create( + defaultRequestHeaders: Map, + useYoutubeChunkedPlayback: Boolean, + ): DataSource.Factory = DefaultHttpDataSource.Factory().setDefaultRequestProperties(defaultRequestHeaders) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/details/components/TrailerPlayerPopup.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/details/components/TrailerPlayerPopup.kt index 2695831a1..837db0bc0 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/details/components/TrailerPlayerPopup.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/details/components/TrailerPlayerPopup.kt @@ -170,6 +170,7 @@ fun TrailerPlayerPopup( PlatformPlayerSurface( sourceUrl = playbackSource.videoUrl, sourceAudioUrl = playbackSource.audioUrl, + useYoutubeChunkedPlayback = true, modifier = Modifier.fillMaxWidth(), playWhenReady = true, resizeMode = PlayerResizeMode.Fit, diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerEngine.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerEngine.kt index 6db3fd3cc..e7128c85d 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerEngine.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerEngine.kt @@ -40,6 +40,7 @@ expect fun PlatformPlayerSurface( sourceUrl: String, sourceAudioUrl: String? = null, sourceHeaders: Map = emptyMap(), + useYoutubeChunkedPlayback: Boolean = false, modifier: Modifier = Modifier, playWhenReady: Boolean = true, resizeMode: PlayerResizeMode = PlayerResizeMode.Fit, diff --git a/composeApp/src/iosMain/kotlin/com/nuvio/app/features/player/PlayerEngine.ios.kt b/composeApp/src/iosMain/kotlin/com/nuvio/app/features/player/PlayerEngine.ios.kt index 0046d15ea..a1cc303f6 100644 --- a/composeApp/src/iosMain/kotlin/com/nuvio/app/features/player/PlayerEngine.ios.kt +++ b/composeApp/src/iosMain/kotlin/com/nuvio/app/features/player/PlayerEngine.ios.kt @@ -23,6 +23,7 @@ actual fun PlatformPlayerSurface( sourceUrl: String, sourceAudioUrl: String?, sourceHeaders: Map, + useYoutubeChunkedPlayback: Boolean, modifier: Modifier, playWhenReady: Boolean, resizeMode: PlayerResizeMode,