ExoPlayer HlsMediaSource() 已弃用

ExoPlayer HlsMediaSource() deprecated

HlsMediaSource() 方法已弃用(我目前使用 exoplayer:2.6.1)。对于 HLS 媒体,推荐使用什么方法?

在深入研究源代码后,我得出的结论是

HlsMediaSource.Factory(dataFactory).createMediaSource(mediaUri)

是必经之路。

编辑: 扩展其他工厂

工厂模式也是根据 2.6.1 release notes 实例化 ExtractorMediaSourceSsMediaSourceDashMediaSourceSingleSampleMediaSource 的推荐方法。

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

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

如果找不到 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)

您可以使用这种方式摆脱弃用

 val dataSourceFactory = DefaultDataSourceFactory(this, "sample")
    ProgressiveMediaSource.Factory(dataSourceFactory)
            .createMediaSource(MediaItem.fromUri(Uri.parse(uri)))