gpt4 book ai didi

android - Recyclerview 中的 Exoplayer 错误,源错误没有可用的提取器

转载 作者:行者123 更新时间:2023-12-03 23:35:04 24 4
gpt4 key购买 nike

我正在使用 ExoPlayer 在 RecyclerView 中流式传输视频。

我正在 ViewHolder 中的 RecyclerView Adapter 的绑定(bind)方法中实现 ExoPlayer。

我使用的视频格式是 m3u8,我使用的 URL 在浏览器中有效。所以我知道视频链接是有效的。我还在那里测试了一个 youtube 链接。

这是来自 Recyclerview 适配器的 ViewHolder 的代码 ->

class ViewHolder private constructor(val binding: FeedRowBinding) :
RecyclerView.ViewHolder(binding.root) {

fun bind(context: Activity){
if (entity.content.videolink != null) {
setupVideoPlayer(entity.content.videolink, context)
}
}
}

private fun setupVideoPlayer(url: String, context: Activity) {
val videoExoPlayer = SimpleExoPlayer.Builder(binding.videoView.context).build()
videoExoPlayer.prepare(createUrlMediaSource(url, context))

binding.play.setOnClickListener {
videoExoPlayer.playWhenReady = true
}

binding.pause.setOnClickListener {
videoExoPlayer.playWhenReady = false
}
}

private fun createUrlMediaSource(url: String, context: Activity): MediaSource {
val userAgent = Util.getUserAgent(context, context.getString(R.string.about))
return ProgressiveMediaSource
.Factory(DefaultDataSourceFactory(context, userAgent), DefaultExtractorsFactory())
.createMediaSource(Uri.parse(url))
}

当加载我的 recyclerview 并到达包含视频的行时,我收到以下错误:

ExoPlayerImplInternal: Source error. com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor, Ac4Extractor, FlacExtractor) could read the stream. at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1090) at com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:969) at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764)

我不确定我做错了什么,关于如何解决这个问题的任何想法?

最佳答案

你需要修改你的createUrlMediaSource

private fun createUrlMediaSource(url: String, context: Activity): MediaSource {
val userAgent = Util.getUserAgent(context, context.getString(R.string.about))
return ProgressiveMediaSource
.Factory(DefaultDataSourceFactory(context, userAgent), DefaultExtractorsFactory())
.createMediaSource(Uri.parse(url))
}

https://exoplayer.dev 中所述

  • DashMediaSource 用于 DASH。
  • SsMediaSource 用于 SmoothStreaming。
  • HlsMediaSource 用于 HLS(这是您的格式 => .m3u8)。
  • ProgressiveMediaSource 用于常规媒体文件。

所以你需要将你的函数替换为:

private fun createUrlMediaSource(url: String, context: Activity): MediaSource {
val userAgent = Util.getUserAgent(context, context.getString(R.string.about))
return HlsMediaSource
.Factory(DefaultDataSourceFactory(context, userAgent), DefaultExtractorsFactory())
.createMediaSource(Uri.parse(url))
}

关于android - Recyclerview 中的 Exoplayer 错误,源错误没有可用的提取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60583183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com