WebRTC Kotlin Multiplatform SDK

Overview

WebRTC KMP Maven Central

WebRTC Kotlin Multiplatform SDK

API implementation map

API Android iOS JS
Audio/Video
Data channel
Screen Capture

WebRTC revision

Current revision: M89

Installation

Root build.gradle.kts

allprojects {
    repositories {
        mavenCentral()
    }
}

Shared module build.gradle.kts

kotlin {

  ios {
      binaries
          .filterIsInstance<Framework>()
          .forEach {
              it.transitiveExport = true
              it.export("com.shepeliev:webrtc-kmp:$webRtcKmmVersion")
          }
  }

  sourceSets {
      val commonMain by getting {
          dependencies {
              api("com.shepeliev:webrtc-kmp:$webRtcKmmVersion")
              implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0-native-mt")
          }
      }
  }
}

On iOS, in addition to the Kotlin library add in Podfile

pod 'webrtc-kmp', :git => '[email protected]:shepeliev/webrtc-kmp.git'

Usage

Please reffer to sample project.

Comments
  • Detecting closed/ended/muted tracks on Android

    Detecting closed/ended/muted tracks on Android

    Although there are some Flows that look like they could be used to detect closed/ended/muted tracks (onRemoveTrack, onEnded and onMute) they don't seem to ever emit values on Android.

    Is there any feature currently implemented that can allow me to accomplish this?

    If not could you offer some pointers so I can implement it?

    opened by mihai1voicescu 13
  • Production use

    Production use

    First of all good job with the library! There is a real need for a proper KMP WebRTC lib.

    Before committing to this library we had some questions, if you would be so kind as to provide an answer to them:

    1. In your personal opinion how production ready is the lib in its current form?
    2. What are the plans to support the library in the future?
    3. Do you accept PRs if needed?
    4. What is the motivation behind creating this open-source library?
    opened by mihai1voicescu 6
  • The library doesn't work with ir compiler for koltin js

    The library doesn't work with ir compiler for koltin js

    Hi. I wanted to try your library but one doesn't support new compiler. I have gotten the following message:

     Required by:
             project :
          > No matching variant of com.shepeliev:webrtc-kmp-js:0.89.6 was found. The consumer was configured to find a usage of 'kotlin-runtime' of a library, preferably optimized for non-jvm, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'js', attribute 'org.jetbrains.kotlin.js.compiler' with value 'ir' but:
              - Variant 'jsApiElements-published' capability com.shepeliev:webrtc-kmp-js:0.89.6 declares a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'js':
                  - Incompatible because this component declares a usage of 'kotlin-api' of a component, as well as attribute 'org.jetbrains.kotlin.js.compiler' with value 'legacy' and the consumer needed a usage of 'kotlin-runtime' of a component, as well as attribute 'org.jetbrains.kotlin.js.compiler' with value 'ir'
                  - Other compatible attributes:
                      - Doesn't say anything about its component category (required a library)
                      - Doesn't say anything about its target Java environment (preferred optimized for non-jvm)
              - Variant 'jsRuntimeElements-published' capability com.shepeliev:webrtc-kmp-js:0.89.6 declares a usage of 'kotlin-runtime' of a component, as well as attribute 'org.jetbrains.kotlin.platform.type' with value 'js':
                  - Incompatible because this component declares a component, as well as attribute 'org.jetbrains.kotlin.js.compiler' with value 'legacy' and the consumer needed a component, as well as attribute 'org.jetbrains.kotlin.js.compiler' with value 'ir'
                  - Other compatible attributes:
                      - Doesn't say anything about its component category (required a library)
                      - Doesn't say anything about its target Java environment (preferred optimized for non-jvm)
    

    Could you set both compiler type for kotlin js ?

    opened by polev-evgeny 3
  • Podspec seems to have gone missing

    Podspec seems to have gone missing

    After the update, I can't seem to build the project anymore. Pre-downloading: webrtc-kmp from https://github.com/shepeliev/webrtc-kmp.git [!] Unable to find a specification for 'webrtc-kmp'. It looks like your example works because the webrtc-kmp source is a module in the same project. Previously we needed to add pod 'webrtc-kmp', :git => 'https://github.com/shepeliev/webrtc-kmp.git' to the Podfile, so I think there must have been a .podspec in the project, but that seems to be lacking now.

    opened by sweiss435 2
  • Refactor MediaStreamTrack and MediaStream

    Refactor MediaStreamTrack and MediaStream

    • stop/start video capturing on setting video track disabled/enabled
    • add MediaStream(tracks: List<MediaStreamTrack>) constructor
    • add creating MediaStream at the onTrack event in case it is absent
    opened by shepeliev 2
  • Usage in multiplatform library

    Usage in multiplatform library

    Hello

    If I try to import the lib in a multi-platform library I get the following error:

    Failed building KotlinMPPGradleModel org.gradle.internal.resolve.ArtifactNotFoundException: Could not find webrtc-kmp-0.89.5-samplessources.jar
    Failed building KotlinMPPGradleModel
    org.gradle.internal.resolve.ArtifactNotFoundException: Could not find webrtc-kmp-0.89.5-samplessources.jar (com.shepeliev:webrtc-kmp:0.89.5).
    Searched in the following locations:
        https://repo.maven.apache.org/maven2/com/shepeliev/webrtc-kmp/0.89.5/webrtc-kmp-0.89.5-samplessources.jar
    	at org.gradle.internal.resolve.result.DefaultBuildableArtifactResolveResult.notFound(DefaultBuildableArtifactResolveResult.java:28)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$LocateInCacheRepositoryAccess.resolveArtifactFromCache(CachingModuleComponentRepository.java:345)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.CachingModuleComponentRepository$LocateInCacheRepositoryAccess.resolveArtifact(CachingModuleComponentRepository.java:297)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.lambda$resolveArtifact$15(ErrorHandlingModuleComponentRepository.java:181)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.tryResolveAndMaybeBlacklist(ErrorHandlingModuleComponentRepository.java:237)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.performOperationWithRetries(ErrorHandlingModuleComponentRepository.java:203)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.ErrorHandlingModuleComponentRepository$ErrorHandlingModuleComponentRepositoryAccess.resolveArtifact(ErrorHandlingModuleComponentRepository.java:179)
    	at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.RepositoryChainArtifactResolver.resolveArtifact(RepositoryChainArtifactResolver.java:100)
    	at org.gradle.api.internal.artifacts.ivyservice.resolveengine.artifact.DefaultArtifactSet$LazyArtifactSupplier.calculateValue(DefaultArtifactSet.java:273)
    	at org.gradle.api.internal.artifacts.ivyservice.resolveengine.artifact.DefaultArtifactSet$LazyArtifactSupplier.calculateValue(DefaultArtifactSet.java:244)
    	at org.gradle.internal.model.CalculatedValueContainer$CalculationState.lambda$attachValue$0(CalculatedValueContainer.java:218)
    	at org.gradle.internal.Try.ofFailable(Try.java:39)
    	at org.gradle.internal.model.CalculatedValueContainer$CalculationState.attachValue(CalculatedValueContainer.java:213)
    	at org.gradle.internal.model.CalculatedValueContainer.finalizeIfNotAlready(CalculatedValueContainer.java:186)
    	at org.gradle.internal.model.CalculatedValueContainer.finalizeIfNotAlready(CalculatedValueContainer.java:177)
    	at org.gradle.api.internal.artifacts.ivyservice.resolveengine.artifact.ArtifactBackedResolvedVariant$DownloadArtifactFile.run(ArtifactBackedResolvedVariant.java:172)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor$QueueWorker.execute(DefaultBuildOperationExecutor.java:220)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.runOperation(DefaultBuildOperationQueue.java:243)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.doRunBatch(DefaultBuildOperationQueue.java:224)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.lambda$runBatch$0(DefaultBuildOperationQueue.java:214)
    	at org.gradle.internal.resources.AbstractResourceLockRegistry.whileDisallowingLockChanges(AbstractResourceLockRegistry.java:70)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.whileDisallowingProjectLockChanges(DefaultWorkerLeaseService.java:185)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.lambda$runBatch$1(DefaultBuildOperationQueue.java:214)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.runBatch(DefaultBuildOperationQueue.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue$WorkerRunnable.run(DefaultBuildOperationQueue.java:172)
    	at org.gradle.internal.operations.DefaultBuildOperationQueue.waitForCompletion(DefaultBuildOperationQueue.java:118)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.executeInParallel(DefaultBuildOperationExecutor.java:149)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$runAll$4(DefaultBuildOperationExecutor.java:108)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.runAll(DefaultBuildOperationExecutor.java:108)
    	at org.gradle.api.internal.artifacts.ivyservice.resolveengine.artifact.ParallelResolveArtifactSet$VisitingSet.visit(ParallelResolveArtifactSet.java:66)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.visitArtifacts(DefaultLenientConfiguration.java:263)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.access$500(DefaultLenientConfiguration.java:72)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$2.run(DefaultLenientConfiguration.java:237)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.visitArtifactsWithBuildOperation(DefaultLenientConfiguration.java:234)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.access$200(DefaultLenientConfiguration.java:72)
    	at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$1.visitArtifacts(DefaultLenientConfiguration.java:137)
    	at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.visitContents(DefaultConfiguration.java:1388)
    	at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.visitContents(DefaultConfiguration.java:497)
    	at org.gradle.api.internal.file.AbstractFileCollection.visitStructure(AbstractFileCollection.java:330)
    	at org.gradle.api.internal.file.CompositeFileCollection.lambda$visitContents$0(CompositeFileCollection.java:119)
    	at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:64)
    	at org.gradle.api.internal.file.collections.UnpackingVisitor.add(UnpackingVisitor.java:89)
    	at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection$UnresolvedItemsCollector.visitContents(DefaultConfigurableFileCollection.java:372)
    	at org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection.visitChildren(DefaultConfigurableFileCollection.java:284)
    	at org.gradle.api.internal.file.CompositeFileCollection.visitContents(CompositeFileCollection.java:119)
    	at org.gradle.api.internal.file.AbstractFileCollection.getFiles(AbstractFileCollection.java:130)
    	at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:176)
    	at kotlin.collections.CollectionsKt___CollectionsKt.toCollection(_Collections.kt:1263)
    	at kotlin.collections.CollectionsKt___CollectionsKt.toMutableList(_Collections.kt:1296)
    	at kotlin.collections.CollectionsKt___CollectionsKt.toList(_Collections.kt:1287)
    	at org.jetbrains.kotlin.gradle.internal.KotlinJvmCompilerArgumentsContributor.contributeArguments(CompilerArgumentsContributor.kt:100)
    	at org.jetbrains.kotlin.gradle.internal.KotlinJvmCompilerArgumentsContributor.contributeArguments(CompilerArgumentsContributor.kt:71)
    	at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.setupCompilerArgs(Tasks.kt:531)
    	at org.jetbrains.kotlin.gradle.tasks.KotlinCompile.setupCompilerArgs(Tasks.kt:429)
    	at org.jetbrains.kotlin.gradle.internal.CompilerArgumentAware$DefaultImpls.setupCompilerArgs$default(CompilerArgumentAware.kt:40)
    	at org.jetbrains.kotlin.gradle.internal.CompilerArgumentAwareKt.prepareCompilerArguments(CompilerArgumentAware.kt:44)
    	at org.jetbrains.kotlin.gradle.internal.CompilerArgumentAwareKt.prepareCompilerArguments$default(CompilerArgumentAware.kt:43)
    	at org.jetbrains.kotlin.gradle.internal.CompilerArgumentAware$DefaultImpls.getSerializedCompilerArguments(CompilerArgumentAware.kt:26)
    	at org.jetbrains.kotlin.gradle.internal.CompilerArgumentAwareWithInput$DefaultImpls.getSerializedCompilerArguments(CompilerArgumentAware.kt:49)
    	at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompileTool.getSerializedCompilerArguments(Tasks.kt:72)
    	at org.jetbrains.kotlin.gradle.tasks.KotlinCompile_Decorated.getSerializedCompilerArguments(Unknown Source)
    	at jdk.internal.reflect.GeneratedMethodAccessor2137.invoke(Unknown Source)
    	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.safelyGetArguments(KotlinMPPGradleModelBuilder.kt:706)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.buildCompilationArguments(KotlinMPPGradleModelBuilder.kt:716)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.buildCompilation(KotlinMPPGradleModelBuilder.kt:509)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.buildTarget(KotlinMPPGradleModelBuilder.kt:361)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.buildTargets(KotlinMPPGradleModelBuilder.kt:264)
    	at org.jetbrains.kotlin.gradle.KotlinMPPGradleModelBuilder.buildAll(KotlinMPPGradleModelBuilder.kt:56)
    	at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll(ExtraModelBuilder.java:113)
    	at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.buildAll(ExtraModelBuilder.java:78)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuilderWithParameter.build(DefaultToolingModelBuilderRegistry.java:246)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$UserCodeAssigningBuilder.lambda$build$0(DefaultToolingModelBuilderRegistry.java:322)
    	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication.reapply(DefaultUserCodeApplicationContext.java:98)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$UserCodeAssigningBuilder.build(DefaultToolingModelBuilderRegistry.java:322)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$LockSingleProjectBuilder.lambda$build$0(DefaultToolingModelBuilderRegistry.java:265)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$3(DefaultProjectStateRegistry.java:340)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:340)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:321)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$LockSingleProjectBuilder.build(DefaultToolingModelBuilderRegistry.java:265)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingBuilder$1.call(DefaultToolingModelBuilderRegistry.java:300)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
    	at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingBuilder.build(DefaultToolingModelBuilderRegistry.java:297)
    	at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getModel(DefaultBuildController.java:102)
    	at org.gradle.tooling.internal.consumer.connection.ParameterAwareBuildControllerAdapter.getModel(ParameterAwareBuildControllerAdapter.java:39)
    	at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.getModel(UnparameterizedBuildController.java:113)
    	at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.getModel(NestedActionAwareBuildControllerAdapter.java:31)
    	at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel(UnparameterizedBuildController.java:97)
    	at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel(NestedActionAwareBuildControllerAdapter.java:31)
    	at org.gradle.tooling.internal.consumer.connection.UnparameterizedBuildController.findModel(UnparameterizedBuildController.java:81)
    	at org.gradle.tooling.internal.consumer.connection.NestedActionAwareBuildControllerAdapter.findModel(NestedActionAwareBuildControllerAdapter.java:31)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction$MyBuildController.findModel(ProjectImportAction.java:581)
    	at org.jetbrains.plugins.gradle.model.ClassSetProjectImportModelProvider.populateProjectModels(ClassSetProjectImportModelProvider.java:31)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction.getProjectModels(ProjectImportAction.java:290)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction.access$600(ProjectImportAction.java:42)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction$5.execute(ProjectImportAction.java:206)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction$5.execute(ProjectImportAction.java:203)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction.fetchProjectBuildModels(ProjectImportAction.java:219)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:126)
    	at org.jetbrains.plugins.gradle.model.ProjectImportAction.execute(ProjectImportAction.java:42)
    	at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:64)
    	at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionRunningListener.runAction(AbstractClientProvidedBuildActionRunner.java:132)
    	at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionRunningListener.apply(AbstractClientProvidedBuildActionRunner.java:119)
    	at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner$ActionRunningListener.apply(AbstractClientProvidedBuildActionRunner.java:96)
    	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$fromBuildModel$2(DefaultBuildTreeLifecycleController.java:84)
    	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.lambda$doBuild$4(DefaultBuildTreeLifecycleController.java:105)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
    	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.doBuild(DefaultBuildTreeLifecycleController.java:99)
    	at org.gradle.internal.buildtree.DefaultBuildTreeLifecycleController.fromBuildModel(DefaultBuildTreeLifecycleController.java:70)
    	at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction(AbstractClientProvidedBuildActionRunner.java:58)
    	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:52)
    	at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    	at org.gradle.internal.buildtree.ProblemReportingBuildActionRunner.run(ProblemReportingBuildActionRunner.java:50)
    	at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:69)
    	at org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:90)
    	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
    	at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.lambda$execute$0(RootBuildLifecycleBuildActionExecutor.java:40)
    	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:128)
    	at org.gradle.launcher.exec.RootBuildLifecycleBuildActionExecutor.execute(RootBuildLifecycleBuildActionExecutor.java:40)
    	at org.gradle.internal.buildtree.DefaultBuildTreeContext.execute(DefaultBuildTreeContext.java:40)
    	at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.lambda$execute$0(BuildTreeLifecycleBuildActionExecutor.java:40)
    	at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:53)
    	at org.gradle.launcher.exec.BuildTreeLifecycleBuildActionExecutor.execute(BuildTreeLifecycleBuildActionExecutor.java:40)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:61)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor$3.call(RunAsBuildOperationBuildActionExecutor.java:57)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionExecutor.execute(RunAsBuildOperationBuildActionExecutor.java:57)
    	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecutor.execute(ContinuousBuildActionExecutor.java:103)
    	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecutor.execute(SubscribableBuildActionExecutor.java:64)
    	at org.gradle.internal.session.DefaultBuildSessionContext.execute(DefaultBuildSessionContext.java:46)
    	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.lambda$execute$0(BuildSessionLifecycleBuildActionExecuter.java:55)
    	at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:69)
    	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:54)
    	at org.gradle.tooling.internal.provider.BuildSessionLifecycleBuildActionExecuter.execute(BuildSessionLifecycleBuildActionExecuter.java:36)
    	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
    	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
    	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:63)
    	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
    	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:58)
    	at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:42)
    	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:47)
    	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
    	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:29)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
    	at org.gradle.util.internal.Swapper.swap(Swapper.java:38)
    	at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:84)
    	at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    	at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    	at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
    	at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    	at java.base/java.lang.Thread.run(Thread.java:834)
    

    Seems that for some reason the sample code webrtc-kmp-0.89.5-samplessources.jar is required which is not available in the multi-platform environment.

    opened by mihai1voicescu 2
  • Gradle sync failed. Task :cinteropWebRTCIosArm64 FAILED

    Gradle sync failed. Task :cinteropWebRTCIosArm64 FAILED

    I'm getting an error trying to build apparently the iOS WebRTC module. Have anyone encountered the same issue?

    > Task :cinteropWebRTCIosArm64 FAILED
    Exception in thread "main" java.lang.Error: /var/folders/_3/vp1jc0yx1kxd7ly1_0mqlds80000gn/T/3016699046582275599.m:1:9: fatal error: could not build module 'WebRTC'
    	at org.jetbrains.kotlin.native.interop.indexer.UtilsKt.ensureNoCompileErrors(Utils.kt:192)
    	at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesASTFiles(ModuleSupport.kt:68)
    	at org.jetbrains.kotlin.native.interop.indexer.ModuleSupportKt.getModulesInfo(ModuleSupport.kt:14)
    	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.buildNativeLibrary(main.kt:531)
    	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.processCLib(main.kt:268)
    	at org.jetbrains.kotlin.native.interop.gen.jvm.MainKt.interop(main.kt:76)
    	at org.jetbrains.kotlin.cli.utilities.InteropCompilerKt.invokeInterop(InteropCompiler.kt:45)
    	at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:38)
    	at org.jetbrains.kotlin.cli.utilities.MainKt.main(main.kt:60)
    
    Execution failed for task ':cinteropWebRTCIosArm64'.
    > Process 'command '/Users/pablomartinezpiles/Library/Java/JavaVirtualMachines/corretto-1.8.0_312/Contents/Home/bin/java'' finished with non-zero exit value 1
    
    * Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':cinteropWebRTCIosArm64'.
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:187)
    	at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:268)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:185)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
    	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    Caused by: org.gradle.process.internal.ExecException: Process 'command '/Users/pablomartinezpiles/Library/Java/JavaVirtualMachines/corretto-1.8.0_312/Contents/Home/bin/java'' finished with non-zero exit value 1
    	at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
    	at org.gradle.process.internal.DefaultJavaExecAction.execute(DefaultJavaExecAction.java:52)
    	at org.gradle.process.internal.DefaultExecActionFactory.javaexec(DefaultExecActionFactory.java:198)
    	at org.gradle.api.internal.project.DefaultProject.javaexec(DefaultProject.java:1145)
    	at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.runViaExec(KotlinToolRunner.kt:102)
    	at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.run(KotlinToolRunner.kt:77)
    	at org.jetbrains.kotlin.gradle.tasks.CInteropProcess.processInterop(KotlinNativeTasks.kt:1017)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:498)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:483)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:466)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:105)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:270)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:248)
    	at org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83)
    	at org.gradle.internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37)
    	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50)
    	at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:47)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:47)
    	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37)
    	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68)
    	at org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38)
    	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50)
    	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:36)
    	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41)
    	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74)
    	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:55)
    	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51)
    	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29)
    	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54)
    	at org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35)
    	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60)
    	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:27)
    	at org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174)
    	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74)
    	at org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)
    	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40)
    	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29)
    	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:36)
    	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36)
    	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:84)
    	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:41)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27)
    	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91)
    	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
    	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:78)
    	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:49)
    	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:105)
    	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:50)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:38)
    	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43)
    	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31)
    	at org.gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:283)
    	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40)
    	at org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:30)
    	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37)
    	at org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27)
    	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:49)
    	at org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:35)
    	at org.gradle.internal.execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:184)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:173)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
    	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:74)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:408)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    
    
    
    opened by pablogeek 2
  • Do not see a way to pass isReliable flag to data channel, seems intermittant

    Do not see a way to pass isReliable flag to data channel, seems intermittant

    Glad to see you are updating the binaries. I don't need a sample video app. More minor updates to bring in the latest webrtc might make it work better for me.

    opened by sweiss435 1
  • This commit introduces an infinite recursion on JS

    This commit introduces an infinite recursion on JS

    @shepeliev this commit introduces an infinite recursion on JS

        actual val tracks: List<MediaStreamTrack>
            get() = audioTracks + videoTracks
    

    and

    val MediaStream.audioTracks: List<AudioStreamTrack>
        get() = tracks.mapNotNull { it as? AudioStreamTrack }
    
    val MediaStream.videoTracks: List<VideoStreamTrack>
        get() = tracks.mapNotNull { it as? VideoStreamTrack }
    

    https://github.com/shepeliev/webrtc-kmp/pull/42/files#diff-3af5c1edf59040444ffcd2c646980c023d05964a7f28c7598c655e4403d2bce1R13

    Originally posted by @mihai1voicescu in https://github.com/shepeliev/webrtc-kmp/issues/42#issuecomment-1035101642

    bug 
    opened by shepeliev 1
  • ScreenShare suport(JS)

    ScreenShare suport(JS)

    We kinda need suport for ScreenSharing in JS.

    Should be as easy as adding

    inline fun org.w3c.dom.mediacapture.MediaDevices.getDisplayMedia(): Promise<org.w3c.dom.mediacapture.MediaStream> =
        this.asDynamic().getDisplayMedia()
    inline fun org.w3c.dom.mediacapture.MediaDevices.getDisplayMedia(constraints: org.w3c.dom.mediacapture.MediaStreamConstraints): Promise<org.w3c.dom.mediacapture.MediaStream> =
        this.asDynamic().getDisplayMedia(constraints)
    

    And

        suspend fun getDeviceMedia(streamConstraints: MediaStreamConstraintsBuilder.() -> Unit): MediaStream {
            val constraints = MediaStreamConstraintsBuilder().let {
                streamConstraints(it)
                it.constraints
            }
    
            val jsStream = window.navigator.mediaDevices.getDisplayMedia(constraints.toJson()).await()
            return MediaStream(jsStream)
        }
    

    In the JS MediaDevices. So looks very easy for JS.

    Soooo:

    1. Does this sound OK?
    2. Can I send a PR with this?
    3. Do we prefer this function only be exposed in JS for the moment or add it to the common interface and use a TODO("Not implemented for this platform yet")?
    opened by mihai1voicescu 1
  • Compress WebRTC framework

    Compress WebRTC framework

    It would be nice to compress WebRTC framework into gzip the same is it in react-native-webrtc repo https://github.com/react-native-webrtc/react-native-webrtc/tree/master/apple

    opened by shepeliev 1
  • [Draft] JVM Support: This is a draft PR and I am planning to work on this

    [Draft] JVM Support: This is a draft PR and I am planning to work on this

    1. The JVM support will depend on https://github.com/devopvoid/webrtc-java
    2. I am planning to use this for my repo https://github.com/oianmol/SlackComposeMultiplatform

    Please let me know if you have any questions! Thanks!

    opened by oianmol 0
  • Fix background threading for IOS

    Fix background threading for IOS

    PeerConnection disconnects when IOS goes to background if I create peer connection on main scope. However, if I try and use GlobalScope, when I do: val config = RtcConfiguration() I get: Trying to access top level value not marked as @ThreadLocal or @SharedImmutable from non-main thread kotlin.native.IncorrectDereferenceException: Trying to access top level value not marked as @ThreadLocal or @SharedImmutable from non-main thread I believe you need to add @ThreadImmutable like: https://github.com/realm/realm-kotlin/pull/822/files to values in classes like RtcConfiguration like @ThreadImmutable val js: Json

    bug 
    opened by sweiss435 0
  • Running tests on master fails

    Running tests on master fails

    Running the tests on master on Android fails with:

    java.lang.IllegalStateException: No instrumentation registered! Must run under a registering instrumentation.
    

    Any ideas on how I can fix it @shepeliev ? I hope you are doing OK 😄 .

    I am trying to add support for IR.

    opened by mihai1voicescu 1
  • iOS simulator build fails on M1

    iOS simulator build fails on M1

    Hi,

    when I try to build my app for iOS with this as a dependency the build fails with the following error:

    
    Showing Recent Issues
    Capabilities for Signing & Capabilities may not function correctly because its entitlements use a placeholder team ID. To resolve this, select a development team in the iosApp editor.
    
    Ld /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator/iosApp.app/iosApp normal (in target 'iosApp' from project 'iosApp')
        cd /Users/moritz/AndroidStudioProjects/TestProject/iosApp
        /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -target arm64-apple-ios14.1-simulator -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator15.2.sdk -L/Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator -F/Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator -F/Users/moritz/AndroidStudioProjects/TestProject/iosApp/Pods/../../shared/build/cocoapods/framework -F/Users/moritz/AndroidStudioProjects/TestProject/iosApp/Pods/webrtc-kmp/framework -F/Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator/XCFrameworkIntermediates/webrtc-kmp -filelist /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Intermediates.noindex/iosApp.build/Debug-iphonesimulator/iosApp.build/Objects-normal/arm64/iosApp.LinkFileList -Xlinker -rpath -Xlinker /usr/lib/swift -Xlinker -rpath -Xlinker @executable_path/Frameworks -Xlinker -rpath -Xlinker @loader_path/Frameworks -Xlinker -rpath -Xlinker @executable_path/Frameworks -dead_strip -Xlinker -object_path_lto -Xlinker /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Intermediates.noindex/iosApp.build/Debug-iphonesimulator/iosApp.build/Objects-normal/arm64/iosApp_lto.o -Xlinker -export_dynamic -Xlinker -no_deduplicate -Xlinker -objc_abi_version -Xlinker 2 -fobjc-link-runtime -L/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphonesimulator -L/usr/lib/swift -Xlinker -add_ast_path -Xlinker /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Intermediates.noindex/iosApp.build/Debug-iphonesimulator/iosApp.build/Objects-normal/arm64/iosApp.swiftmodule -ObjC -lc -lc++ -lsqlite3 -lstdc++ -framework AVFoundation -framework AudioToolbox -framework CoreAudio -framework CoreGraphics -framework CoreVideo -framework GLKit -framework VideoToolbox -framework WebRTC -framework shared -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __entitlements -Xlinker /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Intermediates.noindex/iosApp.build/Debug-iphonesimulator/iosApp.build/iosApp.app-Simulated.xcent -framework Pods_iosApp -Xlinker -no_adhoc_codesign -Xlinker -dependency_info -Xlinker /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Intermediates.noindex/iosApp.build/Debug-iphonesimulator/iosApp.build/Objects-normal/arm64/iosApp_dependency_info.dat -o /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator/iosApp.app/iosApp
    
    ld: warning: ignoring file /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator/WebRTC.framework/WebRTC, missing required architecture arm64 in file /Users/moritz/Library/Developer/Xcode/DerivedData/iosApp-gfbujjgcrbxffubzfovqsagohwuo/Build/Products/Debug-iphonesimulator/WebRTC.framework/WebRTC (1 slices)
    ld: in /Users/moritz/AndroidStudioProjects/TestProject/shared/build/cocoapods/framework/shared.framework/shared(dummy_vers.o), building for iOS Simulator, but linking in object file built for iOS, file '/Users/moritz/AndroidStudioProjects/TestProject/shared/build/cocoapods/framework/shared.framework/shared' for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    I am quite sure I have set everything up correctly. This is my podfile:

    target 'iosApp' do
      use_frameworks!
      platform :ios, '14.1'
      pod 'shared', :path => '../shared'
      pod 'webrtc-kmp', :git => '[email protected]:shepeliev/webrtc-kmp.git', :tag => 'v0.89.6'
    end
    

    This is my shared build.gradle:

    plugins {
        kotlin("multiplatform")
        kotlin("native.cocoapods")
        id("com.android.library")
    }
    
    version = "1.0"
    
    kotlin {
        android()
        iosX64()
        iosArm64()
        iosSimulatorArm64()
        jvm()
    
        cocoapods {
            summary = "Some description for the Shared Module"
            homepage = "Link to the Shared Module homepage"
            ios.deploymentTarget = "14.1"
            podfile = project.file("../iosApp/Podfile")
            framework {
                baseName = "shared"
            }
        }
    
        ios {
            binaries
                .filterIsInstance<org.jetbrains.kotlin.gradle.plugin.mpp.Framework>()
                .forEach {
                    it.transitiveExport = true
                    it.export("com.shepeliev:webrtc-kmp:0.89.6")
                }
        }
        
        sourceSets {
            val commonMain by getting
            val commonTest by getting {
                dependencies {
                    implementation(kotlin("test"))
                }
            }
    
            val clientMain by creating
            val clientTest by creating
    
            val androidMain by getting {
                dependsOn(clientMain)
    
                dependencies {
                    api("com.shepeliev:webrtc-kmp:0.89.6")
                    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0-native-mt")
                }
            }
            val androidTest by getting {
                dependsOn(clientTest)
            }
            val iosMain by getting
            val iosTest by getting
            val jvmMain by getting
            val jvmTest by getting
        }
    }
    
    android {
        compileSdk = 32
        sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
        defaultConfig {
            minSdk = 21
            targetSdk = 32
        }
    }
    

    I have made sure that I am opening the .xcworkspace file instead of the .xcodeproj one. I have also tried these two commands in the iosApp directory:

    pod deintegrate
    pod install
    

    They ran successfully.

    From the error message I am assuming this could be because I am using a mac with an M1 chip. What do you think?

    opened by puchm 3
  • Rendering to SurfaceView sometimes does not work in Android

    Rendering to SurfaceView sometimes does not work in Android

    My initial scenario was:

    1. initializeWebRtc in Application (not in Activity, so it survives a tilt)
    2. make a call
    3. hang up
    4. call again
    5. now video is black
    6. tilt the screen in any direction, activity gets rebuilt and everything works OK

    According to the logs, webGL is rendering frames but it's all black until the first tilt.

    Unfortunately I could not get a minimal replication scenario for this. Should be something similar to this branch https://github.com/mihai1voicescu/WebRTCCompose/tree/with-mainApp

    I however managed to replicate the bug (or at least it looks like it) in a different scenario using Activity as the context and rebuilding the webrtc connection each tilt. You can find the minimal replication scenario here https://github.com/mihai1voicescu/WebRTCCompose/tree/master

    To replicate, as stated in the readme:

    1. Run App
    2. Connection is established
    3. Tilt screen
    4. Screen is now black but it is rendering frames

    I assume it's something regarding some leftover metadata in the webGL context but I am kinda stuck 😅 .

    Working render logs:

     01-27 17:40:34.224  I  [10501/15589] org.webrtc.Logging CameraStatistics: Camera fps: 25.
     01-27 17:40:34.307  I  [10501/15678] org.webrtc.Logging EglRenderer: Duration: 4002 ms. Frames received: 100. Dropped: 0. Rendered: 100. Render fps: 25.0. Average render time: 7989 us. Average swapBuffer time: 2912 us.
     01-27 17:40:36.225  I  [10501/15589] org.webrtc.Logging CameraStatistics: Camera fps: 25.
     01-27 17:40:38.226  I  [10501/15589] org.webrtc.Logging CameraStatistics: Camera fps: 25.
     01-27 17:40:38.310  I  [10501/15678] org.webrtc.Logging EglRenderer: Duration: 4003 ms. Frames received: 44. Dropped: 0. Rendered: 44. Render fps: 11.0. Average render time: 7018 us. Average swapBuffer time: 3635 us.
     01-27 17:40:40.227  I  [10501/15589] org.webrtc.Logging CameraStatistics: Camera fps: 25.
     01-27 17:40:42.228  I  [10501/15589] org.webrtc.Logging CameraStatistics: Camera fps: 25.
     01-27 17:40:42.313  I  [10501/15678] org.webrtc.Logging EglRenderer: Duration: 4002 ms. Frames received: 72. Dropped: 0. Rendered: 72. Render fps: 18.0. Average render time: 7423 us. Average swapBuffer time: 3183 us.
    

    Black render logs:

     01-27 17:42:13.401  I  [10501/18707] org.webrtc.Logging EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 6803 us. Average swapBuffer time: 2567 us.
     01-27 17:42:13.691  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:15.691  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:17.405  I  [10501/18707] org.webrtc.Logging EglRenderer: Duration: 4002 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 4767 us. Average swapBuffer time: 1798 us.
     01-27 17:42:17.692  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:18.159  I  [10501/15594] org.webrtc.Logging NetworkMonitorAutoDetect: capabilities changed: [ Transports: WIFI Capabilities: NOT_METERED&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&VALIDATED&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=430185Kbps LinkDnBandwidth>=677812Kbps SignalStrength: -64 AdministratorUids: [] RequestorUid: -1 RequestorPackageName: null]
     01-27 17:42:19.693  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:21.410  I  [10501/18707] org.webrtc.Logging EglRenderer: Duration: 4004 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 4716 us. Average swapBuffer time: 1845 us.
     01-27 17:42:21.694  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:23.694  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:25.420  I  [10501/18707] org.webrtc.Logging EglRenderer: Duration: 4006 ms. Frames received: 120. Dropped: 0. Rendered: 120. Render fps: 30.0. Average render time: 5039 us. Average swapBuffer time: 1979 us.
     01-27 17:42:25.695  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 30.
     01-27 17:42:27.698  I  [10501/18694] org.webrtc.Logging CameraStatistics: Camera fps: 29.
    

    Any ideas or pointers?

    Note that I am using Jetpack Compose which kills the Surfaces after they exit the tree.

    opened by mihai1voicescu 2
