private fun createPeerConnection() {
PeerConnectionFactory.initialize(
InitializationOptions.builder(this@MainActivity)
.setEnableInternalTracer(true)
.createInitializationOptions()
)
val factory = PeerConnectionFactory.builder()
.setAudioDeviceModule(
JavaAudioDeviceModule.builder(this@MainActivity)
.setUseHardwareAcousticEchoCanceler(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
.setUseHardwareNoiseSuppressor(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
.createAudioDeviceModule().also {
it.setMicrophoneMute(false)
it.setSpeakerMute(false)
}
)
.createPeerConnectionFactory()
val iceServers = getICEServerList()
val rtcConfig = PeerConnection.RTCConfiguration(iceServers).apply {
sdpSemantics = PeerConnection.SdpSemantics.UNIFIED_PLAN
}
Log.w(TAG, "CREATING PEER CONNECTION")
val peerConnection = factory.createPeerConnection(rtcConfig, peerConnObserver)
Log.d(TAG, "peerConnection: $peerConnection")
if(peerConnection!=null) {
Log.d(TAG, "peerConnection: ${peerConnection.connectionState()}")
}
}
private fun getICEServerList(): List<PeerConnection.IceServer> {
val iceServers = arrayListOf<PeerConnection.IceServer>()
iceServers.add(
PeerConnection.IceServer.builder("stun:
stun.l.google.com:19302").createIceServer()
)
return iceServers
}
private val peerConnObserver = object : PeerConnection.Observer {
override fun onSignalingChange(p0: PeerConnection.SignalingState?) {
Log.d(TAG, "onSignalingChange: ")
}
override fun onIceConnectionChange(p0: PeerConnection.IceConnectionState?) {
Log.d(TAG, "onIceConnectionChange: ")
}
override fun onIceConnectionReceivingChange(p0: Boolean) {
Log.d(TAG, "onIceConnectionReceivingChange: ")
}
override fun onIceGatheringChange(p0: PeerConnection.IceGatheringState?) {
Log.d(TAG, "onIceGatheringChange: ")
}
override fun onIceCandidate(p0: IceCandidate?) {
Log.d(TAG, "onIceCandidate: ")
}
override fun onIceCandidatesRemoved(p0: Array<out IceCandidate>?) {
Log.d(TAG, "onIceCandidatesRemoved: ")
}
override fun onAddStream(p0: MediaStream?) {
Log.d(TAG, "onAddStream: ")
}
override fun onRemoveStream(p0: MediaStream?) {
Log.d(TAG, "onRemoveStream: ")
}
override fun onDataChannel(p0: DataChannel?) {
Log.d(TAG, "onDataChannel: ")
}
override fun onRenegotiationNeeded() {
Log.d(TAG, "onRenegotiationNeeded: ")
}
override fun onIceCandidateError(event: IceCandidateErrorEvent?) {
Log.d(TAG, "onRenegotiationNeeded: ")
}
}