diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawAudioSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawAudioSource.kt index 35435f95..239a3ef9 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawAudioSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawAudioSource.kt @@ -4,6 +4,8 @@ import com.caoccao.javet.values.reference.V8ValueObject import com.futo.platformplayer.api.media.models.streams.sources.IAudioSource import com.futo.platformplayer.api.media.models.streams.sources.IDashManifestSource import com.futo.platformplayer.api.media.models.streams.sources.IVideoUrlSource +import com.futo.platformplayer.api.media.models.streams.sources.other.IStreamMetaDataSource +import com.futo.platformplayer.api.media.models.streams.sources.other.StreamMetaData import com.futo.platformplayer.api.media.platforms.js.DevJSClient import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.engine.IV8PluginConfig @@ -14,7 +16,7 @@ import com.futo.platformplayer.getOrThrow import com.futo.platformplayer.others.Language import com.futo.platformplayer.states.StateDeveloper -class JSDashManifestRawAudioSource : JSSource, IAudioSource, IJSDashManifestRawSource { +class JSDashManifestRawAudioSource : JSSource, IAudioSource, IJSDashManifestRawSource, IStreamMetaDataSource { override val container : String = "application/dash+xml"; override val name : String; override val codec: String; @@ -29,6 +31,8 @@ class JSDashManifestRawAudioSource : JSSource, IAudioSource, IJSDashManifestRawS override val hasGenerate: Boolean; + override var streamMetaData: StreamMetaData? = null; + constructor(plugin: JSClient, obj: V8ValueObject) : super(TYPE_DASH_RAW, plugin, obj) { val contextName = "DashRawSource"; val config = plugin.config; @@ -50,15 +54,28 @@ class JSDashManifestRawAudioSource : JSSource, IAudioSource, IJSDashManifestRawS throw IllegalStateException("Source object already closed"); val plugin = _plugin.getUnderlyingPlugin(); + + var result: String? = null; if(_plugin is DevJSClient) - return StateDeveloper.instance.handleDevCall(_plugin.devID, "DashManifestRaw", false) { + result = StateDeveloper.instance.handleDevCall(_plugin.devID, "DashManifestRaw", false) { _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw", "dashManifestRaw.generate()") { _obj.invokeString("generate"); } } else - return _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw", "dashManifestRaw.generate()") { + result = _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw", "dashManifestRaw.generate()") { _obj.invokeString("generate"); } + + if(result != null){ + val initStart = _obj.getOrDefault(_config, "initStart", "JSDashManifestRawSource", null) ?: 0; + val initEnd = _obj.getOrDefault(_config, "initEnd", "JSDashManifestRawSource", null) ?: 0; + val indexStart = _obj.getOrDefault(_config, "indexStart", "JSDashManifestRawSource", null) ?: 0; + val indexEnd = _obj.getOrDefault(_config, "indexEnd", "JSDashManifestRawSource", null) ?: 0; + if(initEnd > 0 && indexStart > 0 && indexEnd > 0) { + streamMetaData = StreamMetaData(initStart, initEnd, indexStart, indexEnd); + } + } + return result; } } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawSource.kt index cfe20f46..88511a52 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestRawSource.kt @@ -6,6 +6,8 @@ import com.caoccao.javet.values.reference.V8ValueObject import com.futo.platformplayer.api.media.models.streams.sources.IDashManifestSource import com.futo.platformplayer.api.media.models.streams.sources.IVideoSource import com.futo.platformplayer.api.media.models.streams.sources.IVideoUrlSource +import com.futo.platformplayer.api.media.models.streams.sources.other.IStreamMetaDataSource +import com.futo.platformplayer.api.media.models.streams.sources.other.StreamMetaData import com.futo.platformplayer.api.media.platforms.js.DevJSClient import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.engine.IV8PluginConfig @@ -20,7 +22,7 @@ interface IJSDashManifestRawSource { var manifest: String?; fun generate(): String?; } -open class JSDashManifestRawSource: JSSource, IVideoSource, IJSDashManifestRawSource { +open class JSDashManifestRawSource: JSSource, IVideoSource, IJSDashManifestRawSource, IStreamMetaDataSource { override val container : String = "application/dash+xml"; override val name : String; override val width: Int; @@ -36,6 +38,8 @@ open class JSDashManifestRawSource: JSSource, IVideoSource, IJSDashManifestRawSo override val hasGenerate: Boolean; val canMerge: Boolean; + override var streamMetaData: StreamMetaData? = null; + constructor(plugin: JSClient, obj: V8ValueObject) : super(TYPE_DASH_RAW, plugin, obj) { val contextName = "DashRawSource"; val config = plugin.config; @@ -57,17 +61,30 @@ open class JSDashManifestRawSource: JSSource, IVideoSource, IJSDashManifestRawSo return manifest; if(_obj.isClosed) throw IllegalStateException("Source object already closed"); + + var result: String? = null; if(_plugin is DevJSClient) { - return StateDeveloper.instance.handleDevCall(_plugin.devID, "DashManifestRawSource.generate()") { + result = StateDeveloper.instance.handleDevCall(_plugin.devID, "DashManifestRawSource.generate()") { _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw.generate", "generate()", { _obj.invokeString("generate"); }); } } else - return _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw.generate", "generate()", { + result = _plugin.getUnderlyingPlugin().catchScriptErrors("DashManifestRaw.generate", "generate()", { _obj.invokeString("generate"); }); + + if(result != null){ + val initStart = _obj.getOrDefault(_config, "initStart", "JSDashManifestRawSource", null) ?: 0; + val initEnd = _obj.getOrDefault(_config, "initEnd", "JSDashManifestRawSource", null) ?: 0; + val indexStart = _obj.getOrDefault(_config, "indexStart", "JSDashManifestRawSource", null) ?: 0; + val indexEnd = _obj.getOrDefault(_config, "indexEnd", "JSDashManifestRawSource", null) ?: 0; + if(initEnd > 0 && indexStart > 0 && indexEnd > 0) { + streamMetaData = StreamMetaData(initStart, initEnd, indexStart, indexEnd); + } + } + return result; } } @@ -100,12 +117,16 @@ class JSDashManifestMergingRawSource( if(videoDash == null) return null; //TODO: Temporary simple solution..make more reliable version + + var result: String? = null; val audioAdaptationSet = adaptationSetRegex.find(audioDash!!); if(audioAdaptationSet != null) { - return videoDash.replace("", "\n" + audioAdaptationSet.value) + result = videoDash.replace("", "\n" + audioAdaptationSet.value) } else - return videoDash; + result = videoDash; + + return result; } companion object {