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

2024-03-21

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

我正在 ViewHolder 内的 RecyclerView 适配器的绑定方法中实现 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:源错误。 com.google.android.exoplayer2.source.UnrecognizedInputFormatException: 没有可用的提取器(MatroskaExtractor、 FragmentedMp4Extractor、Mp4Extractor、Mp3Extractor、AdtsExtractor、 Ac3Extractor、TsExtractor、FlvExtractor、OggExtractor、PsExtractor、 WavExtractor、AmrExtractor、Ac4Extractor、FlacExtractor)可以读取 溪流。 在 com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractorHolder.selectExtractor(ProgressiveMediaPeriod.java:1090) 在 com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:969) 在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:391) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 在 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 https://exoplayer.dev/media-sources.html

  • DashMediaSource对于达世币。
  • SsMediaSource用于平滑流式处理。
  • 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))
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Recyclerview 中的 Exoplayer 错误,源错误 没有可用的提取器 的相关文章

随机推荐

  • 如何编写一个正则表达式来匹配任意顺序的字符?

    我正在尝试编写一个正则表达式来匹配一组字符 而不考虑顺序 例如 str act str scan Insert expression here 将匹配 cat act tca atc tac cta 但不匹配ca ac or cata 我在
  • 从 IPHostEntry 获取有效 IP

    我尝试使用此方法获取我的计算机的 IP 地址 var ipadd Dns GetHostEntry Dns GetHostName foreach var ipAddress in ipadd AddressList Console Wri
  • javascript 中剩余参数和展开运算符的用法

    ECMAScript 6中添加的rest参数有什么用 例如 在 ECMAScript 5 中 您可以执行以下操作来获取从第二个元素开始的参数数组 ES 5 store Joe money store Jane letters certifi
  • 根据 UICollectionView 中的图像动态更改单元格大小

    我正在水平集合视图中显示从服务器接收的动态图像 当我设置集合视图时 我设置了 void setupCollectionView self setupPageControlView self screensCollectionView del
  • 提高识别率的图像预处理步骤

    我正在为我的项目使用 TessBaseAPI 制作一个简单的 OCR Android 应用程序 我已经完成了一些图像预处理步骤 例如二值化和图像增强 但他们的结果是50 到60 怎样才能提高识别率呢 我包括两个示例图像 http image
  • 关于Environment.ProcessorCount的问题

    我很好奇 NET 属性是什么Environment ProcessorCount实际上返回 它返回核心数量 处理器数量还是两者都返回 如果我的计算机有 2 个处理器 每个处理器有 4 个核心 Environment ProcessorCou
  • 如何计算 React Native/JS 中 JSON 响应的长度?

    我想计算我的响应 JSON 的长度 这是我的代码 getMoviesFromApiAsync return fetch http sampleurl com CommonDataManager getInstance getUserID t
  • Android:当应用程序被终止时从服务启动活动

    在我的应用程序中 我有一个Service在后台 和前台 运行 In this Service 有一个CountdownTimer当它完成时 我想在某个特定的时间启动该应用程序Activity并在中做一些事情Activity自动 并且即使我的
  • 如何在 VS Code 中跨多个文件执行命令?

    我想通过运行一些命令来优化我的打字稿代码 例如resolve organizeImports我的所有打字稿 ts 文件中都带有 TS Hero 插件 逐个文件地执行此操作可能非常烦人且耗时 有没有一种简单的方法来进行这种 批量 执行 我已经
  • Moment.js 月份差异

    我已经使用 moment js 有一段时间了 它使日期操作变得更加容易 但我有一个失败的特定案例 我不明白为什么 计算今天 2013 年 10 月 31 日 和 2014 年 2 月 1 日之间的差异时 月份差异返回为 2 尽管两个日期之间
  • JQuery:获取不包括嵌套标签的标签内容

    我有一些如下所示的 HTML span Text I m interested in span Other crap I don t care about span span 我希望获取跨度 A 的文本内容 不包括任何嵌套标签 即上例中跨度
  • Nestjs Mongoose 服务的单元测试

    我一直在试图弄清楚如何对 NestJS 服务进行单元测试 所以我写了一个规范文件来测试这些使用 mongoose 和 jest 的 NestJS 服务 规格文件如下 import Test TestingModule from nestjs
  • 如何获取MEF中的所有方法

    我有属性类 AttributeUsage AttributeTargets Method public class MethodGetterAttribute ExportAttribute 我在几个命名空间的方法中使用它 namespac
  • 使用reduce删除数组中的重复项

    我正在尝试从数组列表中删除重复项 我尝试执行此操作的方法是使用reduce 创建一个空数组 将所有未定义的索引推送到该数组上 但我收到错误 if acc item undefined TypeError Cannot read proper
  • 如何查看CK编辑器版本

    我的项目中有一个现有的 CK 编辑器文件夹 我怎样才能知道它的版本 有记录吗 只需在 config js 文件中发出如下警报 它就会给出值 alert CKEDITOR version 或者您可以直接在文件 ckeditor php4 ph
  • 是否可以将一个操作附加到 boost::spirit::rule 解析器,该解析器将解析结果分配给(尚)未知实例的成员?

    我试图从 boost spirit 规则定义的操作中引用 尚 未知实例的成员 因此在伪代码中 代替 双 参考 rN 1 我正在寻找类似的东西 X 像素 double ref X rN ppx 1 它的解决方法可能是一个简单的 语义操作 其参
  • Google Maps API v3 MapTypeId 作为变量

    设置谷歌地图类型时 map setMapTypeId google maps MapTypeId TERRAIN 我可以用包含字符串 TERRAIN SATELLITE 等的js变量替换 TERRAIN 吗 是的 这样称呼它 var map
  • AVPlayer 在模拟器上可以播放,但在真实设备上却无法播放

    我正在实现一个基本的音频播放器来播放远程音频文件 文件格式为 mp3 我编写的代码在模拟器上运行良好 但在真实设备上不起作用 然而 如果我使用 safari 在同一个真实设备上 加载它 我在应用程序中使用的相同 url 工作正常 所以我并没
  • 为什么PHP APC缓存未命中不断增加

    我正在使用 apc php 检查 PHP APC 的统计信息 http svn php net viewvc pecl apc trunk apc php 我在相当繁忙的服务器上有以下统计数据 Cached Files 317 26 3 M
  • Recyclerview 中的 Exoplayer 错误,源错误 没有可用的提取器

    我正在使用 ExoPlayer 在 RecyclerView 中流式传输视频 我正在 ViewHolder 内的 RecyclerView 适配器的绑定方法中实现 ExoPlayer 我使用的视频格式是 m3u8 我使用的 URL 在浏览器