Releases(v.0.106.0)
  • v.0.106.0(Oct 25, 2022)

    What's Changed

    • Refactor building by @shepeliev in https://github.com/shepeliev/webrtc-kmp/pull/69
    • Refactor lib initialization by @shepeliev in https://github.com/shepeliev/webrtc-kmp/pull/70
    • Update WebRTC to M106 by @shepeliev in https://github.com/shepeliev/webrtc-kmp/pull/72

    Full Changelog: https://github.com/shepeliev/webrtc-kmp/compare/v.0.100.2...v.0.106.0

    Source code(tar.gz)
    Source code(zip)
  • v.0.100.2(Aug 17, 2022)

  • v.0.100.1(Aug 12, 2022)

  • v0.100.0(Aug 10, 2022)

    What's Changed

    • Kotlin 1.7.0 https://github.com/shepeliev/webrtc-kmp/pull/53
    • Update WebRTC platform libs to M100 https://github.com/shepeliev/webrtc-kmp/pull/60
    • Implement sample video chat application https://github.com/shepeliev/webrtc-kmp/pull/53
    • Platform WebRTC libraries removed from the repo https://github.com/shepeliev/webrtc-kmp/pull/53
    • Fix offer/answer constraints https://github.com/shepeliev/webrtc-kmp/pull/37
    • Switch to new memory model https://github.com/shepeliev/webrtc-kmp/pull/41
    • Refactor MediaStreamTrack and MediaStream https://github.com/shepeliev/webrtc-kmp/pull/42
    • Fix Android does not respect FPS constraints https://github.com/shepeliev/webrtc-kmp/pull/44
    • Fix infinite recursion by @mihai1voicescu https://github.com/shepeliev/webrtc-kmp/pull/48
    • Refactor Android PeerConnection events in https://github.com/shepeliev/webrtc-kmp/pull/57
    • JS: Fix importing WebRTC adapter https://github.com/shepeliev/webrtc-kmp/pull/61
    Source code(tar.gz)
    Source code(zip)
  • v0.89.6(Nov 29, 2021)

  • v.089.5(Oct 5, 2021)

  • v0.89.4(Sep 5, 2021)

  • v.0.89.3(Aug 24, 2021)

  • v0.89.2(Jun 22, 2021)

    Changelog

    • updated Kotlin 1.5.10 and AGP 4.2.0 #16
    • refactored MediaDevice and initialization of PeerConnectionFactory #18
    • changed MediaDevices.getUserMedia() signature #18
    • implemented MediaStreamConstraints #18
    • switching camera API moved to VideoStreamTrack #18
    • some bugs fixed #18
    • implemented JS target #20
    Source code(tar.gz)
    Source code(zip)
  • v0.89.1(May 23, 2021)

