Skip to content

Instantly share code, notes, and snippets.

@ShwetaChauhan18
Created April 13, 2020 08:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ShwetaChauhan18/8314b865c9830682d16345c60b9bf35d to your computer and use it in GitHub Desktop.
Save ShwetaChauhan18/8314b865c9830682d16345c60b9bf35d to your computer and use it in GitHub Desktop.
private fun initializePeerConnections() {
localPeerConnection = createPeerConnection(factory, true)
remotePeerConnection = createPeerConnection(factory, false);
}
private fun createPeerConnection(factory: PeerConnectionFactory?, isLocal: Boolean): PeerConnection? {
val iceServers = ArrayList<PeerConnection.IceServer>()
iceServers.add(PeerConnection.IceServer.builder("stun:stun.l.google.com:19302").createIceServer())
val rtcConfig = RTCConfiguration(iceServers) //new ArrayList<>()
val pcObserver: PeerConnection.Observer = object : PeerConnection.Observer {
override fun onSignalingChange(signalingState: SignalingState) {
Log.d(TAG, "onSignalingChange: $signalingState")
}
override fun onIceConnectionChange(iceConnectionState: IceConnectionState) {
Log.d(TAG, "onIceConnectionChange: $iceConnectionState")
}
override fun onIceConnectionReceivingChange(b: Boolean) {
Log.d(TAG, "onIceConnectionReceivingChange: $b")
}
override fun onIceGatheringChange(iceGatheringState: IceGatheringState) {
Log.d(TAG, "onIceGatheringChange:$iceGatheringState")
}
override fun onIceCandidate(iceCandidate: IceCandidate) {
Log.d(TAG, "onIceCandidate: $iceCandidate")
if (isLocal) {
remotePeerConnection?.addIceCandidate(iceCandidate);
} else {
localPeerConnection?.addIceCandidate(iceCandidate)
}
}
override fun onIceCandidatesRemoved(iceCandidates: Array<IceCandidate>) {
Log.d(TAG, "onIceCandidatesRemoved: ")
}
override fun onAddStream(mediaStream: MediaStream) {
Log.d(TAG, "onAddStream: " + mediaStream.videoTracks.size)
gotRemoteStream(mediaStream)
}
override fun onRemoveStream(mediaStream: MediaStream) {
Log.d(TAG, "onRemoveStream: ")
}
override fun onDataChannel(dataChannel: DataChannel) {
Log.d(TAG, "onDataChannel: ")
Log.d(TAG, "onDataChannel: is local: " + isLocal + " , state: " + dataChannel.state())
}
override fun onRenegotiationNeeded() {
Log.d(TAG, "onRenegotiationNeeded: ")
}
override fun onAddTrack(rtpReceiver: RtpReceiver, mediaStreams: Array<MediaStream>) {}
}
return factory?.createPeerConnection(rtcConfig, pcObserver)
}
private fun gotRemoteStream(stream: MediaStream) {
//we have remote video stream. add to the renderer.
val videoTrack = stream.videoTracks[0]
runOnUiThread {
try {
binding?.remoteGlSurfaceView?.visibility = View.VISIBLE
videoTrack.addSink(binding?.remoteGlSurfaceView)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment