volorio_rtc
Volorio Flutter RTC SDK for voice calls, video calls, live rooms, screen share, data messages, and participant-minute billing heartbeat.
Application code imports Volorio APIs only. The underlying media provider is an internal implementation detail of this package.
Keywords
Flutter RTC, Flutter WebRTC, voice chat SDK, video call SDK, audio room SDK, live streaming SDK, screen sharing, realtime communication, Volorio.
Install
dependencies:
volorio_rtc: ^0.2.2
Join a room
The session must be created by your backend with volorio_server.
import 'package:volorio_core/volorio_core.dart';
import 'package:volorio_rtc/volorio_rtc.dart';
final rtc = VolorioRtcClient();
await rtc.join(
VolorioRoomSession.fromJson(sessionJsonFromYourBackend),
);
await rtc.enableMicrophone(true);
await rtc.enableCamera(true);
Video quality profiles
Use setCameraEnabled when you need an explicit capture and encoder profile.
The default mobile profile is 720p/30 FPS. Full HD 60 FPS is available for
devices, network paths, API key quality grants, and SFU configuration that can
carry it.
await rtc.setCameraEnabled(
true,
profile: VolorioVideoProfiles.fullHd60,
);
await rtc.setPublishVideoProfile(VolorioVideoProfiles.mobile720p30);
Available built-in profiles:
VolorioVideoProfiles.low: 180p/15 FPSVolorioVideoProfiles.medium: 360p/30 FPSVolorioVideoProfiles.mobile720p30: 720p/30 FPSVolorioVideoProfiles.fullHd30: 1080p/30 FPSVolorioVideoProfiles.fullHd60: 1080p/60 FPS
The default simulcast ladder publishes mobile-safe layers for SFU selection:
- 180p/15 FPS
- 360p/30 FPS
- 720p/30 FPS
Subscriber quality
Use remote quality controls when a participant tile moves between small grid mode and fullscreen mode.
await rtc.setRemoteVideoQuality(
identity: 'remote_user_1',
quality: VolorioRemoteVideoQuality.low,
maxFps: 15,
);
await rtc.setRemoteVideoQuality(
identity: 'remote_user_1',
quality: VolorioRemoteVideoQuality.high,
maxFps: 60,
);
Video stats and watchdog
Use videoStats for a live debug overlay and videoHealthEvents to react to
first frame, freeze, and recovery events.
rtc.videoStats.listen((stats) {
debugPrint('${stats.identity} ${stats.width}x${stats.height} '
'${stats.framesPerSecond}fps ${stats.bitrateKbps}kbps');
});
rtc.videoHealthEvents.listen((event) {
debugPrint('Video health: ${event.type} ${event.identity}');
});
Media controls
await rtc.enableMicrophone(false);
await rtc.enableCamera(false);
await rtc.shareScreen(true);
await rtc.sendMessage('{"type":"room.ping"}');
await rtc.leave();
Billing and session cutoff
volorio_rtc automatically calls the heartbeat URL returned by Volorio. If the
server responds with 401, 403, or 402, the SDK disconnects locally.
Common causes:
401: missing or invalid backend-created session.403: API key does not have the requested product or quality grant.402: no remaining monthly free minutes and insufficient wallet balance.
Mobile permissions
Your Flutter app still needs platform-level microphone and camera permissions. Volorio handles the room/session API, but iOS and Android permission prompts are owned by your app.