From 4612a8f33cf0717bad5e1aca0fff65256132f600 Mon Sep 17 00:00:00 2001 From: nk Date: Thu, 4 Jun 2026 15:42:43 +0300 Subject: [PATCH] =?UTF-8?q?fix(player):=20=D1=81=D0=BB=D0=B5=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=82=D1=8C=20=D0=BA=D1=80=D0=BE=D1=81=D1=81-?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D0=BA=D0=BE=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=BC=20=D1=80=D0=B5=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=20(http=E2=86=92https)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Многие станции отдают по http 301 на https; ExoPlayer по умолчанию не идёт по кросс-протокольному редиректу и не играет их. Включён общий HTTP-источник с setAllowCrossProtocolRedirects(true) — такие станции заиграют без правки URL. ICY-метаданные сохраняются (обрабатываются на уровне ProgressiveMediaSource). Co-Authored-By: Claude Opus 4.8 --- .../java/com/radiola/service/PlayerController.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/app/src/main/java/com/radiola/service/PlayerController.kt b/app/src/main/java/com/radiola/service/PlayerController.kt index de60ed5..2f88c2d 100644 --- a/app/src/main/java/com/radiola/service/PlayerController.kt +++ b/app/src/main/java/com/radiola/service/PlayerController.kt @@ -13,7 +13,10 @@ import androidx.media3.common.MediaMetadata import androidx.media3.common.Metadata import androidx.media3.common.Player import android.util.Log +import androidx.media3.datasource.DefaultDataSource +import androidx.media3.datasource.DefaultHttpDataSource import androidx.media3.exoplayer.ExoPlayer +import androidx.media3.exoplayer.source.DefaultMediaSourceFactory import androidx.media3.extractor.metadata.icy.IcyInfo import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.MutableStateFlow @@ -74,7 +77,18 @@ class PlayerController @Inject constructor( ) } + // HTTP-источник с разрешёнными кросс-протокольными редиректами (http→https): + // многие станции отдают 301 c http на https, без этого ExoPlayer их не играет. + private val mediaSourceFactory = DefaultMediaSourceFactory( + DefaultDataSource.Factory( + context, + DefaultHttpDataSource.Factory() + .setAllowCrossProtocolRedirects(true) + ) + ) + private val exoPlayer: ExoPlayer = ExoPlayer.Builder(context) + .setMediaSourceFactory(mediaSourceFactory) .setAudioAttributes( AudioAttributes.Builder() .setUsage(C.USAGE_MEDIA)