Skip to main content

Captions

This page describes how to manage captions and subtitles in the Bambuser player.

Overview​

The Bambuser player supports displaying captions and subtitles to enhance accessibility and viewer experience. You can:

  • Show or hide captions
  • Retrieve a list of available caption tracks
  • Select a specific caption track for display

Show or Hide Captions​

Use the showCaptions and hideCaptions invoke functions to control the visibility of captions.

fun enableClosedCaption() {
lifecycleScope.launch {
viewActions.invoke(function = "showCaptions", arguments = "")
}
}

fun disableClosedCaption() {
lifecycleScope.launch {
viewActions.invoke(function = "hideCaptions", arguments = "")
}
}

Retrieve Available Captions​

Use the getAvailableCaptions invoke function to fetch a list of available caption tracks. This allows you to present a selection to the user.

fun showCaptionSelector() {
lifecycleScope.launch {
try {
// 1. Invoke the player function
val result = viewActions.invoke(function = "getAvailableCaptions", arguments = "") as? Map<*, *>

// 2. Parse the nested Dictionary
val eventDict = result?.get("event") as? Map<*, *>
val captionList = eventDict?.get("availableCaptions") as? List<String>

if (captionList == null || captionList.isEmpty()) {
println("Failed to parse caption structure or no captions available.")
return@launch
}

// 3. Present the modal with the strings (e.g., "sv-SE")
presentCaptionModal(tracks = captionList)
} catch (e: Exception) {
println("Error fetching captions: ${e.message}")
}
}
}

The result is a map with the following structure:

{
"event": {
"availableCaptions": ["sv-SE", "en-US", "fr-CA"]
}
}

Select a Caption Track​

Use the selectCaptionTrack invoke function to select a specific caption track by its ID.

fun selectTrack(id: String) {
lifecycleScope.launch {
// Passing the string ID inside quotes for JS
viewActions.invoke(function = "selectCaptionTrack", arguments = "'\"$id\"'")

// Also call showCaptions to ensure they are visible
enableClosedCaption()
}
}

Configuration​

You can control the visibility of the closed captions button using the ui.hideClosedCaptionsButton configuration flag. By default, the captions button is visible.

Config KeyTypeDefaultDescription
ui.hideClosedCaptionsButtonbooleanfalseHides the closed captions / subtitles button.
val videoConfiguration = BambuserVideoConfiguration(
events = listOf("*"),
configuration = mapOf(
"ui" to mapOf(
"hideClosedCaptionsButton" to true
)
),
videoType = BambuserVideoAsset.Live(showId)
)

For the full configuration reference, see Configuration and Functions.