Skip to main content

Chromecast Integration

Add Chromecast (Google Cast) support when using BBChannelWithPlayerView.

Chromecast is provided by BBNativePlayerKit, which wraps the native Google Cast SDK.

Prerequisites

Info.plist

Add the required keys:

<key>NSLocalNetworkUsageDescription</key>
<string>This app uses the local network to discover Cast devices.</string>

<key>NSBonjourServices</key>
<array>
<string>_googlecast._tcp</string>
<string>_1F61A3A5._googlecast._tcp</string>
</array>

<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app uses Bluetooth for casting video to external devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This app uses Bluetooth for casting video to external devices.</string>

Replace 1F61A3A5 with your Cast application ID if using a custom receiver.

warning

These entries are required. Without them, Cast device discovery causes excessive CPU usage and battery drain (the SDK logs warnings about missing NSBonjourServices).

No AppDelegate Setup Needed

Unlike React Native, the SwiftUI SDK handles Cast context initialization lazily through BBNativePlayerKit. No explicit GCKCastContext.setSharedInstanceWith() call is needed.

Cast Button

Use CastButtonView to render the native Google Cast button. It auto-shows when a Cast device is discovered and auto-hides when none are available.

import BBNativePlayerKit

struct ChannelScreen: View {
@StateObject private var playerVM = BBChannelWithPlayerViewModel()

var body: some View {
VStack(spacing: 0) {
// Header with cast button
HStack {
Spacer()
CastButtonView(tintColor: .white)
.frame(width: 24, height: 24)
}
.padding()
.background(Color.black)

// Channel with native player
BBChannelWithPlayerView(
channelUrl: "https://demo.bbvms.com/ch/channel_name.json",
viewModel: playerVM,
callbacks: BBChannelCallbacks()
)
}
}
}

CastButtonView

A UIViewRepresentable wrapper around the native GCKUICastButton.

ParameterTypeDescription
tintColorUIColorIcon color. Default: .white

How It Works

BBChannelWithPlayerView handles cast routing automatically via castMode: "auto":

  • Connect first, then play — video routes directly to the Cast device
  • Play first, then connect — playback transfers to Cast at the current position
  • Switch clips while casting — new content replaces the current Cast stream
  • Disconnect — playback resumes locally on next play

No additional configuration or dialogs are needed.

Tips

  • Place CastButtonView in the app header so it's always accessible
  • The cast button is invisible when no devices are available — use fixed frame dimensions so your layout doesn't shift
  • Cast device discovery requires the device to be on the same Wi-Fi network as the Chromecast