Overview
The low-level Flutter SDK for real-time audio, video and data, for building your own room UI.
voxera_media_client is the low-level SDK under the kits. It gives you rooms, tracks and events, and you write the whole UI.
Should you use it?
Use a kit if you want a voice room or live room. Live Audio Room and Live Streaming already handle seats, stages, chat, reconnection and moderation.
Use the media client if your product isn't shaped like those rooms, and you're ready to build that logic yourself.
You also need a token from your backend or from the Token API. The media client doesn't mint its own.
Install
Add the package to pubspec.yaml:
dependencies:
voxera_media_client: ^1.6.2It supports Android, iOS, web, macOS, Windows and Linux. AI noise suppression is Android and iOS only.
iOS setup
Declare camera and microphone use in Info.plist. To keep audio running in the background, enable Background Modes > Audio, AirPlay, and Picture in Picture.
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses your camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) uses your microphone</string>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>The minimum deployment target is iOS 12.1. Add this to your Podfile, then delete Podfile.lock and run pod install again:
platform :ios, '12.1'Android setup
Add these to AndroidManifest.xml:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />End-to-end encryption
The SDK can encrypt audio and video end to end. It works with no extra setup on native platforms. On Flutter web, you need to compile an e2ee.worker.dart.js file.