From 82c9ab52980878134e8c166ce43fe6e6cc0bf5eb Mon Sep 17 00:00:00 2001 From: Piasy Date: Thu, 20 Feb 2025 08:51:05 +0800 Subject: [PATCH] fix audio route for Android & iOS --- .../kmp/webrtc/android/CallActivity.java | 7 +-- .../kmp/webrtc/AndroidAudioDeviceManager.kt | 56 +++++++++++++++++++ .../kmp/webrtc/AndroidPeerConnectionClient.kt | 5 ++ .../AndroidPeerConnectionClientFactory.kt | 14 +++-- .../piasy/kmp/webrtc/IOSAudioDeviceManager.kt | 43 ++++++++++++++ .../kmp/webrtc/ObjCPeerConnectionClient.kt | 5 ++ .../webrtc/ObjCPeerConnectionClientFactory.kt | 8 ++- .../piasy/kmp/webrtc/AudioDeviceManager.kt | 30 ++++++++++ .../piasy/kmp/webrtc/PeerConnectionClient.kt | 5 ++ .../kmp/webrtc/PeerConnectionClientFactory.kt | 22 +++++++- .../kmp/webrtc/{ => data}/IceCandidate.kt | 2 +- .../piasy/kmp/webrtc/{ => data}/IceServer.kt | 2 +- .../kmp/webrtc/{ => data}/RtcStatsReport.kt | 2 +- .../webrtc/{ => data}/SessionDescription.kt | 2 +- .../kmp/webrtc/{ => utils}/FieldTrial.kt | 2 +- .../kmp/webrtc/{ => utils}/FieldTrialTest.kt | 2 +- 16 files changed, 187 insertions(+), 20 deletions(-) create mode 100644 kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidAudioDeviceManager.kt create mode 100644 kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/IOSAudioDeviceManager.kt create mode 100644 kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/AudioDeviceManager.kt rename kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/{ => data}/IceCandidate.kt (82%) rename kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/{ => data}/IceServer.kt (92%) rename kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/{ => data}/RtcStatsReport.kt (91%) rename kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/{ => data}/SessionDescription.kt (87%) rename kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/{ => utils}/FieldTrial.kt (93%) rename kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/{ => utils}/FieldTrialTest.kt (95%) diff --git a/example/androidApp/src/main/java/com/piasy/kmp/webrtc/android/CallActivity.java b/example/androidApp/src/main/java/com/piasy/kmp/webrtc/android/CallActivity.java index dcdb0f6..b3c640a 100644 --- a/example/androidApp/src/main/java/com/piasy/kmp/webrtc/android/CallActivity.java +++ b/example/androidApp/src/main/java/com/piasy/kmp/webrtc/android/CallActivity.java @@ -2,7 +2,6 @@ import android.content.Context; import android.content.Intent; -import android.content.res.AssetManager; import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; @@ -27,12 +26,12 @@ import java.util.List; import com.piasy.kmp.webrtc.AndroidPrivateConfig; -import com.piasy.kmp.webrtc.IceCandidate; +import com.piasy.kmp.webrtc.data.IceCandidate; import com.piasy.kmp.webrtc.PeerConnectionClient; import com.piasy.kmp.webrtc.PeerConnectionClientCallback; import com.piasy.kmp.webrtc.PeerConnectionClientFactory; -import com.piasy.kmp.webrtc.RtcStatsReport; -import com.piasy.kmp.webrtc.SessionDescription; +import com.piasy.kmp.webrtc.data.RtcStatsReport; +import com.piasy.kmp.webrtc.data.SessionDescription; import com.piasy.kmp.xlog.Logging; import kotlin.Unit; diff --git a/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidAudioDeviceManager.kt b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidAudioDeviceManager.kt new file mode 100644 index 0000000..f549ff0 --- /dev/null +++ b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidAudioDeviceManager.kt @@ -0,0 +1,56 @@ +package com.piasy.kmp.webrtc + +import android.content.Context +import android.media.AudioManager +import com.piasy.avconf.audio.AppRTCAudioManager +import com.piasy.avconf.audio.AppRTCAudioManager.AudioDevice.BLUETOOTH +import com.piasy.avconf.audio.AppRTCAudioManager.AudioDevice.EARPIECE +import com.piasy.avconf.audio.AppRTCAudioManager.AudioDevice.SPEAKER_PHONE +import com.piasy.avconf.audio.AppRTCAudioManager.AudioDevice.WIRED_HEADSET + +/** + * Created by Piasy{github.com/Piasy} on 2019-11-27. + */ +class AndroidAudioDeviceManager(private val context: Context, speakerPhoneMode: SpeakerphoneMode) : + AudioDeviceManager { + private val audioManager = AppRTCAudioManager.create(context, speakerphoneMode(speakerPhoneMode)) + private var speakerOn = false + + private fun speakerphoneMode(mode: SpeakerphoneMode) = when (mode) { + SpeakerphoneMode.AUTO -> AppRTCAudioManager.SPEAKERPHONE_AUTO + SpeakerphoneMode.OPEN -> AppRTCAudioManager.SPEAKERPHONE_TRUE + SpeakerphoneMode.CLOSE -> AppRTCAudioManager.SPEAKERPHONE_FALSE + } + + override fun setSpeakerphoneOn(speakerOn: Boolean) { + this.speakerOn = speakerOn + val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + if (!audioManager.isWiredHeadsetOn) { + audioManager.isSpeakerphoneOn = speakerOn + } + } + + override fun start(callback: AudioDeviceManagerCallback) { + audioManager.start { selectedAudioDevice, _ -> + when (selectedAudioDevice) { + SPEAKER_PHONE -> { + setSpeakerphoneOn(speakerOn) + callback.onAudioDeviceChanged(AudioDevice.SPEAKER_PHONE) + } + + WIRED_HEADSET -> callback.onAudioDeviceChanged(AudioDevice.WIRED_HEADSET) + EARPIECE -> callback.onAudioDeviceChanged(AudioDevice.EARPIECE) + BLUETOOTH -> callback.onAudioDeviceChanged(AudioDevice.BLUETOOTH) + else -> callback.onAudioDeviceChanged(AudioDevice.NONE) + } + } + audioManager.changeAudioRoute(true) + if (audioManager.selectedAudioDevice == SPEAKER_PHONE) { + setSpeakerphoneOn(true) + } + } + + override fun stop() { + audioManager.stop() + } +} diff --git a/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClient.kt b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClient.kt index 5931b53..f779163 100644 --- a/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClient.kt +++ b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClient.kt @@ -1,5 +1,10 @@ package com.piasy.kmp.webrtc +import com.piasy.kmp.webrtc.data.IceCandidate +import com.piasy.kmp.webrtc.data.IceServer +import com.piasy.kmp.webrtc.data.RtcStats +import com.piasy.kmp.webrtc.data.RtcStatsReport +import com.piasy.kmp.webrtc.data.SessionDescription import org.webrtc.PeerConnection import org.webrtc.PeerConnection.TlsCertPolicy import org.webrtc.PeerConnection.TlsCertPolicy.TLS_CERT_POLICY_INSECURE_NO_CHECK diff --git a/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClientFactory.kt b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClientFactory.kt index 1d7e3e9..51dcb9f 100644 --- a/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClientFactory.kt +++ b/kmp-webrtc/src/androidMain/kotlin/com/piasy/kmp/webrtc/AndroidPeerConnectionClientFactory.kt @@ -27,10 +27,12 @@ data class AndroidPrivateConfig( ) : PeerConnectionClientFactory.PrivateConfig() class AndroidPeerConnectionClientFactory( - private val config: Config, + config: Config, + errorHandler: (Int, String) -> Unit, + appContext: Context, private val privateConfig: AndroidPrivateConfig, - private val errorHandler: (Int, String) -> Unit, -) : PeerConnectionClientFactory(), DefaultLifecycleObserver { +) : PeerConnectionClientFactory(config, errorHandler, AndroidAudioDeviceManager(appContext, SpeakerphoneMode.AUTO)), + DefaultLifecycleObserver { init { privateConfig.lifecycle.addObserver(this) } @@ -124,6 +126,7 @@ class AndroidPeerConnectionClientFactory( } override fun destroyPeerConnectionFactory() { + super.destroyPeerConnectionFactory() com.piasy.avconf.PeerConnectionClient.destroyPeerConnectionFactory() } @@ -255,14 +258,15 @@ actual fun createPeerConnectionClientFactory( config: PeerConnectionClientFactory.Config, errorHandler: (Int, String) -> Unit, ): PeerConnectionClientFactory { + val appContext = AndroidPeerConnectionClientFactory.sAppContext!! val privateConfig = config.privateConfig as AndroidPrivateConfig com.piasy.avconf.PeerConnectionClient.createPeerConnectionFactory( - AndroidPeerConnectionClientFactory.sAppContext!!, + appContext, privateConfig.rootEglBase, privateConfig.options, privateConfig.recordSamplesReadyCallback, privateConfig.trackSamplesReadyCallback, privateConfig.enableH264HighProfile, ) - return AndroidPeerConnectionClientFactory(config, privateConfig, errorHandler) + return AndroidPeerConnectionClientFactory(config, errorHandler, appContext, privateConfig) } diff --git a/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/IOSAudioDeviceManager.kt b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/IOSAudioDeviceManager.kt new file mode 100644 index 0000000..9aabaff --- /dev/null +++ b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/IOSAudioDeviceManager.kt @@ -0,0 +1,43 @@ +package com.piasy.kmp.webrtc + +import WebRTC.* +import com.piasy.kmp.webrtc.AudioDevice.BLUETOOTH +import com.piasy.kmp.webrtc.AudioDevice.EARPIECE +import com.piasy.kmp.webrtc.AudioDevice.NONE +import com.piasy.kmp.webrtc.AudioDevice.SPEAKER_PHONE +import com.piasy.kmp.webrtc.AudioDevice.WIRED_HEADSET +import platform.darwin.NSObject + +/** + * Created by Piasy{github.com/Piasy} on 2019-11-30. + */ +private class ObjCAudioDeviceManagerCallback(private val realCallback: AudioDeviceManagerCallback) : + CFAudioDeviceManagerDelegateProtocol, NSObject() { + override fun onAudioDeviceChanged(audioDevice: CFAudioDevice) { + realCallback.onAudioDeviceChanged( + when (audioDevice) { + CFAudioDevice.CF_SPEAKER_PHONE -> SPEAKER_PHONE + CFAudioDevice.CF_WIRED_HEADSET -> WIRED_HEADSET + CFAudioDevice.CF_EARPIECE -> EARPIECE + CFAudioDevice.CF_BLUETOOTH -> BLUETOOTH + else -> NONE + } + ) + } +} + +class IOSAudioDeviceManager : AudioDeviceManager { + private val realManager = CFAudioDeviceManager() + + override fun setSpeakerphoneOn(speakerOn: Boolean) { + realManager.setSpeakerphoneOn(speakerOn) + } + + override fun start(callback: AudioDeviceManagerCallback) { + realManager.start(ObjCAudioDeviceManagerCallback(callback)) + } + + override fun stop() { + realManager.stop() + } +} diff --git a/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClient.kt b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClient.kt index 864881c..a1d95a9 100644 --- a/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClient.kt +++ b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClient.kt @@ -4,6 +4,11 @@ import WebRTC.* import WebRTC.RTCSdpType.RTCSdpTypeAnswer import WebRTC.RTCSdpType.RTCSdpTypeOffer import WebRTC.RTCSdpType.RTCSdpTypePrAnswer +import com.piasy.kmp.webrtc.data.IceCandidate +import com.piasy.kmp.webrtc.data.IceServer +import com.piasy.kmp.webrtc.data.RtcStats +import com.piasy.kmp.webrtc.data.RtcStatsReport +import com.piasy.kmp.webrtc.data.SessionDescription import platform.darwin.NSObject import kotlin.native.ref.WeakReference diff --git a/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClientFactory.kt b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClientFactory.kt index 14eced0..7a736a6 100644 --- a/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClientFactory.kt +++ b/kmp-webrtc/src/appleMain/kotlin/com/piasy/kmp/webrtc/ObjCPeerConnectionClientFactory.kt @@ -1,6 +1,7 @@ package com.piasy.kmp.webrtc import WebRTC.* +import com.piasy.kmp.webrtc.utils.FieldTrial import com.piasy.kmp.xlog.Logging import com.piasy.kmp.xlog.initializeMarsXLog @@ -12,9 +13,9 @@ data class ObjCPrivateConfig( ) : PeerConnectionClientFactory.PrivateConfig() class ObjCPeerConnectionClientFactory( - private val config: Config, - private val errorHandler: (Int, String) -> Unit, -) : PeerConnectionClientFactory() { + config: Config, + errorHandler: (Int, String) -> Unit, +) : PeerConnectionClientFactory(config, errorHandler, IOSAudioDeviceManager()) { private var cameraCapturer: RTCCameraVideoCapturer? = null private var cameraCaptureController: CFCaptureController? = null private var screenCapturer: CFRPCapturer? = null @@ -99,6 +100,7 @@ class ObjCPeerConnectionClientFactory( } override fun destroyPeerConnectionFactory() { + super.destroyPeerConnectionFactory() CFPeerConnectionClient.destroyPeerConnectionFactory() } } diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/AudioDeviceManager.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/AudioDeviceManager.kt new file mode 100644 index 0000000..8ddb591 --- /dev/null +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/AudioDeviceManager.kt @@ -0,0 +1,30 @@ +package com.piasy.kmp.webrtc + +/** + * Created by Piasy{github.com/Piasy} on 2019-11-27. + */ +interface AudioDeviceManager { + fun setSpeakerphoneOn(speakerOn: Boolean) + + fun start(callback: AudioDeviceManagerCallback) + + fun stop() +} + +enum class AudioDevice { + SPEAKER_PHONE, + WIRED_HEADSET, + EARPIECE, + BLUETOOTH, + NONE, +} + +enum class SpeakerphoneMode { + AUTO, + OPEN, + CLOSE, +} + +interface AudioDeviceManagerCallback { + fun onAudioDeviceChanged(device: AudioDevice) +} diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClient.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClient.kt index d9d6bae..a5fcd9c 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClient.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClient.kt @@ -1,5 +1,10 @@ package com.piasy.kmp.webrtc +import com.piasy.kmp.webrtc.data.IceCandidate +import com.piasy.kmp.webrtc.data.IceServer +import com.piasy.kmp.webrtc.data.RtcStatsReport +import com.piasy.kmp.webrtc.data.SessionDescription + /** * Created by Piasy{github.com/Piasy} on 2019-11-26. */ diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClientFactory.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClientFactory.kt index 8826fde..3b9d5bb 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClientFactory.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/PeerConnectionClientFactory.kt @@ -5,7 +5,11 @@ import com.piasy.kmp.xlog.Logging /** * Created by Piasy{github.com/Piasy} on 2025-02-16. */ -abstract class PeerConnectionClientFactory { +abstract class PeerConnectionClientFactory( + protected val config: Config, + protected val errorHandler: (Int, String) -> Unit, + private val audioDeviceManager: AudioDeviceManager, +) { data class Config( val videoCaptureImpl: Int, val videoCaptureWidth: Int, @@ -29,6 +33,14 @@ abstract class PeerConnectionClientFactory { open class PrivateConfig + init { + audioDeviceManager.start(object : AudioDeviceManagerCallback { + override fun onAudioDeviceChanged(device: AudioDevice) { + // do nothing now + } + }) + } + abstract fun createPeerConnectionClient( peerUid: String, dir: Int, @@ -46,13 +58,19 @@ abstract class PeerConnectionClientFactory { abstract fun stopVideoCapture() abstract fun switchCamera(onFinished: (Boolean) -> Unit) + fun toggleSpeaker(speakerOn: Boolean) { + audioDeviceManager.setSpeakerphoneOn(speakerOn) + } + abstract fun adaptVideoOutputFormat( width: Int, height: Int, fps: Int ) - abstract fun destroyPeerConnectionFactory() + open fun destroyPeerConnectionFactory() { + audioDeviceManager.stop() + } protected fun logI(content: String) { Logging.info("$TAG@${hashCode()}", content) diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceCandidate.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceCandidate.kt similarity index 82% rename from kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceCandidate.kt rename to kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceCandidate.kt index 128dc36..c5f4cb2 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceCandidate.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceCandidate.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.data /** * Created by Piasy{github.com/Piasy} on 2019-11-17. diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceServer.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceServer.kt similarity index 92% rename from kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceServer.kt rename to kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceServer.kt index 23162b8..6d106f8 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/IceServer.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/IceServer.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.data /** * Created by Piasy{github.com/Piasy} on 2019-11-17. diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/RtcStatsReport.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/RtcStatsReport.kt similarity index 91% rename from kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/RtcStatsReport.kt rename to kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/RtcStatsReport.kt index 132e2ef..27f4971 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/RtcStatsReport.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/RtcStatsReport.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.data import kotlinx.serialization.Serializable diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/SessionDescription.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/SessionDescription.kt similarity index 87% rename from kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/SessionDescription.kt rename to kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/SessionDescription.kt index b6c40db..dea7c90 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/SessionDescription.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/data/SessionDescription.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.data /** * Created by Piasy{github.com/Piasy} on 2019-11-17. diff --git a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/FieldTrial.kt b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/utils/FieldTrial.kt similarity index 93% rename from kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/FieldTrial.kt rename to kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/utils/FieldTrial.kt index f699d46..8af0a4f 100644 --- a/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/FieldTrial.kt +++ b/kmp-webrtc/src/commonMain/kotlin/com/piasy/kmp/webrtc/utils/FieldTrial.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.utils internal object FieldTrial { fun fieldTrialsStringToMap(fieldTrials: String): Map { diff --git a/kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/FieldTrialTest.kt b/kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/utils/FieldTrialTest.kt similarity index 95% rename from kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/FieldTrialTest.kt rename to kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/utils/FieldTrialTest.kt index 759dfd5..624a04e 100644 --- a/kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/FieldTrialTest.kt +++ b/kmp-webrtc/src/commonTest/kotlin/com/piasy/kmp/webrtc/utils/FieldTrialTest.kt @@ -1,4 +1,4 @@ -package com.piasy.kmp.webrtc +package com.piasy.kmp.webrtc.utils import kotlin.test.Test import kotlin.test.assertEquals