@@ -11,6 +11,8 @@ import org.webrtc.IceCandidate
11
11
import org.webrtc.MediaConstraints
12
12
import org.webrtc.MediaStream
13
13
import org.webrtc.PeerConnection
14
+ import org.webrtc.PeerConnection.Observer
15
+ import org.webrtc.PeerConnection.RTCConfiguration
14
16
import org.webrtc.PeerConnectionFactory
15
17
import org.webrtc.RtpReceiver
16
18
import org.webrtc.RtpTransceiver
@@ -37,20 +39,11 @@ internal class WebRtcController @Inject constructor(
37
39
private var peerConnection: PeerConnection ? = null
38
40
39
41
override fun connect (roomID : String , isHost : Boolean ) {
40
- val rtcConfig = PeerConnection .RTCConfiguration (iceServer).apply {
41
- sdpSemantics = PeerConnection .SdpSemantics .UNIFIED_PLAN
42
- enableRtpDataChannel = true
43
- }
44
-
45
- peerConnection = peerConnectionFactory.createPeerConnection(
46
- rtcConfig,
47
- createPeerConnectionObserver(isHost)
48
- )
42
+ peerConnection = peerConnectionFactory.createPeerConnection(isHost)
49
43
50
- peerConnection?.let (dataChannelManager::initialize )
44
+ peerConnection?.createDataChannel( )
51
45
52
- peerConnection?.addTrack(localResourceController.getVideoTrack())
53
- peerConnection?.addTrack(localResourceController.getAudioTrack())
46
+ peerConnection?.initializeLocalResource()
54
47
55
48
if (isHost) {
56
49
controllerEvent.tryEmit(WebRtcEvent .Host .SendOffer )
@@ -116,6 +109,30 @@ internal class WebRtcController @Inject constructor(
116
109
dataChannelManager.getEvent()
117
110
)
118
111
112
+ private fun PeerConnection.initializeLocalResource () {
113
+ addTrack(localResourceController.getVideoTrack())
114
+ addTrack(localResourceController.getAudioTrack())
115
+ }
116
+
117
+ private fun PeerConnectionFactory.createPeerConnection (
118
+ isHost : Boolean
119
+ ): PeerConnection ? {
120
+ val rtcConfig = createRtcConfig()
121
+ val peerConnectionObserver = createPeerConnectionObserver(isHost)
122
+
123
+ return createPeerConnection(
124
+ rtcConfig,
125
+ peerConnectionObserver
126
+ )
127
+ }
128
+
129
+ private fun PeerConnection.createDataChannel () = dataChannelManager.initialize(this )
130
+
131
+ private fun createRtcConfig () = RTCConfiguration (iceServer).apply {
132
+ sdpSemantics = PeerConnection .SdpSemantics .UNIFIED_PLAN
133
+ enableRtpDataChannel = true
134
+ }
135
+
119
136
private fun createSdpObserver (onSdpCreationSuccess : ((SessionDescription , SdpObserver ) -> Unit )? = null) =
120
137
object : SdpObserver {
121
138
override fun onCreateSuccess (p0 : SessionDescription ? ) {
@@ -129,8 +146,8 @@ internal class WebRtcController @Inject constructor(
129
146
130
147
private fun createPeerConnectionObserver (
131
148
isHost : Boolean
132
- ): PeerConnection . Observer =
133
- object : PeerConnection . Observer {
149
+ ): Observer =
150
+ object : Observer {
134
151
override fun onConnectionChange (newState : PeerConnection .PeerConnectionState ? ) {
135
152
controllerEvent.tryEmit(WebRtcEvent .StateChange .Connection (newState))
136
153
}
0 commit comments