From f48651310508d1f344df17d15fe762e1eafb749b Mon Sep 17 00:00:00 2001 From: Kelvin Date: Tue, 24 Oct 2023 23:10:15 +0200 Subject: [PATCH] Casting HLS fixed --- .../platformplayer/casting/StateCasting.kt | 22 ++++++++++++++----- .../exceptions/UnsupportedCastException.kt | 6 +++++ .../mainactivity/main/VideoDetailView.kt | 5 +++++ 3 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/futo/platformplayer/exceptions/UnsupportedCastException.kt diff --git a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt index a4a14c37..493218a2 100644 --- a/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt +++ b/app/src/main/java/com/futo/platformplayer/casting/StateCasting.kt @@ -12,6 +12,7 @@ import com.futo.platformplayer.api.media.models.video.IPlatformVideoDetails import com.futo.platformplayer.builders.DashBuilder import com.futo.platformplayer.constructs.Event1 import com.futo.platformplayer.constructs.Event2 +import com.futo.platformplayer.exceptions.UnsupportedCastException import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.models.CastingDeviceInfo import com.futo.platformplayer.states.StateApp @@ -352,16 +353,25 @@ class StateCasting { } } } else { - if (videoSource is IVideoUrlSource) { + if (videoSource is IVideoUrlSource) ad.loadVideo("BUFFERED", videoSource.container, videoSource.getVideoUrl(), resumePosition, video.duration.toDouble()); - } else if (audioSource is IAudioUrlSource) { + else if(videoSource is IHLSManifestSource) + ad.loadVideo("BUFFERED", videoSource.container, videoSource.url, resumePosition, video.duration.toDouble()); + else if (audioSource is IAudioUrlSource) ad.loadVideo("BUFFERED", audioSource.container, audioSource.getAudioUrl(), resumePosition, video.duration.toDouble()); - } else if (videoSource is LocalVideoSource) { + else if(audioSource is IHLSManifestAudioSource) + ad.loadVideo("BUFFERED", audioSource.container, audioSource.url, resumePosition, video.duration.toDouble()); + else if (videoSource is LocalVideoSource) castLocalVideo(video, videoSource, resumePosition); - } else if (audioSource is LocalAudioSource) { + else if (audioSource is LocalAudioSource) castLocalAudio(video, audioSource, resumePosition); - } else { - throw Exception("Unhandled source type videoSource=$videoSource audioSource=$audioSource subtitleSource=$subtitleSource"); + else { + var str = listOf( + if(videoSource != null) "Video: ${videoSource::class.java.simpleName}" else null, + if(audioSource != null) "Audio: ${audioSource::class.java.simpleName}" else null, + if(subtitleSource != null) "Subtitles: ${subtitleSource::class.java.simpleName}" else null + ).filterNotNull().joinToString(", "); + throw UnsupportedCastException(str); } } diff --git a/app/src/main/java/com/futo/platformplayer/exceptions/UnsupportedCastException.kt b/app/src/main/java/com/futo/platformplayer/exceptions/UnsupportedCastException.kt new file mode 100644 index 00000000..df83e884 --- /dev/null +++ b/app/src/main/java/com/futo/platformplayer/exceptions/UnsupportedCastException.kt @@ -0,0 +1,6 @@ +package com.futo.platformplayer.exceptions + +import java.lang.Exception + +class UnsupportedCastException(msg: String) : Exception(msg) { +} \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt index b92b3e5d..ce230698 100644 --- a/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt +++ b/app/src/main/java/com/futo/platformplayer/fragment/mainactivity/main/VideoDetailView.kt @@ -62,6 +62,7 @@ import com.futo.platformplayer.engine.exceptions.ScriptAgeException import com.futo.platformplayer.engine.exceptions.ScriptException import com.futo.platformplayer.engine.exceptions.ScriptImplementationException import com.futo.platformplayer.engine.exceptions.ScriptUnavailableException +import com.futo.platformplayer.exceptions.UnsupportedCastException import com.futo.platformplayer.helpers.VideoHelper import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.polycentric.PolycentricCache @@ -1254,6 +1255,10 @@ class VideoDetailView : ConstraintLayout { _lastVideoSource = videoSource; _lastAudioSource = audioSource; } + catch(ex: UnsupportedCastException) { + Logger.e(TAG, "Failed to load cast media", ex); + UIDialogs.showGeneralErrorDialog(context, "Unsupported Cast format", ex); + } catch(ex: Throwable) { Logger.e(TAG, "Failed to load media", ex); UIDialogs.showGeneralErrorDialog(context, "Failed to load media", ex);