【问题标题】:ExoPlayer HlsMediaSource() deprecatedExoPlayer HlsMediaSource() 已弃用
【发布时间】:2018-01-30 10:18:42
【问题描述】:

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

【问题讨论】:

    标签: android exoplayer2.x


    【解决方案1】:

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

    HlsMediaSource.Factory(dataFactory).createMediaSource(mediaUri)
    

    是要走的路。

    编辑:扩展其他工厂

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

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

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

    【讨论】:

    • 谢谢! +1:我假设类似的解决方案适用于折旧函数 SsMediaSourceDashMediaSourceExtractorMediaSource
    • 那是正确的 :) 也许我应该将其添加到答案中作为旁注。
    • @Abhishek val dataFactory = DefaultDataSourceFactory(context, "ua")
    • 我已经能够弄清楚了。但是非常感谢您的回答
    • 我很高兴听到!抱歉耽搁了:)
    【解决方案2】:

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

    【讨论】:

    • 解决了我的问题,谢谢!
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-11
      • 1970-01-01
      • 2014-02-12
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多