Skip to content

shepeliev/webrtc-kmp

Repository files navigation

WebRTC KMP Maven Central

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
Audio/Video
Data channel
Screen Capture

WebRTC revision

Current revision: M114

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 = "114.5735.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
    }
}