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.
| Method | Description |
|---|---|
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
| ID | Context |
|---|---|
player | Main page inline player |
detailPage | Detail page player |
overviewPage | Overview/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)")
}
)