【问题标题】:Exoplayer2 Streaming HLS Videos , Sometimes plays video with sound only(video not played)Exoplayer2 流式传输 HLS 视频,有时仅播放有声视频(未播放视频)
【发布时间】:2019-12-25 07:13:06
【问题描述】:

我在我的应用中实现了 exoplayer2 来播放 HLS 视频,但有时它只播放声音,并且无法正常工作。我应该做些什么?我不知道为什么有时会发生这种情况。

这是初始化播放器的代码

fun initPalyer(){
  val mainHandler = Handler()
  val bandwidthMeter: BandwidthMeter = DefaultBandwidthMeter.Builder(context).build()

  bandwidthMeter.addEventListener(mainHandler!!, this)

 val trackSelectionFactory: TrackSelection.Factory = AdaptiveTrackSelection.Factory()

  trackSelector = DefaultTrackSelector(context, trackSelectionFactory)

  val builder = ParametersBuilder(context)

  trackSelectorParameters = builder.build()
  trackSelector!!.parameters = trackSelectorParameters


    var rendersFactory: RenderersFactory = app.buildRenderersFactory(false)

    player = SimpleExoPlayer.Builder(
          context, renderersFactory
   )
   .setTrackSelector(trackSelector!!)
   .setBandwidthMeter(bandwidthMeter)
    //.setLoadControl(loadControl)
   .build()

    player!!.addListener(this)

    loadState()
    playerView.player = player!!

}

播放器准备代码

private fun preparePlayer(uri: Uri) {
        val mediaSource = MediaSourceBuilder().build(uri)

        durationSet = false
        player?.prepare(mediaSource, true, false)
    }

以及创建 mediaSources 的代码

class MediaSourceBuilder {

    //Build various MediaSource depending upon the type of Media for a given video/audio uri
    fun build(uri: Uri): MediaSource {
        val userAgent = PlayerConstants.USER_AGENT
        val lastPath = uri.lastPathSegment?:""

        val defaultHttpDataSourceFactory = DefaultHttpDataSourceFactory(userAgent)

        if(lastPath.contains(PlayerConstants.FORMAT_MP3) || lastPath.contains(PlayerConstants.FORMAT_MP4)){

            return ExtractorMediaSource.Factory(defaultHttpDataSourceFactory)
                .createMediaSource(uri)

        }else if(lastPath.contains(PlayerConstants.FORMAT_M3U8)){

            return HlsMediaSource.Factory(defaultHttpDataSourceFactory)
                .setAllowChunklessPreparation(true)
                .createMediaSource(uri)

        }else{
            val dashChunkSourceFactory = DefaultDashChunkSource.Factory(defaultHttpDataSourceFactory)

            return DashMediaSource.Factory(dashChunkSourceFactory, defaultHttpDataSourceFactory)
                .createMediaSource(uri)

        }
    }

【问题讨论】:

    标签: android kotlin http-live-streaming exoplayer exoplayer2.x


    【解决方案1】:

    您可能想要更改您的 DataSourceFactory,如果您的 URL 使用 HTTPS,您可能会遇到错误,请尝试使用 DefaultDataSourceFactory 而不是 DefaultHttpDataSourceFactory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2014-06-13
      相关资源
      最近更新 更多