Owner
Alex Shepeliev
Android developer, Kotlin fun
Alex Shepeliev
WebRTC Ktor Signaling Server Example

This repo is part of WebRTC examples, see also: P2P Android client based on WebRTC

Artem Bagritsevich 8 Aug 30, 2022
WebRTC Android App Example

This repo is part of WebRTC examples, see also: WebRTC Signaling server in Ktor - https://github.com/artem-bagritsevich/WebRTCKtorSignalingServerExamp

Artem Bagritsevich 5 Nov 14, 2022
Ktorfit - a HTTP client/Kotlin Symbol Processor for Kotlin Multiplatform (Js, Jvm, Android, iOS, Linux) using KSP and Ktor clients inspired by Retrofit

Ktorfit is a HTTP client/Kotlin Symbol Processor for Kotlin Multiplatform (Js, Jvm, Android, iOS, Linux) using KSP and Ktor clients inspired by Retrofit

Jens Klingenberg 637 Dec 25, 2022
Multiplatform coroutine-based HTTP client wrapper for Kotlin

networkinkt This is a lightweight HTTP client for Kotlin. It relies on coroutines on both JS & JVM platforms. Here is a simple GET request: val text =

Egor Zhdan 31 Jul 27, 2022
Kotlin-echo-client - Echo client using Kotlin with Ktor networking library

