ExoPlayer HlsMediaSource() 已被弃用

23

HlsMediaSource()方法已被弃用(我目前使用的是exoplayer:2.6.1)。推荐使用哪种方法代替HLS媒体?

4个回答

38

经过深入研究源代码,我得出结论:

HlsMediaSource.Factory(dataFactory).createMediaSource(mediaUri)

工厂模式是最佳实践,用于实例化ExtractorMediaSourceSsMediaSourceDashMediaSourceSingleSampleMediaSource,如2.6.1版本说明所述。

工厂方法简化了MediaSource的实例化,特别是在您希望配置可选参数而将其他参数设置为默认值时。

DashMediaSource.Factory(chunkSourceFactory, manifestDataSourceFactory)
    .setManifestParser(new CustomManifestParser())
    .createMediaSource(manifestUri, eventHandler, eventListener)

1
谢谢!+1:我假设类似的解决方案适用于已弃用的函数“SsMediaSource”,“DashMediaSource”和“ExtractorMediaSource”。 - Ωmega
没错 :) 也许我应该把这个作为附注添加到答案中。 - Algar
@Abhishek val dataFactory = DefaultDataSourceFactory(context, "ua")@Abhishek val dataFactory = DefaultDataSourceFactory(context,“ua”) - Algar
我已经能够弄清楚了。但是真的非常感谢你的回答。 - Abhishek
很高兴听到这个消息!抱歉让你等了 :) - Algar

4

如果你找不到 HlsMediaSource,你需要添加一个额外的依赖项:

implementation "com.google.android.exoplayer:exoplayer-hls:$exoplayer_version"

为了实现它,我们需要类似于以下代码的代码:
val userAgent = Util.getUserAgent(context, USER_AGENT)

DefaultDataSourceFactory(
                context,
                userAgent
            )

val source = "https://some_url_link"
val uri = source.toUri()

HlsMediaSource.Factory(factory).createMediaSource(uri)

问题已解决,谢谢! - DIRTY DAVE

1
您可以使用这种方式来摆脱已弃用的功能。
 val dataSourceFactory = DefaultDataSourceFactory(this, "sample")
    ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(MediaItem.fromUri(Uri.parse(uri)))

0

您应该使用最新版本:com.google.android.exoplayer:exoplayer:2.18.2

这段代码适用于您:

val defaultHttpDataSourceFactory = DefaultHttpDataSource.Factory()
val mediaItem = MediaItem.fromUri(URL)
val mediaSource = HlsMediaSource.Factory(defaultHttpDataSourceFactory).createMediaSource(mediaItem)
exoPlayer?.apply {
setMediaSource(mediaSource)
seekTo(playbackPosition)
playWhenReady = playWhenReady
prepare() 
}

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