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.CastDialogOpener
|
||||||
import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
|
import com.gianlucaparadise.flutter_cast_framework.cast.MessageCastingChannel
|
||||||
import com.gianlucaparadise.flutter_cast_framework.media.getFlutterMediaInfo
|
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.gianlucaparadise.flutter_cast_framework.media.getMediaLoadRequestData
|
||||||
import com.google.android.gms.cast.MediaError
|
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.MediaStatus.*
|
||||||
import com.google.android.gms.cast.framework.CastContext
|
import com.google.android.gms.cast.framework.CastContext
|
||||||
import com.google.android.gms.cast.framework.CastSession
|
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 {
|
private inner class RemoteMediaClientListener : RemoteMediaClient.Callback(), RemoteMediaClient.ProgressListener {
|
||||||
override fun onStatusUpdated() {
|
override fun onStatusUpdated() {
|
||||||
val playerStateRaw = remoteMediaClient?.playerState ?: PLAYER_STATE_UNKNOWN
|
val remoteMediaClient: RemoteMediaClient = remoteMediaClient ?: return
|
||||||
val playerStateLabel = when (playerStateRaw) {
|
val mediaStatus = remoteMediaClient.mediaStatus ?: return
|
||||||
|
|
||||||
|
val playerStateLabel = when (remoteMediaClient.playerState) {
|
||||||
PLAYER_STATE_UNKNOWN -> "unknown"
|
PLAYER_STATE_UNKNOWN -> "unknown"
|
||||||
PLAYER_STATE_BUFFERING -> "buffering"
|
PLAYER_STATE_BUFFERING -> "buffering"
|
||||||
PLAYER_STATE_IDLE -> "idle"
|
PLAYER_STATE_IDLE -> "idle"
|
||||||
|
|
@ -190,7 +194,9 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
}
|
}
|
||||||
Log.d(TAG, "RemoteMediaClient - onStatusUpdated: $playerStateLabel")
|
Log.d(TAG, "RemoteMediaClient - onStatusUpdated: $playerStateLabel")
|
||||||
super.onStatusUpdated()
|
super.onStatusUpdated()
|
||||||
flutterApi?.onStatusUpdated(playerStateRaw.toLong()) { }
|
|
||||||
|
val flutterMediaStatus = getFlutterMediaStatus(mediaStatus)
|
||||||
|
flutterApi?.onStatusUpdated(flutterMediaStatus) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMetadataUpdated() {
|
override fun onMetadataUpdated() {
|
||||||
|
|
@ -218,10 +224,14 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAdBreakStatusUpdated() {
|
override fun onAdBreakStatusUpdated() {
|
||||||
val isPlayingAd = remoteMediaClient?.mediaStatus?.isPlayingAd
|
val mediaStatus = remoteMediaClient?.mediaStatus ?: return
|
||||||
|
|
||||||
|
val isPlayingAd = mediaStatus.isPlayingAd
|
||||||
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated - isPlayingAd: $isPlayingAd")
|
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated - isPlayingAd: $isPlayingAd")
|
||||||
super.onAdBreakStatusUpdated()
|
super.onAdBreakStatusUpdated()
|
||||||
flutterApi?.onAdBreakStatusUpdated { }
|
|
||||||
|
val flutterMediaStatus = getFlutterMediaStatus(mediaStatus)
|
||||||
|
flutterApi?.onAdBreakStatusUpdated(flutterMediaStatus) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMediaError(error: MediaError?) {
|
override fun onMediaError(error: MediaError?) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,42 @@
|
||||||
package com.gianlucaparadise.flutter_cast_framework.media
|
package com.gianlucaparadise.flutter_cast_framework.media
|
||||||
|
|
||||||
import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis
|
import com.gianlucaparadise.flutter_cast_framework.PlatformBridgeApis
|
||||||
import com.google.android.gms.cast.MediaInfo
|
import com.google.android.gms.cast.*
|
||||||
import com.google.android.gms.cast.MediaMetadata
|
|
||||||
import com.google.android.gms.cast.MediaTrack
|
|
||||||
import com.google.android.gms.common.images.WebImage
|
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 {
|
fun getFlutterMediaInfo(mediaInfo: MediaInfo): PlatformBridgeApis.MediaInfo {
|
||||||
val flutterMediaMetadata = getFlutterMediaMetadata(mediaInfo.metadata)
|
val flutterMediaMetadata = getFlutterMediaMetadata(mediaInfo.metadata)
|
||||||
val flutterMediaTracks = getFlutterMediaTracks(mediaInfo.mediaTracks)
|
val flutterMediaTracks = getFlutterMediaTracks(mediaInfo.mediaTracks)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue