volorio_audio_room 0.2.0
volorio_audio_room: ^0.2.0 copied to clipboard
High-level Volorio Flutter SDK for audio party rooms with RTC, RTM, chat, and usage heartbeat.
volorio_audio_room #
High-level Flutter SDK for audio party rooms, voice chat rooms, live audio communities, stage rooms, social audio apps, and moderated group conversation experiences.
This package combines Volorio RTC voice, RTM presence, chat, realtime engagement, and heartbeat-based usage billing into one mobile-friendly API.
Keywords #
Flutter audio room SDK, voice chat room, social audio app, party room, group voice call, live audio, RTC voice, RTM presence, realtime chat, Volorio.
Install #
dependencies:
volorio_audio_room: ^0.2.0
Architecture #
The Flutter app never stores a Volorio API key.
- Flutter app calls your backend.
- Your backend uses
volorio_serverwithapiKey. - Volorio validates
clientId,projectId, product entitlements, quality, free minutes, wallet balance, and quota. - Your backend returns the short-lived
VolorioRoomSessionJSON to Flutter. volorio_audio_roomjoins the room and runs heartbeat automatically.
Required identifiers #
| Identifier | Used by Flutter? | Used by backend? | Secret? |
|---|---|---|---|
clientId |
Yes, public app identity | Yes, required for Volorio session create | No |
projectId |
Yes | Yes | No |
apiKey |
No | Yes | Yes |
Flutter usage #
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:volorio_audio_room/volorio_audio_room.dart';
import 'package:volorio_core/volorio_core.dart';
final audioRoom = VolorioAudioRoomClient(
sessionLoader: (request) async {
final response = await http.post(
Uri.parse('https://your-api.example.com/volorio/audio-room/session'),
headers: {'content-type': 'application/json'},
body: jsonEncode({
'clientId': request.clientId,
'projectId': request.projectId,
'roomId': request.roomId,
'identity': request.identity,
'displayName': request.displayName,
}),
);
if (response.statusCode < 200 || response.statusCode >= 300) {
throw Exception('Could not create Volorio session: ${response.body}');
}
return VolorioRoomSession.fromJson(
jsonDecode(response.body) as Map<String, Object?>,
);
},
);
await audioRoom.join(
const VolorioAudioRoomJoinRequest(
clientId: 'app_...',
projectId: 'proj_...',
roomId: 'party-room-123',
identity: 'user_123',
displayName: 'Oguzhan',
),
);
await audioRoom.setMicrophoneEnabled(false);
await audioRoom.sendChatText('Hello party room');
await audioRoom.rte.sendReaction(
roomId: 'party-room-123',
identity: 'user_123',
emoji: ':fire:',
);
await audioRoom.leave();
Backend session endpoint #
Use volorio_server on your backend:
final session = await volorio.createRoomSession(
const CreateVolorioRoomSessionInput(
clientId: 'app_...',
projectId: 'proj_...',
roomId: 'party-room-123',
identity: 'user_123',
quality: VolorioMediaQuality.voice,
products: [
VolorioProductId.rtcVoice,
VolorioProductId.signaling,
VolorioProductId.chatMau,
],
),
);
Billing and free minutes #
Volorio bills voice rooms by participant-minute. New accounts can receive a
monthly free minute allowance before wallet balance is charged. When the
allowance and balance are depleted, Volorio returns 402 during heartbeat and
the SDK disconnects the participant.
Typical audio room features #
- Join and leave voice rooms.
- Enable and disable microphone.
- Publish presence state.
- Send realtime chat messages.
- Send reactions, Q&A, and poll events.
- Automatically stop when wallet/free usage is exhausted.