Exoplayer How to set duration/position manually for live streams?

Viewed 608

I am using Exoplayer to play some videos. I have some .mpd live url's which comes from a backend. Normally if the broadcast is live, the seek bar is set to right end side and on the left end side live video cache time is stated with minus value like (-00.59.51). I want to achive that in my project. But by default, current position of the video stated on left side and video duration on right side.

There is two problem: 1.We have to detect if the video is live or not. 2.We need to set time values for live video.

    private fun initializePlayerXml(currentXmlLink: String) {
        if (player == null) {
            val trackSelector = DefaultTrackSelector(this)
            trackSelector.setParameters(
                trackSelector.buildUponParameters().setMaxVideoSizeSd()
            )
            try {
                player = SimpleExoPlayer.Builder(this)
                    .build()
            } catch (e: Exception) {

            }

        }
        if (player!!.bufferedPosition == 0L) {
            playButton.setImageResource(R.drawable.ic_pause)
        }

        playButton.setOnClickListener {
            if (player!!.isPlaying) {
                player!!.pause()
                playButton.setImageResource(R.drawable.ic_play)
            } else {
                player!!.play()
                playButton.setImageResource(R.drawable.ic_pause)
            }


        }

        val doubleClickForwardFun = DoubleClick(object : DoubleClickListener {
            override fun onSingleClickEvent(view: View?) {

            }

            override fun onDoubleClickEvent(view: View?) {
                val currentPosition = player!!.currentPosition
                player!!.seekTo(currentPosition + 10000)
            }
        })

        val doubleClickBackwardFun = DoubleClick(object : DoubleClickListener {
            override fun onSingleClickEvent(view: View?) {

            }

            override fun onDoubleClickEvent(view: View?) {
                val currentPosition = player!!.currentPosition
                player!!.seekTo(currentPosition - 10000)
            }
        })

        doubleClickBackward.setOnClickListener(doubleClickBackwardFun)
        doubleClickForward.setOnClickListener(doubleClickForwardFun)


        forwardButton.setOnClickListener {
            val currentPosition = player!!.currentPosition
            player!!.seekTo(currentPosition + 10000)
        }
        backwardButton.setOnClickListener {
            val currentPosition = player!!.currentPosition
            player!!.seekTo(currentPosition - 10000)
        }


        val mediaItem =
            MediaItem.Builder()
                .setUri(currentXmlLink)
                .setMimeType(MimeTypes.APPLICATION_MPD)
                .build()
        player!!.addMediaItem(mediaItem)



        playerView!!.player = player
        player!!.playWhenReady = playWhenReady
        player!!.seekTo(currentWindow, playbackPosition)
        playbackStateListener.let { player!!.addListener(it) }
        player!!.prepare()
    }

I have already a question on Exoplayer/Issues, you can check here. Also my repo is here.

0 Answers
Related