RemoteMediaClient GetMediaInfo for Android
This commit is contained in:
parent
d7a8bb5f90
commit
b8f8b66c00
3 changed files with 125 additions and 8 deletions
|
|
@ -9,6 +9,7 @@ import androidx.lifecycle.OnLifecycleEvent
|
|||
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.getMediaLoadRequestData
|
||||
import com.google.android.gms.cast.MediaError
|
||||
import com.google.android.gms.cast.framework.CastContext
|
||||
|
|
@ -100,7 +101,7 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
private val mSessionManagerListener = CastSessionManagerListener()
|
||||
private val remoteMediaClientListener = RemoteMediaClientListener()
|
||||
|
||||
private var castApi : PlatformBridgeApis.CastHostApi? = null
|
||||
private var castApi: PlatformBridgeApis.CastHostApi? = null
|
||||
private var flutterApi: PlatformBridgeApis.CastFlutterApi? = null
|
||||
private var applicationContext: Context? = null
|
||||
private var activity: Activity? = null
|
||||
|
|
@ -171,43 +172,43 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
override fun onStatusUpdated() {
|
||||
Log.d(TAG, "RemoteMediaClient - onStatusUpdated")
|
||||
super.onStatusUpdated()
|
||||
flutterApi?.onStatusUpdated { }
|
||||
flutterApi?.onStatusUpdated { }
|
||||
}
|
||||
|
||||
override fun onMetadataUpdated() {
|
||||
Log.d(TAG, "RemoteMediaClient - onMetadataUpdated")
|
||||
super.onMetadataUpdated()
|
||||
flutterApi?.onMetadataUpdated { }
|
||||
flutterApi?.onMetadataUpdated { }
|
||||
}
|
||||
|
||||
override fun onQueueStatusUpdated() {
|
||||
Log.d(TAG, "RemoteMediaClient - onQueueStatusUpdated")
|
||||
super.onQueueStatusUpdated()
|
||||
flutterApi?.onQueueStatusUpdated { }
|
||||
flutterApi?.onQueueStatusUpdated { }
|
||||
}
|
||||
|
||||
override fun onPreloadStatusUpdated() {
|
||||
Log.d(TAG, "RemoteMediaClient - onPreloadStatusUpdated")
|
||||
super.onPreloadStatusUpdated()
|
||||
flutterApi?.onPreloadStatusUpdated { }
|
||||
flutterApi?.onPreloadStatusUpdated { }
|
||||
}
|
||||
|
||||
override fun onSendingRemoteMediaRequest() {
|
||||
Log.d(TAG, "RemoteMediaClient - onSendingRemoteMediaRequest")
|
||||
super.onSendingRemoteMediaRequest()
|
||||
flutterApi?.onSendingRemoteMediaRequest { }
|
||||
flutterApi?.onSendingRemoteMediaRequest { }
|
||||
}
|
||||
|
||||
override fun onAdBreakStatusUpdated() {
|
||||
Log.d(TAG, "RemoteMediaClient - onAdBreakStatusUpdated")
|
||||
super.onAdBreakStatusUpdated()
|
||||
flutterApi?.onAdBreakStatusUpdated { }
|
||||
flutterApi?.onAdBreakStatusUpdated { }
|
||||
}
|
||||
|
||||
override fun onMediaError(error: MediaError?) {
|
||||
Log.d(TAG, "RemoteMediaClient - onMediaError $error")
|
||||
super.onMediaError(error)
|
||||
flutterApi?.onMediaError { }
|
||||
flutterApi?.onMediaError { }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -235,6 +236,15 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
|||
val mediaLoadRequest = getMediaLoadRequestData(request)
|
||||
remoteMediaClient.load(mediaLoadRequest)
|
||||
}
|
||||
|
||||
override fun getMediaInfo(): PlatformBridgeApis.MediaInfo {
|
||||
val remoteMediaClient: RemoteMediaClient = remoteMediaClient
|
||||
?: return PlatformBridgeApis.MediaInfo()
|
||||
|
||||
val hostMediaInfo = remoteMediaClient.mediaInfo ?: return PlatformBridgeApis.MediaInfo()
|
||||
|
||||
return getFlutterMediaInfo(hostMediaInfo)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getOnNamespaceResult(oldSession: CastSession?, newSession: CastSession?) = PlatformBridgeApis.CastFlutterApi.Reply<MutableList<String>> { namespaces ->
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
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.common.images.WebImage
|
||||
|
||||
fun getFlutterMediaInfo(mediaInfo: MediaInfo): PlatformBridgeApis.MediaInfo {
|
||||
val flutterMediaMetadata = getFlutterMediaMetadata(mediaInfo.metadata)
|
||||
val flutterMediaTracks = getFlutterMediaTracks(mediaInfo.mediaTracks)
|
||||
val flutterStreamType = getFlutterStreamType(mediaInfo.streamType)
|
||||
|
||||
return PlatformBridgeApis.MediaInfo().apply {
|
||||
contentId = mediaInfo.contentId
|
||||
contentType = mediaInfo.contentType
|
||||
customDataAsJson = mediaInfo.customData?.toString()
|
||||
mediaMetadata = flutterMediaMetadata
|
||||
mediaTracks = flutterMediaTracks
|
||||
streamDuration = mediaInfo.streamDuration
|
||||
streamType = flutterStreamType
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterStreamType(streamType: Int): PlatformBridgeApis.StreamType {
|
||||
return when (streamType) {
|
||||
-1 -> PlatformBridgeApis.StreamType.invalid
|
||||
0 -> PlatformBridgeApis.StreamType.none
|
||||
1 -> PlatformBridgeApis.StreamType.buffered
|
||||
2 -> PlatformBridgeApis.StreamType.live
|
||||
else -> PlatformBridgeApis.StreamType.invalid
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterMediaTracks(mediaTracks: List<MediaTrack>): List<PlatformBridgeApis.MediaTrack> {
|
||||
return mediaTracks.map {
|
||||
getFlutterMediaTrack(it)
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterMediaTrack(mediaTrack: MediaTrack): PlatformBridgeApis.MediaTrack {
|
||||
val flutterSubtype = getFlutterSubtype(mediaTrack.subtype)
|
||||
val flutterType = getFlutterType(mediaTrack.type)
|
||||
|
||||
return PlatformBridgeApis.MediaTrack().apply {
|
||||
contentId = mediaTrack.contentId
|
||||
id = mediaTrack.id
|
||||
language = mediaTrack.language
|
||||
name = mediaTrack.name
|
||||
trackSubtype = flutterSubtype
|
||||
trackType = flutterType
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterType(type: Int): PlatformBridgeApis.TrackType {
|
||||
return when (type) {
|
||||
0 -> PlatformBridgeApis.TrackType.unknown
|
||||
1 -> PlatformBridgeApis.TrackType.text
|
||||
2 -> PlatformBridgeApis.TrackType.audio
|
||||
3 -> PlatformBridgeApis.TrackType.video
|
||||
else -> PlatformBridgeApis.TrackType.unknown
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterSubtype(subtype: Int): PlatformBridgeApis.TrackSubtype {
|
||||
return when (subtype) {
|
||||
-1 -> PlatformBridgeApis.TrackSubtype.unknown
|
||||
0 -> PlatformBridgeApis.TrackSubtype.none
|
||||
1 -> PlatformBridgeApis.TrackSubtype.subtitles
|
||||
2 -> PlatformBridgeApis.TrackSubtype.captions
|
||||
3 -> PlatformBridgeApis.TrackSubtype.descriptions
|
||||
4 -> PlatformBridgeApis.TrackSubtype.chapters
|
||||
5 -> PlatformBridgeApis.TrackSubtype.metadata
|
||||
else -> PlatformBridgeApis.TrackSubtype.unknown
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterMediaMetadata(mediaMetadata: MediaMetadata): PlatformBridgeApis.MediaMetadata {
|
||||
val flutterMediaType = getFlutterMediaType(mediaMetadata.mediaType)
|
||||
val flutterWebImages = getFlutterWebImages(mediaMetadata.images)
|
||||
|
||||
return PlatformBridgeApis.MediaMetadata().apply {
|
||||
mediaType = flutterMediaType
|
||||
webImages = flutterWebImages
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterWebImages(images: List<WebImage>): List<PlatformBridgeApis.WebImage> {
|
||||
return images.map {
|
||||
PlatformBridgeApis.WebImage().apply {
|
||||
url = it.url.toString()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getFlutterMediaType(mediaType: Int): PlatformBridgeApis.MediaType {
|
||||
return when (mediaType) {
|
||||
0 -> PlatformBridgeApis.MediaType.generic
|
||||
1 -> PlatformBridgeApis.MediaType.movie
|
||||
2 -> PlatformBridgeApis.MediaType.tvShow
|
||||
3 -> PlatformBridgeApis.MediaType.musicTrack
|
||||
4 -> PlatformBridgeApis.MediaType.photo
|
||||
5 -> PlatformBridgeApis.MediaType.audiobookChapter
|
||||
100 -> PlatformBridgeApis.MediaType.user
|
||||
else -> PlatformBridgeApis.MediaType.generic
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue