Skip to main content

Player Control

Control video playback programmatically — play, pause, seek, adjust volume, and manage multiple players.

Basic Control

Use the channel view model to control the active player:

@StateObject private var viewModel = BBChannelViewModel()

// Play / Pause
viewModel.play()
viewModel.pause()

// Seek to 30 seconds
viewModel.seek(to: 30)

// Volume (0.0 to 1.0)
viewModel.setVolume(0.5)

// Mute / Unmute
viewModel.setMuted(true)

Available Methods

All methods accept an optional playerId parameter. Without it, they target the active player.

MethodDescription
play(playerId:)Start or resume playback
pause(playerId:)Pause playback
seek(to:playerId:)Seek to position in seconds
setVolume(_:playerId:)Set volume (0.0 – 1.0)
setMuted(_:playerId:)Mute or unmute
enterFullscreen(playerId:)Enter fullscreen mode
exitFullscreen(playerId:)Exit fullscreen mode

Multi-Player

Channels can have multiple players active simultaneously — for example, an inline player on the main page and another on a detail page.

Common Player IDs

IDContext
playerMain page inline player
detailPageDetail page player
overviewPageOverview/playlist page player

Targeting Specific Players

// Pause the main player while detail page is open
viewModel.pause(playerId: "player")

// Play only the detail page player
viewModel.play(playerId: "detailPage")

Player Events

Listen for player lifecycle and state changes via callbacks:

let callbacks = BBChannelCallbacks(
onPlayersChange: { players in
print("Active players: \(players.count)")
},
onActivePlayerChange: { playerId in
print("Active player: \(playerId ?? "none")")
},
onPlayerStateChange: { state in
print("Player \(state.state)")
}
)