Недавно я пытаюсь перенести автономный SDK Exoplayer в Media3 Exoplayer.
Пока я реализую MediaLibrayService и прослушиватель обратного вызова, я могу воспроизводить обычный URL-адрес mp3 через MediaController.setMediaItem().Но моему проекту необходимо воспроизводить каждый источник HLS(.m3u8) с разными файлами cookie.
Я пытаюсь переопределить onAddMediaItems для установки файла cookie для каждого элемента мультимедиа, но он не работает и продолжает получать Вызвано: androidx.media3.datasource.HttpDataSource$InvalidResponseCodeException: Код ответа: 403.
Ниже приведена часть моего кода. Надеюсь, кто-нибудь даст мне несколько советов по решению этой проблемы.
MediaLibraryService
override fun onAddMediaItems(
mediaSession: MediaSession,
controller: MediaSession.ControllerInfo,
mediaItems: MutableList,
): ListenableFuture {
val updatedMediaItems = mediaItems.map {
val cookie = it.requestMetadata.extras?.getString("COOKIE") ?: ""
val httpSourceFactory = DefaultHttpDataSource.Factory().apply {
setDefaultRequestProperties(mapOf("Cookie" to cookie))
setUserAgent("Mozilla/5.0 (Linux; Android 12; SM-A136B Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.107 Mobile Safari/537.36")
setConnectTimeoutMs(DefaultHttpDataSource.DEFAULT_CONNECT_TIMEOUT_MILLIS)
setReadTimeoutMs(DefaultHttpDataSource.DEFAULT_READ_TIMEOUT_MILLIS)
setAllowCrossProtocolRedirects(true)
}
httpSourceFactory.createDataSource().setRequestProperty("Cookie", cookie)
val mediaSourceFactory = HlsMediaSource.Factory(httpSourceFactory)
.createMediaSource(it)
(mediaSession.player as? ExoPlayer)?.setMediaSource(mediaSourceFactory)
it
}.toMutableList()
return Futures.immediateFuture(updatedMediaItems)
}
Активность игрока
private fun playAudio() {
val controller = this.controller ?: return
val cookie: String = getString(
R.string.cookies_format,
"Axxxxxxxxxxxxxxxxxxxxxxx",
"ga______",
"eyyyyyyyyyyyyyyyyyyyyyyyyyy"
)
val cookieBundle = Bundle().apply {
putString("COOKIE", cookie)
}
val mediaMetadata = MediaMetadata.Builder()
.setAlbumTitle("SoundHelix")
.setDisplayTitle("Song 1")
.build()
val mediaItem = MediaItem.Builder()
.setUri(
"https://test.net/media/out/11111/hls/11/11111.m3u8"
)
.setRequestMetadata(
RequestMetadata.Builder()
.setExtras(cookieBundle).build()
)
.setMediaMetadata(mediaMetadata)
.build()
controller.setMediaItem(mediaItem)
controller.prepare()
controller.play()
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... iasource-w
Android Media3 Exoplayer: как установить разные файлы cookie для каждого HlsMediaSource при вызове функции addMediaItem( ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как предварительно загрузить видео с помощью media3 exoplayer в Android Kotlin?
Anonymous » » в форуме Android - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Android: androidx.media3.exoplayer.ExoPlaybackException: ошибка источника
Anonymous » » в форуме Android - 0 Ответы
- 24 Просмотры
-
Последнее сообщение Anonymous
-