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
| Result | Best starting point |
|---|---|
| Publish microphone or camera media | Your SDK's audio/video controls |
| Add waiting, requests, or panelists | The supplied room UI and moderation surfaces |
| Add a canvas or screenboard | The SDK-specific screenboard path below |
| Show subtitles or translation | Only the SDKs named below, in a room with translation enabled |
| Build an app-owned operator interface | Unity's programmatic client, or a supported custom UI path |
| Add WHIP, WHEP, or HLS | MediaSFU protocol HTTP operations |
| Control an existing configured AI call | Server-side AI call controls |
| Add file sharing, invitation delivery, or recording export | An 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.