Skip to main content
Build a fully customized control panel for your call interface by hiding the default controls and implementing your own UI with call actions. This guide walks you through creating a custom control panel with essential call controls.

Overview

Custom control panels allow you to:
  • Match your app’s branding and design language
  • Simplify the interface by showing only relevant controls
  • Add custom functionality and workflows
  • Create unique user experiences
This guide demonstrates building a basic custom control panel with:
  • Mute/Unmute audio button
  • Pause/Resume video button
  • Switch camera button
  • End call button

Prerequisites


Step 1: Hide Default Controls

Configure your session settings to hide the default control panel:
You can also hide individual buttons while keeping the control panel visible. See SessionSettingsBuilder for all options.

Step 2: Create Custom Layout

Create a custom view for your controls programmatically or in Interface Builder:

Step 3: Implement Control Actions

Set up button actions and call the appropriate SDK methods:

Step 4: Handle State Updates

Use MediaEventsListener to keep your UI synchronized with the actual call state. Register the listener in the viewDidLoad of the CallViewController from Step 2 (the code below replaces that method), and remove it when the screen goes away (deinit in Swift, dealloc in Objective-C):
Use SessionStatusListener to handle session end events: