MediaStatus handling android
This commit is contained in:
parent
1b4e5ac33b
commit
b2cda81cca
2 changed files with 49 additions and 8 deletions
|
|
@ -11,8 +11,10 @@ import androidx.lifecycle.ProcessLifecycleOwner
|
|||
import com.gianlucaparadise.flutter_cast_framework.cast.CastDialogOpener
|
||||
import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
|
||||
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaInfo
|
||||
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaStatus
|
||||
import com.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData
|
||||
import com.google.android.gms.cast.MediaError
|
||||
import com.google.android.gms.cast.MediaStatus
|
||||
import com.google.android.gms.cast.MediaStatus.*
|
||||
import com.google.android.gms.cast.framework.CastContext
|
||||
import com.google.android.gms.cast.framework.CastSession
|
||||
|
|
@ -178,8 +180,10 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
|
||||
private inner class RemoteMediaClientListener : RemoteMediaClient.Callback(), RemoteMediaClient.ProgressListener {
|
||||
override fun onStatusUpdated() {
|
||||
val playerStateRaw = remoteMediaClient?.playerState ?: PLAYER_STATE_UNKNOWN
|
||||
val playerStateLabel = when (playerStateRaw) {
|
||||
val remoteMediaClient: RemoteMediaClient = remoteMediaClient ?: return
|
||||
val mediaStatus = remoteMediaClient.mediaStatus ?: return
|
||||
|
||||
val playerStateLabel = when (remoteMediaClient.playerState) {
|
||||
PLAYER_STATE_UNKNOWN -> "unknown"
|
||||
PLAYER_STATE_BUFFERING -> "buffering"
|
||||
PLAYER_STATE_IDLE -> "idle"
|
||||
|
|
@ -190,7 +194,9 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
}
|
||||
Log.d(TAG, "RemoteMediaClient - onStatusUpdated: $playerStateLabel")
|
||||
super.onStatusUpdated()
|
||||
flutterApi?.onStatusUpdated(playerStateRaw.toLong()) { }
|
||||
|
||||
val flutterMediaStatus = getFlutterMediaStatus(mediaStatus)
|
||||
flutterApi?.onStatusUpdated(flutterMediaStatus) { }
|
||||
}
|
||||
|
||||
override fun onMetadataUpdated() {
|
||||
|
|
@ -218,10 +224,14 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
}
|
||||
|
||||
override fun onAdBreakStatusUpdated() {
|
||||
val isPlayingAd = remoteMediaClient?.mediaStatus?.isPlayingAd
|
||||
val mediaStatus = remoteMediaClient?.mediaStatus ?: return
|
||||
|
||||
val isPlayingAd = mediaStatus.isPlayingAd
|
||||
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated - isPlayingAd: $isPlayingAd")
|
||||
super.onAdBreakStatusUpdated()
|
||||
flutterApi?.onAdBreakStatusUpdated { }
|
||||
|
||||
val flutterMediaStatus = getFlutterMediaStatus(mediaStatus)
|
||||
flutterApi?.onAdBreakStatusUpdated(flutterMediaStatus) { }
|
||||
}
|
||||
|
||||
override fun onMediaError(error: MediaError?) {
|
||||
|
|
|
|||
|
|
@ -1,11 +1,42 @@
|
|||
package com.gianlucaparadise.flutter_cast_framework.media
|
||||
|
||||
import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis
|
||||
import com.google.android.gms.cast.MediaInfo
|
||||
import com.google.android.gms.cast.MediaMetadata
|
||||
import com.google.android.gms.cast.MediaTrack
|
||||
import com.google.android.gms.cast.*
|
||||
import com.google.android.gms.common.images.WebImage
|
||||
|
||||
fun getFlutterMediaStatus(mediaStatus: MediaStatus): PlatformBridgeApis.MediaStatus {
|
||||
val flutterMediaInfo = getFlutterMediaInfo(mediaStatus.mediaInfo)
|
||||
val flutterPlayerState = getFlutterPlayerState(mediaStatus.playerState)
|
||||
val flutterAdBreakStatus = getFlutterAdBreakStatus(mediaStatus.adBreakStatus)
|
||||
|
||||
return PlatformBridgeApis.MediaStatus().apply {
|
||||
isPlayingAd = mediaStatus.isPlayingAd
|
||||
mediaInfo = flutterMediaInfo
|
||||
playerState = flutterPlayerState
|
||||
adBreakStatus = flutterAdBreakStatus
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterAdBreakStatus(adBreakStatus: AdBreakStatus?): PlatformBridgeApis.AdBreakStatus {
|
||||
return PlatformBridgeApis.AdBreakStatus().apply {
|
||||
adBreakId = adBreakStatus?.breakId ?: ""
|
||||
adBreakClipId = adBreakStatus?.breakClipId ?: ""
|
||||
whenSkippableMs = adBreakStatus?.whenSkippableInMs ?: -1
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterPlayerState(playerStateRaw: Int): PlatformBridgeApis.PlayerState {
|
||||
return when (playerStateRaw) {
|
||||
MediaStatus.PLAYER_STATE_UNKNOWN -> PlatformBridgeApis.PlayerState.unknown
|
||||
MediaStatus.PLAYER_STATE_BUFFERING -> PlatformBridgeApis.PlayerState.buffering
|
||||
MediaStatus.PLAYER_STATE_IDLE -> PlatformBridgeApis.PlayerState.idle
|
||||
MediaStatus.PLAYER_STATE_LOADING -> PlatformBridgeApis.PlayerState.loading
|
||||
MediaStatus.PLAYER_STATE_PAUSED -> PlatformBridgeApis.PlayerState.paused
|
||||
MediaStatus.PLAYER_STATE_PLAYING -> PlatformBridgeApis.PlayerState.playing
|
||||
else -> PlatformBridgeApis.PlayerState.unknown
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterMediaInfo(mediaInfo: MediaInfo): PlatformBridgeApis.MediaInfo {
|
||||
val flutterMediaMetadata = getFlutterMediaMetadata(mediaInfo.metadata)
|
||||
val flutterMediaTracks = getFlutterMediaTracks(mediaInfo.mediaTracks)
|
||||
|
|
|
|||
Loading…
Reference in a new issue