安卓:Exoplayer - ExtractorMediaSource已过时

17

我正在按照教程实现Exoplayer。但是ExtractorMediaSource类已经被弃用了。我需要从远程URL播放视频。在这种情况下使用的替代方法是什么?

val mediaSource = ExtractorMediaSource
  .Factory(DefaultDataSourceFactory(context, userAgent))
  .setExtractorsFactory(DefaultExtractorsFactory())
  .createMediaSource(Uri.parse(url))
3个回答

32

你是否在使用版本为2.10.0或更高的ExoPlayer?那么请使用ProgressiveMediaSource代替ExtractorMediaSource参考发布说明)。


执行此操作会导致 Manifest 合并失败: 属性 application@appComponentFactory 的值 (android.support.v4.app.CoreComponentFactory) 在 [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 中已存在,也在 [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 中存在,值为 (androidx.core.app.CoreComponentFactory)。建议在 AndroidManifest.xml:21:5-562:19 中的 <application> 元素中添加 'tools:replace="android:appComponentFactory"' 以覆盖该属性。 - DragonFire
1
你好 @DragonFire,这个清单合并错误是由于同时使用 AppCompat 和 AndroidX 依赖项被禁止所致。请查看此答案以确保您已正确迁移所有依赖项到 AndroidX:https://dev59.com/questions/5bTma4cB1Zd3GeqP6W6G#56556363 - SaadAAkash
另外,请检查您的Gradle是否已更新到com.android.tools.build:gradle v3.2.1或更高版本,并将compileSdkVersion更新至28或更高版本。 - SaadAAkash

5

ExtractorMediaSource已经过时。请使用ProgressiveMediaSource更新源工厂。

ProgressiveMediaSource.Factory(DefaultHttpDataSource.Factory())
                .createMediaSource(MediaItem.fromUri(Uri.parse("url or path")))

1

ExtractorMediaSource 已被弃用,使用 2.14.0

请移除 ExtractorMediaSource,改用 ProgressiveMediaSource

你应该使用新版本:implementation 'com.google.android.exoplayer:exoplayer:2.18.2'

      val defaultHttpDataSourceFactory = DefaultHttpDataSource.Factory()
      val mediaItem = MediaItem.fromUri(URL)
      val mediaSource = ProgressiveMediaSource.Factory(defaultHttpDataSourceFactory)
            .createMediaSource(mediaItem)
      exoPlayer?.setMediaSource(mediaSource)

非常感谢你,兄弟!!!你刚刚节省了我的时间,我本来要花一天的时间将EXOPLAYER从2.10.8升级到2.18.7 <3 - Nghien Nghien
1
不客气 :) 干得好。 - Halil Ozel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接