【发布时间】:2018-01-30 10:18:42
【问题描述】:
HlsMediaSource() 方法已弃用(我目前使用的是exoplayer:2.6.1)。用于 HLS 媒体的推荐方法是什么?
【问题讨论】:
标签: android exoplayer2.x
HlsMediaSource() 方法已弃用(我目前使用的是exoplayer:2.6.1)。用于 HLS 媒体的推荐方法是什么?
【问题讨论】:
标签: android exoplayer2.x
在深入研究源代码后,我得出结论
HlsMediaSource.Factory(dataFactory).createMediaSource(mediaUri)
是要走的路。
编辑:扩展其他工厂
工厂模式也是根据2.6.1 release notes 实例化ExtractorMediaSource、SsMediaSource、DashMediaSource 和SingleSampleMediaSource 的推荐方式。
工厂方法简化了MediaSource 的实例化,尤其是在您希望配置可选参数同时将其他参数设置为默认值的情况下,例如
DashMediaSource.Factory(chunkSourceFactory, manifestDataSourceFactory)
.setManifestParser(new CustomManifestParser())
.createMediaSource(manifestUri, eventHandler, eventListener)
【讨论】:
SsMediaSource、DashMediaSource 和 ExtractorMediaSource。
val dataFactory = DefaultDataSourceFactory(context, "ua")
如果找不到 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)))
【讨论】: