Priya (Callee)Signaling ServerNaomi (Caller)Web AppWeb BrowserWeb App1. Create an RTCPeerConnection 2. Call getUserMedia() to access the webcam and microphone 3. Promise fulfilled: add the local stream's tracks by calling RTCPeerConnection.ad dTrack()invite()Web Browser1. Create an SDP offer by calling RTCPeerConnection.cr eateOffer() 3. Promise fulfilled: set the description of Naomi's end of the call by calling RTCPeerConnection.se tLocalDescription() 4. Promise fulfilled: send the offer through the signaling server to Priya in a message of type “video-offer”handleNegotiationNeededEvent()Message: “video-offer”ICE layer starts sending candidates to Priya1. Create an RTCPeerConnection 2. Create an RTCSessionDescriptio n using the received SDP offer 3. Call RTCPeerConnection.se tRemoteDescription() to tell WebRTC about Naomi's configuration. 4. Call getUserMedia() to access the webcam and microphone 5. Promise fulfilled: add the local stream's tracks by calling RTCPeerConnection.ad dTrack() 6. Promise fulfilled: call RTCPeerConnection.cr eateAnswer() to create an SDP answer to send to Naomi 7. Promise fulfilled: configure Priya's end of the connection by match the generated answer by calling RTCPeerConnection.se tLocalDescription() 8. Promise fulfilled: send the SDP answer through the signaling server to Naomi in a message of type “video-answer”handleVideoOfferMsg()Message: “video-offer”Message: “video-answer”ICE layer starts sending candidates to Naomi1. Create an RTCSessionDescriptio n using the received SDP answer 2. Pass the session description to RTCPeerConnection.se tRemoteDescription() to configure Naomi's WebRTC layer to know how Priya's end of the connection is configuredhandleVideoAnswerMsg()Message: “video-answer ”Receive “video-offer” message and forward it to Priyaon.message()Receive “video-answer” message and forward it to Naomion.message()Event: negotiationneededReady to negotiate, so ask the caller to start doing so