Skip to main content

Advanced MediaSFU Capabilities by SDK

Build beyond a basic room: publish media from your own controls, add a canvas or screenboard, show subtitles, and run waiting rooms and requests. Each SDK section below names the public APIs that package provides for these features.

Start with SDK setup and authority, then complete your SDK's room guide before adding the features below.

Use the focused guides for devices, backgrounds, and translation or large rooms, panelists, permissions, and breakouts.

Choose the result you want​

ResultBest starting point
Publish microphone or camera mediaYour SDK's audio/video controls
Add waiting, requests, or panelistsThe supplied room UI and moderation surfaces
Add a canvas or screenboardThe SDK-specific screenboard path below
Show subtitles or translationOnly the SDKs named below, in a room with translation enabled
Build an app-owned operator interfaceUnity's programmatic client, or a supported custom UI path
Add WHIP, WHEP, or HLSMediaSFU protocol HTTP operations
Control an existing configured AI callServer-side AI call controls
Add file sharing, invitation delivery, or recording exportAn application/backend integration; not a client-SDK operation

AI handoff, file transfer, external media, invitations, recording export, and telephony are not client SDK operations in any package. See Product capabilities that require an explicit integration.

ReactJS 4.4.2​

Use clickAudio and clickVideo with the complete current-room parameters to publish local media. Screenboard, ScreenboardModal, and captureCanvasStream provide the browser canvas path. For participant-facing applications, start with MediasfuGeneric, MediasfuConference, MediasfuWebinar, MediasfuBroadcast, or MediasfuChat and keep their room state mounted while a session is active.

Waiting, request, and panelist experiences are available through the supplied room components. They are not a general Q&A or hand-raise service; name the action in your product according to the request types your backend supports.

import {
clickAudio,
clickVideo,
captureCanvasStream,
Screenboard,
} from 'mediasfu-reactjs';

type AudioRequest = Parameters<typeof clickAudio>[0];
type VideoRequest = Parameters<typeof clickVideo>[0];

export const publishMicrophone = (request: AudioRequest) => clickAudio(request);
export const publishCamera = (request: VideoRequest) => clickVideo(request);

Subtitles in React are part of the supplied room experience. The package root does not export a separate subtitle or translation service, so show subtitles through the supplied room rather than a custom store.

Angular 2.5.0​

Use the exported ClickAudio, ClickVideo, and transport services from the active room. Screenboard, ScreenboardModal, and CaptureCanvasStream provide the canvas path. LiveSubtitleService, TranslationSettingsModal, and the translation receive services show subtitles once the room has translation enabled.

For a custom participant card, read subtitles from Angular's supplied service instead of maintaining a second subtitle store:

import {Component, Input} from '@angular/core';
import {LiveSubtitleService} from 'mediasfu-angular';

@Component({
selector: 'app-speaker-subtitle',
standalone: true,
template: `<p>{{ text }}</p>`,
})
export class SpeakerSubtitleComponent {
@Input({required: true}) speakerId = '';
@Input({required: true}) speakerName = '';

constructor(private readonly subtitles: LiveSubtitleService) {}

get text(): string {
return this.subtitles
.getSubtitleForSpeaker(this.speakerId, this.speakerName)?.text ?? '';
}
}

Use the supplied waiting, requests, and panelist components for those exact workflows. Use the prebuilt room components when you want MediaSFU to own the participant workspace. Translation availability, language coverage, accuracy, and retention are set by the room and your backend, not by the package.

React Native 2.5.0​

Use clickAudio and clickVideo after native permissions and the room transport are ready. Screenboard, ScreenboardModal, Whiteboard, and captureCanvasStream are the canvas path. TranslationSettingsModal and the translation receive controls work only in rooms configured for translation.

The package supplies waiting, requests, panelists, and participant UI through MediasfuGeneric and its room variants. Treat request types as application meaning, not as a guaranteed Q&A or hand-raise protocol.

import {
clickAudio,
clickVideo,
captureCanvasStream,
} from 'mediasfu-reactnative';

export type MicrophoneRequest = Parameters<typeof clickAudio>[0];
export type CameraRequest = Parameters<typeof clickVideo>[0];
export type CanvasRequest = Parameters<typeof captureCanvasStream>[0];

Test media and canvas capture on physical Android and iOS devices, and don't promise translation accuracy or transcript retention in your UI.

Expo 2.6.0​

Use clickAudio and clickVideo after Expo/native permissions and room media readiness. Screenboard, ScreenboardModal, Whiteboard, and captureCanvasStream provide the canvas path. Translation uses the supplied translation settings and receive surfaces in a room whose backend configuration enables it.

Use MediasfuGeneric and its waiting, requests, panelist, and participant surfaces for the provided room experience. Request labels and permissions remain application/backend policy.

Test Android, iOS, and web separately. A room configuration field such as an HLS or telephony flag does not by itself give you an HLS or calling workflow.

Vue 1.3.0​

Use the root-exported clickAudio and clickVideo functions for active-room tracks. Use the supplied Screenboard component for the package-owned canvas experience. liveSubtitleService, createLiveSubtitleService, and the translation receive handlers show subtitles in a room with translation enabled.

The supplied room, waiting, requests, and panelist components are the supported participant-workspace path. The Vue package root does not export a standalone canvas capture function, so keep custom external-canvas capture inside your application. Translation availability and retention are set by the room and your backend.

