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 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.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.framework.CastContext
|
import com.google.android.gms.cast.framework.CastContext
|
||||||
|
|
@ -235,6 +236,15 @@ class FlutterCastFrameworkPlugin : FlutterPlugin, MethodCallHandler, ActivityAwa
|
||||||
val mediaLoadRequest = getMediaLoadRequestData(request)
|
val mediaLoadRequest = getMediaLoadRequestData(request)
|
||||||
remoteMediaClient.load(mediaLoadRequest)
|
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 ->
|
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