시그널링 과정을 위해 소켓으로 통신하던 도중 다음과 같은 상황이 발생했습니다. createOffer호출 후 setLocalDescription을 호출하여 candidate가 보내지는데, WebRTC 통신
자체가 비동기로 진행이 되다보니 createOffer보다 candiate가 1~2개씩 먼저 도착하는 상황이 있습니다.
sendOffer
, setLocalDescription
도 일반함수입니다.sendOffer
, setLocalDescription
를 일시 중단 함수로 만들어주면서, 해당 코루틴 스코프내에서 순차적으로 동작하게 만들었습니다.with(peerConnection) {
createOffer(object : SdpObserver {
override fun onCreateSuccess(sessionDescription: SessionDescription) {
CoroutineScope(Dispatchers.IO).launch {
Log.d(RtcClient.TAG, "createOffer onCreateSuccess")
sendOffer(
sessionDescription = sessionDescription,
channelId = channelId,
targetUserId = targetUserId
)
setLocalDescription(sessionDescription)
Log.d(TAG, sessionDescription.description.toByteArray().size.toString())
}
}
override fun onSetSuccess() {
Log.d(RtcClient.TAG, "createOffer onCreateFailure")
}
override fun onCreateFailure(reason: String) {
Log.d(TAG, "createOffer onCreateFailure")
}
override fun onSetFailure(reason: String) {
Log.d(TAG, "createOffer onSetFailure")
}
}, mediaConstraints)
}