mediasfu-sdk-kotlin
1.0.3indexedReal-time video conferencing SDK offering drop-in UI, customizable components, screen sharing, recording, chat, participant management, breakout rooms, polls, pagination, and self-hosting support.
Real-time video conferencing SDK offering drop-in UI, customizable components, screen sharing, recording, chat, participant management, breakout rooms, polls, pagination, and self-hosting support.
Real-time video conferencing for Android & Kotlin Multiplatform — drop-in solution with pre-built UI or full customization.
📖 Full Documentation → | 🌐 mediasfu.com
// build.gradle.kts (app level)
dependencies {
// For Android-only projects (recommended):
implementation("com.mediasfu:mediasfu-sdk-android:1.0.3")
// For Kotlin Multiplatform projects:
// implementation("com.mediasfu:mediasfu-sdk:1.0.3")
}
import com.mediasfu.sdk.ui.mediasfu.MediasfuGeneric
import com.mediasfu.sdk.ui.mediasfu.MediasfuGenericOptions
import com.mediasfu.sdk.model.Credentials
@Composable
fun App() {
// Option 1: No credentials (testing/demo)
MediasfuGeneric()
// Option 2: With MediaSFU Cloud credentials
// MediasfuGeneric(
// options = MediasfuGenericOptions(
// credentials = Credentials(apiUserName = "your_username", apiKey = "your_api_key")
}
./gradlew :androidApp:installDebug
Done! You have a full-featured video conferencing app with:
dependencies {
// For Android-only projects (recommended):
implementation("com.mediasfu:mediasfu-sdk-android:1.0.3")
// For Kotlin Multiplatform projects:
// implementation("com.mediasfu:mediasfu-sdk:1.0.3")
}
Add to AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
All room types are convenience wrappers around MediasfuGeneric with pre-configured event types:
import com.mediasfu.sdk.ui.mediasfu.*
import com.mediasfu.sdk.model.Credentials
val options = MediasfuGenericOptions(
credentials = Credentials(apiUserName = "user", apiKey = "key")
)
// Pick the right one for your use case - all use the same options!
MediasfuWebinar(options = options)
MediasfuBroadcast(options = options)
MediasfuConference(options = options)
Import and use components directly — no boilerplate:
import com.mediasfu.sdk.ui.AudioGrid
import com.mediasfu.sdk.ui.FlexibleGrid
import com.mediasfu.sdk.ui.components.display.AudioGridOptions
import com.mediasfu.sdk.ui.components.display.FlexibleGridOptions
@Composable
fun CustomLayout(parameters: MediasfuParameters) {
// Just like Flutter/React!
AudioGrid(AudioGridOptions(
participants = parameters.participants,
columnsPerRow = 3
))
FlexibleGrid(FlexibleGridOptions(
parameters = parameters,
columns = 2
))
}
@Composable
fun App() {
MediasfuGeneric(options = options)
}
@Composable
fun App() {
var parameters by remember { mutableStateOf<MediasfuParameters?>(null) }
// Hidden MediaSFU backend
MediasfuGeneric(
options = options.copy(returnUI = false),
onParametersUpdate = { parameters = it }
)
parameters?.let { params ->
Column {
Text()
Button(onClick = { params.clickVideo(params) }) {
Text( (params.videoAlreadyOn) )
}
}
}
}
@Composable
fun CustomMainScreen(parameters: MediasfuParameters) {
Column {
FlexibleVideo(FlexibleVideoOptions(parameters = parameters))
FlexibleGrid(FlexibleGridOptions(parameters = parameters))
}
}
MediasfuGeneric(
options = options,
customComponent = { CustomMainScreen(it) }
)
// Media controls
parameters.clickVideo(parameters) // Toggle video
parameters.clickAudio(parameters) // Toggle audio
parameters.clickScreenShare(parameters) // Toggle screen share
// State
parameters.videoAlreadyOn // Boolean
parameters.audioAlreadyOn // Boolean
parameters.participants // List<Participant>
// Modals
parameters.updateIsParticipantsModalVisible(true)
parameters.updateIsMessagesModalVisible(true)
No API key needed for self-hosting. Use MediaSFU Open:
import com.mediasfu.sdk.ui.mediasfu.MediasfuGeneric
import com.mediasfu.sdk.ui.mediasfu.MediasfuGenericOptions
MediasfuGeneric(
options = MediasfuGenericOptions(
connectMediaSFU = false,
localLink = "http://your-server:3000"
)
)
MIT © MediaSFU
| Type | Default Event Type | Use Case |
|---|
MediasfuGeneric | CONFERENCE | General meetings |
MediasfuBroadcast | BROADCAST | Live streaming |
MediasfuWebinar | WEBINAR | Educational sessions |
MediasfuConference | CONFERENCE | Business meetings |
MediasfuChat | CHAT | Chat-focused |
| Component | Description |
|---|
AudioGrid | Audio participant grid |
AudioCard | Single audio participant |
FlexibleGrid | Flexible video grid |
FlexibleVideo | Main video display |
MiniCard | Compact participant card |
Pagination | Page controls |
AlertComponent | Alert messages |
MainAspectComponent | Layout container |
Surfaced from shared tags and platforms — no rankings paid for.