Skip to content

Android SDK

The VaultStream Android SDK provides native player integration for Android applications (phone, tablet, and Android TV).

Installation

Add the VaultStream repository and dependency to your build.gradle.kts:

repositories {
    maven { url = uri("https://maven.cyfr.technology/releases") }
}

dependencies {
    implementation("technology.cyfr:vaultstream-player:2.1.0")
}

Quick Start

import technology.cyfr.vaultstream.VSPlayer
import technology.cyfr.vaultstream.VSConfig

class MainActivity : ComponentActivity() {
    private lateinit var player: VSPlayer

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val playerView = findViewById<VSPlayerView>(R.id.player_view)

        player = VSPlayer.Builder(this)
            .contentId("c_7a3b9f1d")
            .jwt("<USER_SESSION_JWT>")
            .theme(VSTheme.DARK)
            .autoplay(true)
            .showControls(true)
            .build()

        player.attach(playerView)
        player.play()
    }
}

Configuration

val config = VSConfig(
    contentId = "c_7a3b9f1d",
    jwt = "<JWT>",
    theme = VSTheme.DARK,
    autoplay = false,
    startPositionMs = 0L,
    quality = VSQuality.AUTO,
    branding = VSBranding(
        logoUrl = "https://acme.corp/logo-white.svg",
        accentColor = Color.parseColor("#2563eb"),
        brandName = "Acme Training"
    )
)

val player = VSPlayer.Builder(this)
    .config(config)
    .listener(object : VSPlayerListener {
        override fun onReady() { Log.d("VS", "Ready") }
        override fun onPlay() { Log.d("VS", "Playing") }
        override fun onPause() { Log.d("VS", "Paused") }
        override fun onComplete() { Log.d("VS", "Complete") }
        override fun onError(error: VSError) { Log.e("VS", error.message) }
        override fun onProgress(percent: Float) {
            if (percent > 0.9f) Log.d("VS", "Near complete")
        }
    })
    .build()

Android TV Support

The SDK includes built-in D-pad navigation, focus management, and leanback-optimized controls:

player.setTVMode(
    TVConfig(
        useDpadNavigation = true,
        showNowPlayingCard = true,
        channelName = "Training Videos"
    )
)

Offline Download

player.download(contentId, quality = VSQuality.HD) { progress ->
    updateProgressBar(progress.percent)
}

// Play downloaded content
player.playOffline(contentId)

ProGuard / R8

Add to proguard-rules.pro:

-keep class technology.cyfr.vaultstream.** { *; }
-dontwarn technology.cyfr.vaultstream.internal.**