Skip to main content
Version: 2.0.x

Scalability Guide for Large Participant Meetings

Overview​

This guide explains how to optimize performance when hosting video meetings with 10+ participants by using a key feature:

Adaptive Subscriptions: Intelligently prioritizes audio/video streams based on who's speaking

These features help solve common challenges in large meetings, such as excessive bandwidth consumption and poor quality for users with network constraints.

Common Challenges in Large Meetings​

1. Ineffective Stream Prioritization​

Problem: All streams receive equal treatment regardless of importance.

Impact:

  • Users with limited bandwidth experience poor quality
  • Audio quality suffers when competing with video for resources
  • Important speakers may not be clearly heard or seen

Solution Features​

Adaptive Subscriptions​

This feature optimizes bandwidth by prioritizing active speakers and managing stream quality.

Key Benefits:

  • Identifies and prioritizes dominant speakers
  • Intelligently manages bandwidth constraints
  • Ensures clear audio even under network limitations
  • Gives highest priority to pinned participants

How It Works:
The system analyzes speaking patterns to detect active participants and adjusts stream priorities accordingly. For bandwidth-constrained users, it strategically pauses or lowers the quality of non-essential video streams. Pinned participants always receive the highest priority in stream allocation.

Visual Illustration:

Viewport illustration

If a user experiences bandwidth constraints, Adaptive Subscriptions will pause the video streams in the following priority order:

  1. Muted Participants
  2. Least Dominant Speakers
  3. Dominant Speakers

If you want to achieve pin/unpin functionality, you can refer to this documentation

Implementation Guide​

Prerequisites​

  • SDK Version: 2.2.3 or later
  • iOS Version: 13.0 or later
  • Swift Version: 5.0 or later

Enabling Adaptive Subscriptionss(BETA)​

You can toggle this feature using these methods:

// Enable adaptive subscriptions
meeting?.enableAdaptiveSubscriptions();

// Disable adaptive subscriptions
meeting?.disableAdaptiveSubscriptions();

Recommended Implementation:

// Enable on meeting join

extension MeetingViewController: MeetingEventListener {

onMeetingJoined(){
meeting?.enableAdaptiveSubscriptions()
}

}

Stream Pause/Resume Events​

When a video stream is paused or resumed, the system triggers events with specific reasons:

// Listen for video stream pause events

extension MeetingViewController: ParticipantEventListener {

func onStreamPaused(kind: String, reason: String) {
print("onStreamPaused reason : \(reason)")
}

func onStreamResumed(kind: String, reason: String) {
print("onStreamResumed reason : \(reason)")
}

}

Pause Reasons:

  • muted: Participant has turned off their audio
  • leastDominance: Participant hasn't spoken much in the meeting

Resume Reasons:

  • adaptiveSubscriptionsDisabled: Feature was disabled
  • networkStable: Network conditions have improved

Developer Tip: When a stream is paused (e.g., due to network issues), always keep users in the loop by displaying a helpful UI indicator. For instance, render a message such as: "Paused: Waiting for stable connection..."

Best Practices​

  • Enable adaptive subscriptions at the start of every meeting
  • Design your UI to display indicators when a stream is paused
  • Pin important participants to ensure they receive the highest streaming priority

Got a Question? Ask us on discord