Overview This repository contains an echo server implemented with Kotlin and kto

Elliot Barlas 2 Sep 1, 2022
Kotlin-REST-Retrofit - Simple client to consume a REST API with Retrofit using Kotlin

Kotlin REST Retrofit Sencillo cliente para consumir una API REST con Retrofit us

José Luis González Sánchez 5 Nov 4, 2022
Write your asynchronous Network / IO call painlessly in Kotlin !!

Asynkio : Write asynced IO/ Network calls painlessly on android | | | Documentation Write your network requests, IO calls in android with Kotlin seaml

Nikhil Chaudhari 82 Jan 26, 2022
HttpMocker is a simple HTTP mocking library written in Kotlin to quickly and easily handle offline modes in your apps

HttpMocker HttpMocker is a very lightweight Kotlin library that allows to mock HTTP calls relying on either OkHttp or the Ktor client libraries. It ca

David Blanc 174 Nov 28, 2022
Kotlin HTTP requests library. Similar to Python requests.

khttp khttp is a simple library for HTTP requests in Kotlin. It functions similarly to Python's requests module. import khttp.get fun main(args: Arra

Anna Clemens 466 Dec 20, 2022
Kotlin DSL http client

Introduction Kotlin DSL http client Features ?? Developers Experience-driven library without verbosity. ?? Native way to use http client in Kotlin. ??

