From 4dbdd16e48c3e3f25704400de3ac5b96b68fe4c5 Mon Sep 17 00:00:00 2001 From: chrisk325 Date: Sun, 12 Apr 2026 14:45:59 +0530 Subject: [PATCH 1/4] fix: http protocol redirects --- .../player/PlatformPlaybackDataSourceFactory.android.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 4dc10c27..07251404 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 @@ -16,7 +16,9 @@ internal object PlatformPlaybackDataSourceFactory { val networkFactory: DataSource.Factory = if (useYoutubeChunkedPlayback) { YoutubeChunkedDataSourceFactory(defaultRequestHeaders = defaultRequestHeaders) } else { - DefaultHttpDataSource.Factory().setDefaultRequestProperties(defaultRequestHeaders) + DefaultHttpDataSource.Factory() + .setAllowCrossProtocolRedirects(true) + .setDefaultRequestProperties(defaultRequestHeaders) } val baseFactory: DataSource.Factory = DefaultDataSource.Factory(context, networkFactory) return if (defaultResponseHeaders.isEmpty()) { @@ -28,4 +30,4 @@ internal object PlatformPlaybackDataSourceFactory { ) } } -} \ No newline at end of file +} From 2edd505e1236ac56149ea4e24df1f135be3e6907 Mon Sep 17 00:00:00 2001 From: chrisk325 Date: Sun, 12 Apr 2026 14:51:24 +0530 Subject: [PATCH 2/4] fix: http protocol redirects --- .../player/PlatformPlaybackDataSourceFactory.android.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 d5d312db..9e1b0700 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 @@ -13,6 +13,7 @@ internal object PlatformPlaybackDataSourceFactory { useYoutubeChunkedPlayback: Boolean, ): DataSource.Factory { val httpFactory = DefaultHttpDataSource.Factory() + .setAllowCrossProtocolRedirects(true) .setDefaultRequestProperties(defaultRequestHeaders) val baseFactory: DataSource.Factory = DefaultDataSource.Factory(context, httpFactory) return if (defaultResponseHeaders.isEmpty()) { @@ -24,4 +25,4 @@ internal object PlatformPlaybackDataSourceFactory { ) } } -} \ No newline at end of file +} From c50f52bfc26d65dc9ef4024f4f952d650041ffc7 Mon Sep 17 00:00:00 2001 From: chrisk325 Date: Sun, 12 Apr 2026 16:09:58 +0530 Subject: [PATCH 3/4] add headers --- .../PlatformPlaybackDataSourceFactory.android.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 07251404..513beda6 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 @@ -7,6 +7,14 @@ import androidx.media3.datasource.DefaultHttpDataSource import com.nuvio.app.features.trailer.YoutubeChunkedDataSourceFactory internal object PlatformPlaybackDataSourceFactory { + + private val DEFAULT_STREAM_HEADERS = mapOf( + "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) " + + "Chrome/120.0.0.0 Safari/537.36", + "Referer" to "https://www.strem.io/" + ) + fun create( context: Context, defaultRequestHeaders: Map, @@ -18,7 +26,7 @@ internal object PlatformPlaybackDataSourceFactory { } else { DefaultHttpDataSource.Factory() .setAllowCrossProtocolRedirects(true) - .setDefaultRequestProperties(defaultRequestHeaders) + .setDefaultRequestProperties(DEFAULT_STREAM_HEADERS + defaultRequestHeaders) } val baseFactory: DataSource.Factory = DefaultDataSource.Factory(context, networkFactory) return if (defaultResponseHeaders.isEmpty()) { From b681a899f72cb3e669a2dc285542d28c4d42686f Mon Sep 17 00:00:00 2001 From: chrisk325 Date: Sun, 12 Apr 2026 16:13:41 +0530 Subject: [PATCH 4/4] add headers --- .../PlatformPlaybackDataSourceFactory.android.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 9e1b0700..29f34359 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 @@ -6,6 +6,14 @@ import androidx.media3.datasource.DefaultDataSource import androidx.media3.datasource.DefaultHttpDataSource internal object PlatformPlaybackDataSourceFactory { + + private val DEFAULT_STREAM_HEADERS = mapOf( + "User-Agent" to "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " + + "AppleWebKit/537.36 (KHTML, like Gecko) " + + "Chrome/120.0.0.0 Safari/537.36", + "Referer" to "https://www.strem.io/" + ) + fun create( context: Context, defaultRequestHeaders: Map, @@ -14,7 +22,7 @@ internal object PlatformPlaybackDataSourceFactory { ): DataSource.Factory { val httpFactory = DefaultHttpDataSource.Factory() .setAllowCrossProtocolRedirects(true) - .setDefaultRequestProperties(defaultRequestHeaders) + .setDefaultRequestProperties(DEFAULT_STREAM_HEADERS + defaultRequestHeaders) val baseFactory: DataSource.Factory = DefaultDataSource.Factory(context, httpFactory) return if (defaultResponseHeaders.isEmpty()) { baseFactory