added initial drm support for audio url sources

This commit is contained in:
Kai DeLorenzo 2024-05-17 18:45:44 -04:00
parent 88c8dbcb7c
commit ce0f98055f
No known key found for this signature in database
5 changed files with 12 additions and 76 deletions

View file

@ -1,56 +0,0 @@
package com.futo.platformplayer.api.media.models.streams.sources
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.others.Language
class AudioUrlWidevineSource(
override val streamMetaData: StreamMetaData?,
override val name: String,
val url: String,
override val bitrate: Int,
override val container: String = "",
override val codec: String = "",
override val language: String = Language.UNKNOWN,
override val duration: Long? = null,
override var priority: Boolean = false,
private val bearerToken: String,
private val licenseUri: String
) : IAudioUrlWidevineSource, IStreamMetaDataSource {
override fun getAudioUrl(): String {
return url
}
override fun getBearerToken(): String {
return bearerToken
}
override fun getLicenseUri(): String {
return licenseUri
}
companion object {
fun fromUrlSource(source: IAudioUrlWidevineSource?): AudioUrlWidevineSource? {
if (source == null)
return null
val streamData = if (source is IStreamMetaDataSource)
source.streamMetaData else null
return AudioUrlWidevineSource(
streamData,
source.name,
source.getAudioUrl(),
source.bitrate,
source.container,
source.codec,
source.language,
source.duration,
source.priority,
source.getBearerToken(),
source.getLicenseUri()
)
}
}
}

View file

@ -1,6 +1,6 @@
package com.futo.platformplayer.api.media.models.streams.sources
interface IAudioUrlWidevineSource : IAudioUrlSource {
fun getBearerToken(): String
fun getLicenseUri(): String
val bearerToken: String
val licenseUri: String
}

View file

@ -5,20 +5,12 @@ import com.futo.platformplayer.api.media.models.streams.sources.IAudioUrlWidevin
import com.futo.platformplayer.api.media.platforms.js.JSClient
import com.futo.platformplayer.getOrThrow
class JSAudioUrlWidevineSource(plugin: JSClient, obj: V8ValueObject) : IAudioUrlWidevineSource,
JSAudioUrlSource(plugin, obj) {
private val bearerToken: String
private val licenseUri: String
class JSAudioUrlWidevineSource : JSAudioUrlSource, IAudioUrlWidevineSource {
override val bearerToken: String
override val licenseUri: String
override fun getBearerToken(): String {
return bearerToken
}
override fun getLicenseUri(): String {
return licenseUri
}
init {
@Suppress("ConvertSecondaryConstructorToPrimary")
constructor(plugin: JSClient, obj: V8ValueObject) : super(plugin, obj) {
val contextName = "JSAudioUrlWidevineSource"
val config = plugin.config
bearerToken = _obj.getOrThrow(config, "bearerToken", contextName)
@ -29,4 +21,4 @@ class JSAudioUrlWidevineSource(plugin: JSClient, obj: V8ValueObject) : IAudioUrl
val url = getAudioUrl()
return "(name=$name, container=$container, bitrate=$bitrate, codec=$codec, url=$url, language=$language, duration=$duration, bearerToken=$bearerToken, licenseUri=$licenseUri)"
}
}
}

View file

@ -66,7 +66,7 @@ abstract class JSSource {
const val TYPE_VIDEO_WITH_METADATA = "VideoUrlRangeSource";
const val TYPE_DASH = "DashSource";
const val TYPE_HLS = "HLSSource";
private const val TYPE_AUDIO_WIDEVINE = "AudioUrlWidevineSource"
private const val TYPE_AUDIOURL_WIDEVINE = "AudioUrlWidevineSource"
fun fromV8VideoNullable(plugin: JSClient, obj: V8Value?) : IVideoSource? = obj.orNull { fromV8Video(plugin, it as V8ValueObject) };
fun fromV8Video(plugin: JSClient, obj: V8ValueObject) : IVideoSource {
@ -89,7 +89,7 @@ abstract class JSSource {
return when(type) {
TYPE_HLS -> JSHLSManifestAudioSource.fromV8HLS(plugin, obj);
TYPE_AUDIOURL -> JSAudioUrlSource(plugin, obj);
TYPE_AUDIO_WIDEVINE -> JSAudioUrlWidevineSource(plugin, obj);
TYPE_AUDIOURL_WIDEVINE -> JSAudioUrlWidevineSource(plugin, obj);
TYPE_AUDIO_WITH_METADATA -> JSAudioUrlRangeSource(plugin, obj);
else -> throw NotImplementedError("Unknown type ${type}");
}

View file

@ -519,7 +519,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
else
DefaultHttpDataSource.Factory().setUserAgent(DEFAULT_USER_AGENT)
val httpRequestHeaders = mapOf("Authorization" to "Bearer " + audioSource.getBearerToken())
val httpRequestHeaders = mapOf("Authorization" to "Bearer " + audioSource.bearerToken)
val provider = DefaultDrmSessionManagerProvider()
provider.setDrmHttpDataSourceFactory(dataSource)
_lastAudioMediaSource = ProgressiveMediaSource.Factory(dataSource)
@ -528,7 +528,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
MediaItem.Builder()
.setUri(audioSource.getAudioUrl()).setDrmConfiguration(
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
.setLicenseUri(audioSource.getLicenseUri())
.setLicenseUri(audioSource.licenseUri)
.setMultiSession(true)
.setLicenseRequestHeaders(httpRequestHeaders)
.build()