Flutter 2.4.1​

Use clickAudio and clickVideo from package:mediasfu_sdk/mediasfu_sdk.dart after room and permission readiness. Screenboard and ScreenboardModal provide the Flutter canvas path. Use MediasfuGeneric, MediasfuConference, MediasfuWebinar, MediasfuBroadcast, or MediasfuChat for a supplied participant workspace.

Waiting, requests, and panelist widgets provide those exact experiences. Translation is part of the supplied modern room; the package does not export its translation components for your own UI, so show subtitles through the supplied room.

Android 1.0.8​

The Android room SDK provides Compose room shapes, participant workspaces, microphone and camera production, remote-media rendering, screen sharing, waiting and request panels, participant moderation, chat, polls, breakouts, whiteboard, and recording controls. Start with the supplied UI, then replace only the cards or workspace your product needs to own.

Room configuration fields do not become WHIP/WHEP/HLS, SIP/PSTN, recording export, file transfer, or AI-agent APIs on the device. Use the matching server-side MediaSFU API for those workflows.

Kotlin Multiplatform 1.0.8​

Use clickAudio and clickVideo after permission and room readiness. captureCanvasStream and the supplied screenboard/whiteboard components are the Kotlin canvas path. MediasfuGeneric and the conference, webinar, broadcast, and chat variants provide Compose participant workspaces.

Kotlin exposes translation models and receive handlers for rooms configured for translation. They let the app present received translation state; they do not provide a transcription service or guarantee language availability, accuracy, or storage.

Use respondToWaiting, respondToRequests, and the panelist controls for those named workflows. They are not a generic Q&A or hand-raise API.

Swift and Apple platforms 0.1.3​

The Apple release presents the hosted conference, webinar, broadcast, and chat room through MediaSFUIosHostBridge. Swift controls can toggle microphone, camera, and screen sharing or open supplied panels while the hosted controller owns participant and remote-media rendering.

The Apple surface does not include a credential-free Cloud create grant, standalone WHIP/WHEP/HLS controls, SIP/PSTN calling, recording retrieval, file transfer, or an AI-agent start/pause/stop contract. Use backend APIs for those workflows and pass only short-lived, app-approved room data to the device.

Unity 0.1.0-preview.2​

Unity's MediaSfuClient is a programmatic client for an application-owned UI. After the room and media backend are ready, use ProduceMediaTrackAsync for audio/video production and the explicit microphone/camera controls. Use RespondToWaitingParticipantAsync and participant-control methods for the waiting and moderation experiences your scene implements.

await client.RequestMediaPermissionAsync(MediaSfuTrackKind.Audio);
await client.RequestMediaPermissionAsync(MediaSfuTrackKind.Video);
await client.SetMicrophoneEnabledAsync(true);
await client.SetCameraEnabledAsync(true);

For a shared board, the host starts and stops it with StartOrUpdateWhiteboardAsync and StopWhiteboardAsync; the host and assigned whiteboard users draw with SendWhiteboardActionAsync and clear it with ClearWhiteboardAsync. Your scene renders the board. The Unity package does not render participant widgets, provide a screenboard over a screen share, or include captions/transcription or a named Q&A/hand-raise operation. Room creation metadata such as HLS or SIP flags is not a playback, publishing, or calling API.

Shared core 1.3.1​

The shared core is a non-rendering TypeScript layer. It exports clickAudio, clickVideo, their send-transport helpers, and captureCanvasStream. For subtitles and translation it exports state helpers such as createLiveSubtitle, updateLiveSubtitlesFromTranscript, getSubtitleForSpeaker, setTranslationPreference, and stopConsumingTranslation. These manage received translation state; they are not a transcription provider.

Use respondToWaiting, respondToRequests, and panelist helpers only with the complete current room/socket state. Your framework must render the interface; the shared package does not provide participant widgets.

import {
clickAudio,
clickVideo,
captureCanvasStream,
createLiveSubtitle,
} from 'mediasfu-shared';

type AudioRequest = Parameters<typeof clickAudio>[0];
type VideoRequest = Parameters<typeof clickVideo>[0];

Product capabilities that require an explicit integration​

No client SDK provides these as an operation. A room shape, configuration field, or similarly named UI component does not add them:

  • AI/operator takeover or an agent-session handoff
  • file/document upload and transfer
  • external-media ingest or egress and hybrid WebRTC/HLS delivery
  • invitation issuance, delivery, redemption, expiry, and reuse protection
  • recording catalogue, metadata retrieval, download, export, retention, and deletion
  • SIP/PSTN dialing, call control, and lifecycle
  • confirming that every client and backend resource was removed after a session

MediaSFU publishes separate server APIs for WHIP, WHEP, and HLS resources and for controlling an existing configured AI call. Call them from your server. For the other items, build the workflow in your application and backend; don't infer it from a client SDK field or import an internal file.

Release checklist​

  • The installed package and version match this guide.
  • Only public package entries are imported.
  • The backend enables the room feature before its control is shown.
  • Permission denial and unavailable-device states have a useful next step.
  • Audio, video, canvas, and translation state are tested on every target platform.
  • Requests are labelled according to your backend's actual meaning.
  • Translation UI explains availability without promising accuracy or retention.
  • Unsupported AI, file, HLS, invitation, recording-export, and telephony controls are hidden.
  • Final exit clears application-owned tracks, listeners, timers, drafts, and authority.