mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2025-08-05 15:49:22 +00:00
added initial drm support for audio url sources
This commit is contained in:
parent
88c8dbcb7c
commit
ce0f98055f
5 changed files with 12 additions and 76 deletions
|
@ -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()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,6 +1,6 @@
|
||||||
package com.futo.platformplayer.api.media.models.streams.sources
|
package com.futo.platformplayer.api.media.models.streams.sources
|
||||||
|
|
||||||
interface IAudioUrlWidevineSource : IAudioUrlSource {
|
interface IAudioUrlWidevineSource : IAudioUrlSource {
|
||||||
fun getBearerToken(): String
|
val bearerToken: String
|
||||||
fun getLicenseUri(): String
|
val licenseUri: String
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.api.media.platforms.js.JSClient
|
||||||
import com.futo.platformplayer.getOrThrow
|
import com.futo.platformplayer.getOrThrow
|
||||||
|
|
||||||
class JSAudioUrlWidevineSource(plugin: JSClient, obj: V8ValueObject) : IAudioUrlWidevineSource,
|
class JSAudioUrlWidevineSource : JSAudioUrlSource, IAudioUrlWidevineSource {
|
||||||
JSAudioUrlSource(plugin, obj) {
|
override val bearerToken: String
|
||||||
private val bearerToken: String
|
override val licenseUri: String
|
||||||
private val licenseUri: String
|
|
||||||
|
|
||||||
override fun getBearerToken(): String {
|
@Suppress("ConvertSecondaryConstructorToPrimary")
|
||||||
return bearerToken
|
constructor(plugin: JSClient, obj: V8ValueObject) : super(plugin, obj) {
|
||||||
}
|
|
||||||
|
|
||||||
override fun getLicenseUri(): String {
|
|
||||||
return licenseUri
|
|
||||||
}
|
|
||||||
|
|
||||||
init {
|
|
||||||
val contextName = "JSAudioUrlWidevineSource"
|
val contextName = "JSAudioUrlWidevineSource"
|
||||||
val config = plugin.config
|
val config = plugin.config
|
||||||
bearerToken = _obj.getOrThrow(config, "bearerToken", contextName)
|
bearerToken = _obj.getOrThrow(config, "bearerToken", contextName)
|
||||||
|
|
|
@ -66,7 +66,7 @@ abstract class JSSource {
|
||||||
const val TYPE_VIDEO_WITH_METADATA = "VideoUrlRangeSource";
|
const val TYPE_VIDEO_WITH_METADATA = "VideoUrlRangeSource";
|
||||||
const val TYPE_DASH = "DashSource";
|
const val TYPE_DASH = "DashSource";
|
||||||
const val TYPE_HLS = "HLSSource";
|
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 fromV8VideoNullable(plugin: JSClient, obj: V8Value?) : IVideoSource? = obj.orNull { fromV8Video(plugin, it as V8ValueObject) };
|
||||||
fun fromV8Video(plugin: JSClient, obj: V8ValueObject) : IVideoSource {
|
fun fromV8Video(plugin: JSClient, obj: V8ValueObject) : IVideoSource {
|
||||||
|
@ -89,7 +89,7 @@ abstract class JSSource {
|
||||||
return when(type) {
|
return when(type) {
|
||||||
TYPE_HLS -> JSHLSManifestAudioSource.fromV8HLS(plugin, obj);
|
TYPE_HLS -> JSHLSManifestAudioSource.fromV8HLS(plugin, obj);
|
||||||
TYPE_AUDIOURL -> JSAudioUrlSource(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);
|
TYPE_AUDIO_WITH_METADATA -> JSAudioUrlRangeSource(plugin, obj);
|
||||||
else -> throw NotImplementedError("Unknown type ${type}");
|
else -> throw NotImplementedError("Unknown type ${type}");
|
||||||
}
|
}
|
||||||
|
|
|
@ -519,7 +519,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
else
|
else
|
||||||
DefaultHttpDataSource.Factory().setUserAgent(DEFAULT_USER_AGENT)
|
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()
|
val provider = DefaultDrmSessionManagerProvider()
|
||||||
provider.setDrmHttpDataSourceFactory(dataSource)
|
provider.setDrmHttpDataSourceFactory(dataSource)
|
||||||
_lastAudioMediaSource = ProgressiveMediaSource.Factory(dataSource)
|
_lastAudioMediaSource = ProgressiveMediaSource.Factory(dataSource)
|
||||||
|
@ -528,7 +528,7 @@ abstract class FutoVideoPlayerBase : RelativeLayout {
|
||||||
MediaItem.Builder()
|
MediaItem.Builder()
|
||||||
.setUri(audioSource.getAudioUrl()).setDrmConfiguration(
|
.setUri(audioSource.getAudioUrl()).setDrmConfiguration(
|
||||||
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||||
.setLicenseUri(audioSource.getLicenseUri())
|
.setLicenseUri(audioSource.licenseUri)
|
||||||
.setMultiSession(true)
|
.setMultiSession(true)
|
||||||
.setLicenseRequestHeaders(httpRequestHeaders)
|
.setLicenseRequestHeaders(httpRequestHeaders)
|
||||||
.build()
|
.build()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue