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 FPS
  • VolorioVideoProfiles.medium: 360p/30 FPS
  • VolorioVideoProfiles.mobile720p30: 720p/30 FPS
  • VolorioVideoProfiles.fullHd30: 1080p/30 FPS
  • VolorioVideoProfiles.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.

Libraries

volorio_rtc