Недавно я пытаюсь перенести автономный 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
Форум для тех, кто программирует под Android
1733218377
Anonymous
Недавно я пытаюсь перенести автономный SDK Exoplayer в Media3 Exoplayer.
Пока я реализую MediaLibrayService и прослушиватель обратного вызова, я могу воспроизводить обычный URL-адрес mp3 через MediaController.setMediaItem().Но моему проекту необходимо воспроизводить [b]каждый источник HLS(.m3u8) с разными файлами cookie[/b].
Я пытаюсь переопределить onAddMediaItems для установки файла cookie для каждого элемента мультимедиа, но он не работает и продолжает получать [b]Вызвано: androidx.media3.datasource.HttpDataSource$InvalidResponseCodeException: Код ответа: 403[/b].
Ниже приведена часть моего кода. Надеюсь, кто-нибудь даст мне несколько советов по решению этой проблемы.
[b]MediaLibraryService[/b]
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)
}
[b]Активность игрока[/b]
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()
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79247004/android-media3-exoplayer-how-to-set-different-cookie-for-each-hlsmediasource-w[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия