cleanup and backbuffer

This commit is contained in:
Bnyro 2022-06-03 18:43:15 +02:00
parent 9f5814e419
commit bd2d6d1bd1

View File

@ -59,6 +59,7 @@ import com.github.libretube.obj.Subscribe
import com.github.libretube.util.CronetHelper
import com.github.libretube.util.RetrofitInstance
import com.google.android.exoplayer2.C
import com.google.android.exoplayer2.DefaultLoadControl
import com.google.android.exoplayer2.ExoPlayer
import com.google.android.exoplayer2.MediaItem
import com.google.android.exoplayer2.MediaItem.SubtitleConfiguration
@ -81,11 +82,12 @@ import com.google.android.exoplayer2.util.RepeatModeUtil
import com.google.android.material.button.MaterialButton
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.squareup.picasso.Picasso
import org.chromium.net.CronetEngine
import retrofit2.HttpException
import java.io.IOException
import java.util.concurrent.Executors
import kotlin.math.abs
import org.chromium.net.CronetEngine
import retrofit2.HttpException
var isFullScreen = false
@ -93,8 +95,6 @@ class PlayerFragment : Fragment() {
private val TAG = "PlayerFragment"
private var videoId: String? = null
private var param2: String? = null
private var lastProgress: Float = 0.toFloat()
private var sId: Int = 0
private var eId: Int = 0
private var paused = false
@ -112,7 +112,6 @@ class PlayerFragment : Fragment() {
private lateinit var exoPlayerView: StyledPlayerView
private lateinit var motionLayout: MotionLayout
private lateinit var exoPlayer: ExoPlayer
private lateinit var mediaSource: MediaSource
private lateinit var segmentData: Segments
private lateinit var relDownloadVideo: LinearLayout
@ -150,6 +149,7 @@ class PlayerFragment : Fragment() {
val playerMotionLayout = view.findViewById<MotionLayout>(R.id.playerMotionLayout)
motionLayout = playerMotionLayout
exoPlayerView = view.findViewById(R.id.player)
view.findViewById<TextView>(R.id.player_description).text = videoId
playerMotionLayout.addTransitionListener(object : MotionLayout.TransitionListener {
override fun onTransitionStarted(
@ -199,6 +199,7 @@ class PlayerFragment : Fragment() {
) {
}
})
playerMotionLayout.progress = 1.toFloat()
playerMotionLayout.transitionToStart()
fetchJson(view)
@ -324,14 +325,6 @@ class PlayerFragment : Fragment() {
GridLayoutManager(view.context, resources.getInteger(R.integer.grid_items))
}
override fun onStop() {
try {
// exoPlayer.pause() // breaks background play
} catch (e: Exception) {
}
super.onStop()
}
override fun onDestroy() {
super.onDestroy()
try {
@ -419,17 +412,20 @@ class PlayerFragment : Fragment() {
}
}
}
runOnUiThread {
createExoPlayer(view)
prepareExoPlayerView()
setResolutionAndSubtitles(view, response)
exoPlayer.prepare()
exoPlayer.play()
initializePlayerView(view, response)
}
}
}
run()
}
private fun initializePlayerView(view: View, response: Streams) {
isLoading = false
runOnUiThread {
createExoPlayer(view)
private fun prepareExoPlayerView() {
exoPlayerView.setShowSubtitleButton(true)
exoPlayerView.setShowNextButton(false)
exoPlayerView.setShowPreviousButton(false)
@ -437,9 +433,9 @@ class PlayerFragment : Fragment() {
// exoPlayerView.controllerShowTimeoutMs = 1500
exoPlayerView.controllerHideOnTouch = true
exoPlayerView.player = exoPlayer
}
setResolutionAndSubtitles(view, response)
private fun initializePlayerView(view: View, response: Streams) {
view.findViewById<TextView>(R.id.player_views_info).text =
response.views.formatShort() + " views • " + response.uploadDate
view.findViewById<TextView>(R.id.textLike).text = response.likes.formatShort()
@ -575,7 +571,6 @@ class PlayerFragment : Fragment() {
}
}
}
}
private fun setResolutionAndSubtitles(view: View, response: Streams) {
var videosNameArray: Array<CharSequence> = arrayOf()
@ -598,11 +593,9 @@ class PlayerFragment : Fragment() {
val defres = sharedPreferences.getString("default_res", "")!!
when {
defres != "" -> {
var foundRes = false
run lit@{
response.videoStreams.forEachIndexed { index, pipedStream ->
if (pipedStream.quality!!.contains(defres)) {
foundRes = true
val dataSourceFactory: DataSource.Factory =
DefaultHttpDataSource.Factory()
val videoItem: MediaItem = MediaItem.Builder()
@ -691,10 +684,6 @@ class PlayerFragment : Fragment() {
}
}
// /exoPlayer.getMediaItemAt(5)
exoPlayer.prepare()
exoPlayer.play()
view.findViewById<ImageButton>(R.id.quality_select).setOnClickListener {
// Dialog for quality selection
val builder: MaterialAlertDialogBuilder? = activity?.let {
@ -779,13 +768,21 @@ class PlayerFragment : Fragment() {
cronetDataSourceFactory
)
// handles the audio focus
val audioAttributes = AudioAttributes.Builder()
.setUsage(C.USAGE_MEDIA)
.setContentType(C.CONTENT_TYPE_MOVIE)
.build()
// handles the duration of media to retain in the buffer prior to the current playback position (for fast backward seeking)
val loadControl = DefaultLoadControl.Builder()
// cache the last three minutes
.setBackBuffer(1000 * 60 * 3, true)
.build()
exoPlayer = ExoPlayer.Builder(view.context)
.setMediaSourceFactory(DefaultMediaSourceFactory(dataSourceFactory))
.setLoadControl(loadControl)
.setSeekBackIncrementMs(5000)
.setSeekForwardIncrementMs(5000)
.build()
@ -944,6 +941,7 @@ class PlayerFragment : Fragment() {
commentsRecView.adapter = commentsAdapter
nextPage = commentsResponse.nextpage
commentsLoaded = true
isLoading = false
}
}