Mona Baharlou
Mona Baharlou

Reputation: 1521

Exoplayer2 Streaming HLS Videos , Sometimes plays video with sound only(video not played)

I implement exoplayer2 in my app for playing HLS Videos, but sometimes it plays just sound, and doesn't work correctly. What am I supposed to do? I couldn't find why this happens sometimes.

this is the code for initializing player :

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!!

}

the code for preparing player :

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

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

and the code for creating 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)

        }
    }

Upvotes: 2

Views: 734

Answers (1)

Biscuit
Biscuit

Reputation: 5247

You might wanna change your DataSourceFactory, in case your URL are in HTTPS you might end up with an error, try using DefaultDataSourceFactory instead of DefaultHttpDataSourceFactory

Upvotes: 2

Related Questions