android ExoPlayer HlsMediaSource()已弃用

slwdgvem  于 2023-01-19  发布在  Android
关注(0)|答案(4)|浏览(193)

HlsMediaSource()方法已被弃用(我目前使用的是exoplayer:2.6.1)。建议使用什么方法来代替HLS-media?

ilmyapht

ilmyapht1#

在深入研究了源代码之后,我得出结论

HlsMediaSource.Factory(dataFactory).createMediaSource(mediaUri)

才是正确的选择。

**编辑:**扩展到其他工厂

工厂模式也是按照2.6.1 release notes示例化ExtractorMediaSourceSsMediaSourceDashMediaSourceSingleSampleMediaSource的推荐方法。
工厂方法简化了MediaSource的示例化,特别是当您希望配置可选参数,而将其他参数设置为默认值时,例如:

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

0x6upsns2#

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

ux6nzvsh3#

您可以使用此方法来消除已弃用的

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

nfzehxib4#

您应该使用最新版本: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() 
}

相关问题