Sergei Rybalkin 461 Dec 13, 2022
The easiest HTTP networking library for Kotlin/Android

Fuel The easiest HTTP networking library for Kotlin/Android. You are looking at the documentation for 2.x.y.. If you are looking for the documentation

Kittinun Vantasin 4.3k Jan 8, 2023
The universal proxy toolchain for Android, written in Kotlin.

SagerNet for Android The universal proxy toolchain for Android, written in Kotlin.

Project S 4.6k Dec 30, 2022
A gRPC Kotlin based server and client starter that builds with Gradle and runs on the JVM

gRPC Kotlin starter Overview This directory contains a simple bar service written as a Kotlin gRPC example. You can find detailed instructions for bui

Hypto 8 Sep 19, 2022
A Kotlin client for the gRPC based Bar Service

Bar Service Kotlin Client Overview This directory contains a simple bar service client written in Kotlin against generated models (protos) You can fin

Hypto 1 Nov 18, 2021
An RPC library for Kotlin services that strives to balance developer productivity and performance.

IndieRpc An RPC library for Kotlin services that strives to balance developer productivity and performance. IndieRpc is inspired by Golang's net/rpc p

Asad Awadia 3 Nov 30, 2021
gRPC-Kotlin/JVM - An RPC library and framework

gRPC-Kotlin/JVM - An RPC library and framework A Kotlin/JVM implementation of gRPC: A high performance, open source, general RPC framework that puts m

null 2 Nov 25, 2021
Starter code for getting and saving data from the Internet using Kotlin.

Doggos Description Doggos is an app that fetches (pun intended) information from a third party API. The API returns data about a random dog that conta

Latifah President 0 Nov 4, 2021
A "fluent" OkHTTP library for Kotlin based on string extensions.

okfluent A "fluent" OkHTTP library for Kotlin based on string extensions. Do not take this project seriously, I just wanted to show that this kind of

Duale Siad 0 Nov 23, 2021
A product registration service using the Kotlin language and the Micronaut and Grpc framework

A product registration service using the Kotlin language and the Micronaut and Grpc framework

Mateus Araújo 30 Nov 2, 2022