Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions app/src/main/java/com/tpstreams/player/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ class MainActivity : AppCompatActivity() {
// TPStreams Tab Buttons
findViewById<View>(R.id.btn_drm_video).setOnClickListener {
val intent = Intent(this, PlayerActivity::class.java).apply {
putExtra(EXTRA_ASSET_ID, "42h2tZ5fmNf")
putExtra(EXTRA_ACCESS_TOKEN, "9327e2d0-fa13-4288-902d-840f32cd0eed")
putExtra(EXTRA_ASSET_ID, "7xbZeQzR36h")
putExtra(EXTRA_ACCESS_TOKEN, "3d9838f3-db51-4fc3-8472-075ab5e40b64")
}
startActivity(intent)
}
Expand Down
13 changes: 12 additions & 1 deletion app/src/main/java/com/tpstreams/player/PlayerActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.tpstreams.player

import android.graphics.Color
import android.os.Bundle
import android.widget.Toast
import androidx.activity.viewModels
import androidx.annotation.OptIn
import androidx.appcompat.app.AppCompatActivity
import androidx.media3.common.util.UnstableApi
import com.tpstreams.player.constants.PlaybackError
import com.tpstreams.player.databinding.ActivityPlayerBinding

@OptIn(UnstableApi::class)
Expand All @@ -27,8 +29,17 @@ class PlayerActivity : AppCompatActivity() {
viewModel.initPlayer(assetId, accessToken, isTestpress)
viewModel.player?.setMaxResolution(1080)
binding.playerView.setVideoResolution(720)
binding.playerView.player = viewModel.player
viewModel.player?.listener = object : TPStreamsPlayer.Listener {
override fun onAccessTokenExpired(videoId: String, callback: (String) -> Unit) {}
override fun onError(error: PlaybackError, message: String) {}

override fun onSubtitleStateChanged(enabled: Boolean, language: String?) {
val state = if (enabled) "ON: $language" else "OFF"
Toast.makeText(this@PlayerActivity, "Subtitles $state and Language: $language", Toast.LENGTH_SHORT).show()
}
}

binding.playerView.player = viewModel.player

binding.playerView.setWatermarks(
listOf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ private constructor(
* probes complete. The UI can use this to show a "Diagnosing…" state.
*/
fun onNetworkDiagnosticsStarted() {}

fun onSubtitleStateChanged(enabled: Boolean, language: String?) {}
}

private var isPrepared = false
Expand All @@ -105,7 +107,11 @@ private constructor(
private val networkRecoveryHandler = NetworkRecoveryHandler(context)

private val textTrackManager: TextTrackManager by lazy {
TextTrackManager(exoPlayer, trackSelector)
TextTrackManager(
exoPlayer,
trackSelector,
onSubtitleStateChanged = { enabled, language -> _listener?.onSubtitleStateChanged(enabled, language) },
)
}
private val resolutionManager: ResolutionManager by lazy {
ResolutionManager(exoPlayer, trackSelector)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -627,4 +627,8 @@ internal class ViewPlayerListener(

override fun onNetworkDiagnosticsStarted() =
onNetworkDiagnosticsStartedAction()

override fun onSubtitleStateChanged(enabled: Boolean, language: String?) {
userListener?.onSubtitleStateChanged(enabled, language)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@ import androidx.media3.exoplayer.trackselection.DefaultTrackSelector
internal class TextTrackManager(
private val exoPlayer: ExoPlayer,
private val trackSelector: DefaultTrackSelector,
private val onSubtitleStateChanged: ((Boolean, String?) -> Unit)? = null,
) {

private var subtitleMetadata: Map<String, Boolean> = emptyMap()
private var previousSubtitleLanguage: String? = null

fun updateSubtitleMetadata(metadata: Map<String, Boolean>) {
subtitleMetadata = metadata
Expand Down Expand Up @@ -61,6 +63,12 @@ internal class TextTrackManager(
if (exoPlayer.isPlaying) {
exoPlayer.seekTo(currentPosition)
}

val enabled = language != null
if (language != previousSubtitleLanguage) {
previousSubtitleLanguage = language
onSubtitleStateChanged?.invoke(enabled, language)
}
}

fun getActiveTextTrack(): Pair<String, String>? {
Expand Down