fix(player): следовать кросс-протокольным редиректам (http→https)
Многие станции отдают по http 301 на https; ExoPlayer по умолчанию не идёт по кросс-протокольному редиректу и не играет их. Включён общий HTTP-источник с setAllowCrossProtocolRedirects(true) — такие станции заиграют без правки URL. ICY-метаданные сохраняются (обрабатываются на уровне ProgressiveMediaSource). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user