webrtc-kmp
webrtc-kmp copied to clipboard
WebRTC Kotlin Multiplatform SDK
WebRTC KMP 
WebRTC Kotlin Multiplatform SDK is a comprehensive toolkit for integrating WebRTC functionality into your multiplatform projects. It supports Android, iOS, JS. Other platforms - PRs are welcome.
API implementation map
API | Android | iOS | JS/WasmJS |
---|---|---|---|
Audio/Video | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Data channel | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Screen Capture | :white_check_mark: | :white_check_mark: |
WebRTC revision
Current revision: M125
Installation
The library is published to Maven Central.
Shared module build.gradle.kts
kotlin {
cocoapods {
version = "1.0.0"
summary = "Shared module"
homepage = "not published"
ios.deploymentTarget = "11.0"
pod("WebRTC-SDK") {
version = "125.6422.02"
linkOnly = true
}
podfile = project.file("../iosApp/Podfile")
framework {
baseName = "shared"
export("com.shepeliev:webrtc-kmp:$webRtcKmpVersion")
transitiveExport = true
}
xcodeConfigurationToNativeBuildType["CUSTOM_DEBUG"] = NativeBuildType.DEBUG
xcodeConfigurationToNativeBuildType["CUSTOM_RELEASE"] = NativeBuildType.RELEASE
}
android()
ios()
iosSimulatorArm64()
js {
useCommonJs()
browser()
}
sourceSets {
val commonMain by getting {
dependencies {
api("com.shepeliev:webrtc-kmp:$webRtcKmpVersion")
}
}
val iosMain by getting
val iosSimulatorArm64Main by getting
iosSimulatorArm64Main.dependsOn(iosMain)
}
}
Also add the following to your Podfile
in the target section:
use_frameworks!
pod 'shared', :path => '../shared'
Usage
Please refer to sample.
Screen Share in Android
// Set MediaProjection permission intent using `MediaProjectionIntentHolder`
val mediaProjectionPermissionLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartActivityForResult()
) { activityResult ->
activityResult.data?.also {
MediaProjectionIntentHolder.intent = it
}
}