Skip to content
Media client

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.

Open the package on pub.dev

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.2

It 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.