Integrated JWPlayer
implemented playerView on both fragments theme 1 and theme 2 Full screen activity LiveStreamPlayerActivity
This commit is contained in:
87
app/src/main/java/com/woka/players/KeepScreenOnHandler.kt
Normal file
87
app/src/main/java/com/woka/players/KeepScreenOnHandler.kt
Normal file
@@ -0,0 +1,87 @@
|
||||
package com.woka.players
|
||||
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import com.jwplayer.pub.api.JWPlayer
|
||||
import com.jwplayer.pub.api.events.AdCompleteEvent
|
||||
import com.jwplayer.pub.api.events.AdErrorEvent
|
||||
import com.jwplayer.pub.api.events.AdPauseEvent
|
||||
import com.jwplayer.pub.api.events.AdPlayEvent
|
||||
import com.jwplayer.pub.api.events.AdSkippedEvent
|
||||
import com.jwplayer.pub.api.events.CompleteEvent
|
||||
import com.jwplayer.pub.api.events.ErrorEvent
|
||||
import com.jwplayer.pub.api.events.EventType
|
||||
import com.jwplayer.pub.api.events.PauseEvent
|
||||
import com.jwplayer.pub.api.events.PlayEvent
|
||||
import com.jwplayer.pub.api.events.listeners.AdvertisingEvents.OnAdCompleteListener
|
||||
import com.jwplayer.pub.api.events.listeners.AdvertisingEvents.OnAdErrorListener
|
||||
import com.jwplayer.pub.api.events.listeners.AdvertisingEvents.OnAdPauseListener
|
||||
import com.jwplayer.pub.api.events.listeners.AdvertisingEvents.OnAdPlayListener
|
||||
import com.jwplayer.pub.api.events.listeners.AdvertisingEvents.OnAdSkippedListener
|
||||
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents
|
||||
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents.OnPauseListener
|
||||
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents.OnPlayListener
|
||||
|
||||
class KeepScreenOnHandler(player: JWPlayer, window: Window) : OnPlayListener,
|
||||
OnPauseListener, VideoPlayerEvents.OnCompleteListener, VideoPlayerEvents.OnErrorListener,
|
||||
OnAdPlayListener, OnAdPauseListener, OnAdCompleteListener, OnAdSkippedListener,
|
||||
OnAdErrorListener {
|
||||
|
||||
private val mWindow: Window
|
||||
|
||||
init {
|
||||
player.addListener(EventType.PLAY, this)
|
||||
player.addListener(EventType.PAUSE, this)
|
||||
player.addListener(EventType.COMPLETE, this)
|
||||
player.addListener(EventType.ERROR, this)
|
||||
player.addListener(EventType.AD_PLAY, this)
|
||||
player.addListener(EventType.AD_PAUSE, this)
|
||||
player.addListener(EventType.AD_COMPLETE, this)
|
||||
player.addListener(EventType.AD_ERROR, this)
|
||||
mWindow = window
|
||||
}
|
||||
|
||||
private fun updateWakeLock(enable: Boolean) {
|
||||
if (enable) {
|
||||
mWindow.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
} else {
|
||||
mWindow.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onError(errorEvent: ErrorEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onAdPlay(adPlayEvent: AdPlayEvent) {
|
||||
updateWakeLock(true)
|
||||
}
|
||||
|
||||
override fun onAdPause(adPauseEvent: AdPauseEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onAdComplete(adCompleteEvent: AdCompleteEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onAdSkipped(adSkippedEvent: AdSkippedEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onAdError(adErrorEvent: AdErrorEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onComplete(completeEvent: CompleteEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onPause(pauseEvent: PauseEvent) {
|
||||
updateWakeLock(false)
|
||||
}
|
||||
|
||||
override fun onPlay(playEvent: PlayEvent) {
|
||||
updateWakeLock(true)
|
||||
}
|
||||
}
|
||||
102
app/src/main/java/com/woka/players/LiveStreamPlayerActivity.kt
Normal file
102
app/src/main/java/com/woka/players/LiveStreamPlayerActivity.kt
Normal file
@@ -0,0 +1,102 @@
|
||||
package com.woka.players
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.view.ViewCompat
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.core.view.WindowInsetsCompat
|
||||
import com.jwplayer.pub.api.JWPlayer
|
||||
import com.jwplayer.pub.api.configuration.PlayerConfig
|
||||
import com.jwplayer.pub.api.events.EventType
|
||||
import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents
|
||||
import com.jwplayer.pub.api.fullscreen.FullscreenHandler
|
||||
import com.jwplayer.pub.api.media.playlists.PlaylistItem
|
||||
import com.woka.databinding.ActivityLiveStreamPlayerBinding
|
||||
|
||||
class LiveStreamPlayerActivity : AppCompatActivity(), FullscreenHandler {
|
||||
|
||||
companion object{
|
||||
private const val TAG = "LiveStreamPlayerActivity_tag"
|
||||
}
|
||||
|
||||
private lateinit var binding: ActivityLiveStreamPlayerBinding
|
||||
|
||||
private lateinit var player: JWPlayer
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
enableEdgeToEdge()
|
||||
binding = ActivityLiveStreamPlayerBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->
|
||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
||||
insets
|
||||
}
|
||||
|
||||
val windowInsetsController =
|
||||
WindowCompat.getInsetsController(window, window.decorView)
|
||||
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
|
||||
|
||||
setUpPlayer()
|
||||
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
player.stop()
|
||||
}
|
||||
|
||||
private fun setUpPlayer() {
|
||||
player = binding.playerView.player
|
||||
|
||||
player.setFullscreenHandler(this)
|
||||
|
||||
player.setFullscreen(true, false)
|
||||
|
||||
player.addListener(EventType.ERROR, VideoPlayerEvents.OnErrorListener {
|
||||
Log.d(TAG, "onError: ${it.errorCode}")
|
||||
Log.d(TAG, "onError: ${it.exception}")
|
||||
Log.d(TAG, "onError: ${it.message}")
|
||||
})
|
||||
|
||||
player.addListener(EventType.SETUP_ERROR, VideoPlayerEvents.OnSetupErrorListener {
|
||||
Log.d(TAG, "setUpPlayer: $it")
|
||||
})
|
||||
|
||||
// to keep up the screen om when video is being played
|
||||
KeepScreenOnHandler(player, window)
|
||||
|
||||
val playlistItem = PlaylistItem.Builder()
|
||||
.file("https://d3volyx7jx7oal.cloudfront.net/master.m3u8")
|
||||
.mediaId("YR5pnlIM")
|
||||
.build()
|
||||
val playlist: MutableList<PlaylistItem> = ArrayList()
|
||||
playlist.add(playlistItem)
|
||||
|
||||
val config =
|
||||
PlayerConfig.Builder()
|
||||
.playlist(playlist)
|
||||
.build()
|
||||
player.setup(config)
|
||||
player.play()
|
||||
}
|
||||
|
||||
override fun onFullscreenRequested() {}
|
||||
|
||||
override fun onFullscreenExitRequested() {
|
||||
player.stop()
|
||||
onBackPressedDispatcher.onBackPressed()
|
||||
}
|
||||
|
||||
override fun onAllowRotationChanged(allowRotation: Boolean) {}
|
||||
|
||||
override fun updateLayoutParams(layoutParams: ViewGroup.LayoutParams?) {}
|
||||
|
||||
override fun setUseFullscreenLayoutFlags(flags: Boolean) {}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user