Skip to main content

API

What you learn​

You're instantiating DIVA Player in your app and relying on DIVA Back Office as the video streaming source.

The goal of this article is to build the simplest front-end to stream a video from the DIVA Back Office and call API endpoints to play and pause the video.

Before starting​

  • Ensure the DIVA Back Office instance you rely on is up and running.
  • Ask your video engineers team <videoId>, <settingsURL>, <languageCountryCode>, <userToken> and <sharedKey>.

Note: Don't use API to alter the video player or video streaming behaviors when instantiating DIVA Player. API endpoints are designed to allow the front-end to control the video player or video streaming behaviors after DIVA player has been initialized.

Instantiation​

Use the api property of the DivaFragment instance to access API object, which is the on the success callback of the DivaBoAdapter.createDivaFragment() method.

Use the following methods, callbacks, and event - ignore the others - and find their documentation inline:

  • general:
    • methods:
      • setTimelineIconsMinDistance
    • callbacks:
      • onTimelineMinDistanceReceived
  • player:
    • methods:
      • sendPlayerCommand
    • callbacks:
      • onPlaybackSessionChanged
      • onPlayerActionRequest
      • onPlayerDurationChanged
      • onPlayerPlaybackRateChanged
      • onPlayerPositionChanged
      • onPlayerStateChanged
      • onUserLiveChanged
      • onVideoShownChanged
      • onVolumeChanged
  • video:
    • methods:
      • none
    • callbacks:
      • onVideoEnded
      • onVideoMetadataReceived
  • watchTogether (mobile only):
    • methods:
      • setLauncherButton
    • callbacks:
      • none
    • events:
      • buttonVisibilityChange

Working sample code​

The following working code mutes the video once started:

package com.example.divaplayerhelloworld20

import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.deltatre.divaboadapter.DivaBoAdapter
import com.deltatre.divaboadapter.DivaExtraParams
import androidx.lifecycle.lifecycleScope
import com.deltatre.divacorelib.api.DivaListener
import com.deltatre.divacorelib.api.model.CustomActionPayload
import com.deltatre.divacorelib.api.player.PlayerAction
import com.deltatre.divacorelib.api.player.PlayerCallback
import com.deltatre.divacorelib.api.player.PlayerCommands
import com.deltatre.divacorelib.api.player.PlayerPosition
import com.deltatre.divacorelib.api.video.VideoCallback
import com.deltatre.divacorelib.data.analytics.AnalyticsEvent
import com.deltatre.divacorelib.exceptions.VideoError
import com.deltatre.divacorelib.models.AssetState
import com.deltatre.divacorelib.models.State
import com.deltatre.divacorelib.models.VideoMetadata
import com.deltatre.divacorelib.models.VideoMetadataClean
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.util.Date

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}

val divaExtraParams = DivaExtraParams()

val boAdapter = DivaBoAdapter(this /*refers to the Activity class */, lifecycleScope)

boAdapter.createDivaFragment(
adapterSettingsUrl = "https://divademo.deltatre.net/DIVAProduct/www/Data/Diva5.xTest/settings/dyn/android.json",
langCountryCode = "en-US",
videoId = "bae2c2aa-0f4e-4113-8f33-ce41b6267cc9",
getCurrentUserAccountAccessToken = {
//Get the user token
""
},
sharedKey = "testpassword",
conf = divaExtraParams,
onError = { exception ->
//On Error
}
)

{ divaFragment ->
supportFragmentManager
.beginTransaction()
.replace(R.id.fragment_container_view, divaFragment)
.commit()

divaFragment.api.player.registerListener(object:PlayerCallback{
override fun onPlaybackSessionChanged(playbackSessionId: String) {

}

override fun onPlayerActionRequest(action: PlayerAction) {

}

override fun onPlayerDurationChanged(duration: PlayerPosition) {

}

override fun onPlayerPlaybackRateChanged(rate: Float) {

}

override fun onPlayerPositionChanged(position: PlayerPosition) {

}

override fun onPlayerStateChanged(state: State) {

}

override fun onUserLiveChanged(inLiveWindow: Boolean) {

}

override fun onVideoShownChanged(videoShown: Boolean) {
divaFragment.api.player.sendPlayerCommand(PlayerCommands.mute(true))
}

override fun onVolumeChanged(volume: Float) {

}
})}
}
}