awslabs / amazon-kinesis-video-streams-webrtc-sdk-c

Amazon Kinesis Video Streams Webrtc SDK is for developers to install and customize realtime communication between devices and enable secure streaming of video, audio to Kinesis Video Streams.
https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-c/group__PublicMemberFunctions.html
Apache License 2.0
1.01k stars 304 forks source link

[QUESTION] Firefox only displays stream of one PeerConnection when multiple PeerConnections are opened within same tab #1050

Closed Mobe91 closed 3 years ago

Mobe91 commented 3 years ago

We have a web client that uses multiple KVS signaling channels to open one PeerConnection per channel to receive a remote video stream. The client works fine in e.g. Chrome showing 2 video streams simultaneously. However, the same client only shows 1 of the 2 streams when opened in Firefox - there are no related error messages in the browser console.

We use the amazon-kinesis-video-streams-webrtc-sdk-c in our backend to produce the video streams.

Logs

Our client code is very much aligned to https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-js/blob/master/examples/viewer.js. I have enriched the log messages with the client ids so that it is possible to differentiate between the 2 connections. Here are the respective browser logs from Firefox:

Tue Jan 19 2021 15:11:13 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] CommunicationPanel: Cameras: 
Array [ {…}, {…} ]
bugsnag.js:2040
WebRTC: Using more than two STUN/TURN servers slows down discovery dev-dsk-morbecke-2c-c52ecf60.us-west-2.amazon.com:5000:36
Tue Jan 19 2021 15:11:13 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Starting viewer connection bugsnag.js:2040
WebRTC: Using more than two STUN/TURN servers slows down discovery dev-dsk-morbecke-2c-c52ecf60.us-west-2.amazon.com:5000:36
Tue Jan 19 2021 15:11:13 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Starting viewer connection bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Connected to signaling service bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Creating SDP offer bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending SDP offer bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generating ICE candidates bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:14 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 1 UDP 2122252543 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 63678 typ host", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 1 TCP 2105524479 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 9 typ host tcptype active", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 2 UDP 2122252542 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 63679 typ host", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 2 TCP 2105524478 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 9 typ host tcptype active", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 1 UDP 2122252543 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 63680 typ host", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 1 TCP 2105524479 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 9 typ host tcptype active", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 2 UDP 2122252542 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 63681 typ host", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 2 TCP 2105524478 55091a40-90e8-4f6e-b8a4-9c9cdb027fef.local 9 typ host tcptype active", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Connected to signaling service bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Creating SDP offer bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending SDP offer bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generating ICE candidates bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 1 UDP 2122252543 22a85d49-e151-43c5-b926-895266d173c1.local 54040 typ host", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 1 TCP 2105524479 22a85d49-e151-43c5-b926-895266d173c1.local 9 typ host tcptype active", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 2 UDP 2122252542 22a85d49-e151-43c5-b926-895266d173c1.local 54041 typ host", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 2 TCP 2105524478 22a85d49-e151-43c5-b926-895266d173c1.local 9 typ host tcptype active", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 1 UDP 2122252543 22a85d49-e151-43c5-b926-895266d173c1.local 54042 typ host", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 1 TCP 2105524479 22a85d49-e151-43c5-b926-895266d173c1.local 9 typ host tcptype active", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:0 2 UDP 2122252542 22a85d49-e151-43c5-b926-895266d173c1.local 54043 typ host", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:3 2 TCP 2105524478 22a85d49-e151-43c5-b926-895266d173c1.local 9 typ host tcptype active", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 1 UDP 1686052863 205.251.233.182 28813 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 1 UDP 92217343 34.221.135.48 54644 typ relay raddr 34.221.135.48 rport 54644", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 2 UDP 1686052862 205.251.233.182 13789 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 2 UDP 92217342 34.221.135.48 60170 typ relay raddr 34.221.135.48 rport 60170", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
i18next::translator: missingKey en-US translation <empty string> --- bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 1 UDP 1686052863 205.251.233.182 25726 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 1 UDP 92217343 34.221.135.48 57180 typ relay raddr 34.221.135.48 rport 57180", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 2 UDP 1686052862 205.251.233.182 22542 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 2 UDP 92217342 34.221.135.48 58265 typ relay raddr 34.221.135.48 rport 58265", sdpMid: "1", sdpMLineIndex: 1, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 1 UDP 1686052863 205.251.233.182 2016 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 1 UDP 92217343 34.221.135.48 59840 typ relay raddr 34.221.135.48 rport 59840", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:1 2 UDP 1686052862 205.251.233.182 14375 typ srflx raddr 0.0.0.0 rport 0", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:2 2 UDP 92217342 34.221.135.48 63133 typ relay raddr 34.221.135.48 rport 63133", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received SDP answer 
Object { type: "answer", sdp: "v=0\r\no=- 1969642233 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS myKvsVideoStream\r\nm=audio 9 UDP/TLS/RTP/SAVPF 109\r\nc=IN IP4 127.0.0.1\r\na=candidate:3 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:2 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:1 1 udp 1694498815 172.27.0.2 38125 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=candidate:0 1 udp 2130706431 172.27.0.2 47044 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=msid:myKvsVideoStream myAudioTrack\r\na=ssrc:1030101736 cname:4qx+C5DO9fJphh0w\r\na=ssrc:1030101736 msid:myKvsVideoStream myAudioTrack\r\na=ssrc:1030101736 mslabel:myKvsVideoStream\r\na=ssrc:1030101736 label:myAudioTrack\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:vNAF\r\na=ice-pwd:C4Sxf1NDFQkIGcDlp6BlWKwc\r\na=ice-options:trickle\r\na=fingerprint:sha-256 BE:D3:62:82:0D:45:4A:DA:92:F8:63:59:8C:38:5B:73:EA:86:89:DA:12:B3:5D:16:3A:B4:79:C7:C4:49:D3:20\r\na=setup:active\r\na=mid:0\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:109 opus/48000/2\r\na=fmtp:109 maxplaybackrate=48000;stereo=1;useinbandfec=1\r\na=rtcp-fb:109 nack\r\nm=video 9 UDP/TLS/RTP/SAVPF 126\r\nc=IN IP4 127.0.0.1\r\na=candidate:3 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:2 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:1 1 udp 1694498815 172.27.0.2 38125 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=candidate:0 1 udp 2130706431 172.27.0.2 47044 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=msid:myKvsVideoStream myVideoTrack\r\na=ssrc:722630961 cname:4qx+C5DO9fJphh0w\r\na=ssrc:722630961 msid:myKvsVideoStream myVideoTrack\r\na=ssrc:722630961 mslabel:myKvsVideoStream\r\na=ssrc:722630961 label:myVideoTrack\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:vNAF\r\na=ice-pwd:C4Sxf1NDFQkIGcDlp6BlWKwc\r\na=ice-options:trickle\r\na=fingerprint:sha-256 BE:D3:62:82:0D:45:4A:DA:92:F8:63:59:8C:38:5B:73:EA:86:89:DA:12:B3:5D:16:3A:B4:79:C7:C4:49:D3:20\r\na=setup:active\r\na=mid:1\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:126 H264/90000\r\na=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1\r\na=rtcp-fb:126 nack\r\n" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received remote track of
          1 streams 
track { target: RTCPeerConnection, isTrusted: true, receiver: RTCRtpReceiver, track: MediaStreamTrack, streams: Restricted, transceiver: RTCRtpTransceiver, srcElement: RTCPeerConnection, currentTarget: RTCPeerConnection, eventPhase: 2, bubbles: false, … }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received remote track of
          1 streams 
track { target: RTCPeerConnection, isTrusted: true, receiver: RTCRtpReceiver, track: MediaStreamTrack, streams: Restricted, transceiver: RTCRtpTransceiver, srcElement: RTCPeerConnection, currentTarget: RTCPeerConnection, eventPhase: 2, bubbles: false, … }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Merged remote stream tracks: 
Array [ MediaStreamTrack, MediaStreamTrack ]
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received SDP answer 
Object { type: "answer", sdp: "v=0\r\no=- 1928558027 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS myKvsVideoStream\r\nm=audio 9 UDP/TLS/RTP/SAVPF 109\r\nc=IN IP4 127.0.0.1\r\na=candidate:3 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:2 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:1 1 udp 1694498815 172.27.0.2 59620 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=candidate:0 1 udp 2130706431 172.27.0.2 49467 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=msid:myKvsVideoStream myAudioTrack\r\na=ssrc:997774875 cname:sl1JooxCYlvbPepL\r\na=ssrc:997774875 msid:myKvsVideoStream myAudioTrack\r\na=ssrc:997774875 mslabel:myKvsVideoStream\r\na=ssrc:997774875 label:myAudioTrack\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:T3nd\r\na=ice-pwd:Pmqj2glExh56/BHp4WL229iV\r\na=ice-options:trickle\r\na=fingerprint:sha-256 02:C7:94:39:2F:E8:75:41:B4:5A:C3:52:41:2F:50:2E:DF:40:2A:8B:13:6A:CB:C2:64:1D:E0:FC:1E:56:73:1E\r\na=setup:active\r\na=mid:0\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:109 opus/48000/2\r\na=fmtp:109 maxplaybackrate=48000;stereo=1;useinbandfec=1\r\na=rtcp-fb:109 nack\r\nm=video 9 UDP/TLS/RTP/SAVPF 126\r\nc=IN IP4 127.0.0.1\r\na=candidate:3 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:2 1 udp 16777215 0000:0000:0000:0000:0000:0000:0000:0000 0 typ relay raddr ::/0 rport 0 generation 0 network-cost 999\r\na=candidate:1 1 udp 1694498815 172.27.0.2 59620 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=candidate:0 1 udp 2130706431 172.27.0.2 49467 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999\r\na=msid:myKvsVideoStream myVideoTrack\r\na=ssrc:8177335 cname:sl1JooxCYlvbPepL\r\na=ssrc:8177335 msid:myKvsVideoStream myVideoTrack\r\na=ssrc:8177335 mslabel:myKvsVideoStream\r\na=ssrc:8177335 label:myVideoTrack\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:T3nd\r\na=ice-pwd:Pmqj2glExh56/BHp4WL229iV\r\na=ice-options:trickle\r\na=fingerprint:sha-256 02:C7:94:39:2F:E8:75:41:B4:5A:C3:52:41:2F:50:2E:DF:40:2A:8B:13:6A:CB:C2:64:1D:E0:FC:1E:56:73:1E\r\na=setup:active\r\na=mid:1\r\na=sendonly\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:126 H264/90000\r\na=fmtp:126 profile-level-id=42e01f;level-asymmetry-allowed=1;packetization-mode=1\r\na=rtcp-fb:126 nack\r\n" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received ICE candidate 
Object { candidate: "candidate:1 1 udp 1694498815 24.80.101.237 38125 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received ICE candidate 
Object { candidate: "candidate:0 1 udp 2130706431 172.27.0.2 49467 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received ICE candidate 
Object { candidate: "candidate:0 1 udp 2130706431 172.27.0.2 47044 typ host raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received remote track of
          1 streams 
track { target: RTCPeerConnection, isTrusted: true, receiver: RTCRtpReceiver, track: MediaStreamTrack, streams: Restricted, transceiver: RTCRtpTransceiver, srcElement: RTCPeerConnection, currentTarget: RTCPeerConnection, eventPhase: 2, bubbles: false, … }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received remote track of
          1 streams 
track { target: RTCPeerConnection, isTrusted: true, receiver: RTCRtpReceiver, track: MediaStreamTrack, streams: Restricted, transceiver: RTCRtpTransceiver, srcElement: RTCPeerConnection, currentTarget: RTCPeerConnection, eventPhase: 2, bubbles: false, … }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Merged remote stream tracks: 
Array [ MediaStreamTrack, MediaStreamTrack ]
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received ICE candidate 
Object { candidate: "candidate:1 1 udp 1694498815 24.80.101.237 59620 typ srflx raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received ICE candidate 
Object { candidate: "candidate:2 1 udp 16777215 34.217.114.14 59287 typ relay raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received ICE candidate 
Object { candidate: "candidate:2 1 udp 16777215 34.217.114.14 50458 typ relay raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Received ICE candidate 
Object { candidate: "candidate:3 1 udp 16777215 34.217.114.14 52542 typ relay raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Received ICE candidate 
Object { candidate: "candidate:3 1 udp 16777215 34.217.114.14 65238 typ relay raddr 0.0.0.0 rport 0 generation 0 network-cost 999", sdpMid: "0", sdpMLineIndex: 0 }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:5 1 UDP 8331263 34.221.135.48 52266 typ relay raddr 34.221.135.48 rport 52266", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:4 2 UDP 8331262 34.221.135.48 54047 typ relay raddr 34.221.135.48 rport 54047", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:5 2 UDP 8331262 34.221.135.48 64554 typ relay raddr 34.221.135.48 rport 64554", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:4 1 UDP 8331263 34.221.135.48 52870 typ relay raddr 34.221.135.48 rport 52870", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] Sending ICE candidate 
RTCIceCandidate { candidate: "", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "ecfab36f" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [9603c06d-6fc0-424f-b4c8-ea98e7cf370f] All ICE candidates have been generated bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:4 1 UDP 8331263 34.221.135.48 50604 typ relay raddr 34.221.135.48 rport 50604", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:15 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:5 1 UDP 8331263 34.221.135.48 52805 typ relay raddr 34.221.135.48 rport 52805", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:4 2 UDP 8331262 34.221.135.48 54139 typ relay raddr 34.221.135.48 rport 54139", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "candidate:5 2 UDP 8331262 34.221.135.48 52498 typ relay raddr 34.221.135.48 rport 52498", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Generated ICE candidate bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] Sending ICE candidate 
RTCIceCandidate { candidate: "", sdpMid: "0", sdpMLineIndex: 0, usernameFragment: "111d2ae3" }
bugsnag.js:2040
Tue Jan 19 2021 15:11:16 GMT-0800 (Pacific Standard Time) (__GemDevUser__) [DEBUG] KVSWebRTCViewer: [697735a4-0ea4-4edb-a5d2-bdf5f33e0022] All ICE candidates have been generated bugsnag.js:2040

Versions

amazon-kinesis-video-streams-webrtc-sdk-c version: Tried with both v1.4.0 and latest master (4dc2cfd98285ad63a498a24d4b393d3909409ce5) Firefox version: 78.6.1esr (64-bit) Chrome version: 87.0.4280.141 (64-bit)

Potentially related issues

I have found the following possibly related issues:

Not sure if this should be a BUG rather than a QUESTION - feel free to change. Also not sure if this should rather go into amazon-kinesis-video-streams-webrtc-sdk-js.

MushMal commented 3 years ago

No idea. Try to use different client ids first

Mobe91 commented 3 years ago

I am using different client ids (freshly generated UUIDs) on every run for every signaling channel.

MushMal commented 3 years ago

Interesting. Doesn't seem like it's related to #817

Could you attach verbose logs from the master so we can see whether the exchange on the master side was successful.

Most importantly, please try the test application on Firefox. Please include the Firefox version as well.

Please use the latest commit for the testing.

Mobe91 commented 3 years ago

By test application you mean https://awslabs.github.io/amazon-kinesis-video-streams-webrtc-sdk-js/examples/index.html? I tried to create a master and a viewer both in different Firefox tabs. The transmission works but the test application uses only 1 remote video (and 1 local) so it's not directly comparable I think.

The Firefox version is included in my original question.

I have attached the verbose master logs as well as the matching logs form the Firefox browser console.

MushMal commented 3 years ago

Use the sample master application from this repository and open two bower tabs with different IDs with test js app

Mobe91 commented 3 years ago

So here is what I did - not sure if this is what you meant:

Both tabs correctly showed the test image emitted by kvsWebrtcClientMasterGstSample. However, this setup has little to do with my application because I am not using different tabs.

MushMal commented 3 years ago

Try debugging into it since now you have a working solution. I am setting to resolved as this has nothing to do with C WebRTC SDK

Mobe91 commented 3 years ago

I can clearly reproduce this issue with your example application so I ask you to reopen this. As I said, it only happens when you have multiple PeerConnection in the same browser tab. To reproduce this, I have slightly extended your example application to establish 2 viewer connections to the master instead of only 1. Find the git patch with my changes attached. Again, 2 viewer connections work fine in Chrome but only 1 can be established in Firefox.

What jumped into my eye was this warning in the master logs:

2021-01-21 01:43:25 WARN    dtlsSessionProcessPacket(): SSL_read failed with error:14102412:SSL routines:dtls1_read_bytes:sslv3 alert bad certificate

Could this be the issue? The Firefox bug I previously shared also mentions issues with DTLS in case of multiple PeerConnections.

MushMal commented 3 years ago

Looks like related. I would strongly suggest opening an issue against the Firefox in this case. I am not sure what the actionable items are in terms of opening an issue in C WebRTC SDK. Though, this might be a common scenario for some developers and they might share some insight into it. However, we would like to not keep issues in an "open" state which are not actionable.

Mobe91 commented 3 years ago

This comment on the Firefox issue mentions that it works for them when all connections use the same DTLS certificate. How is the behavior in this regard in amazon-kinesis-video-streams-webrtc-sdk-c? Is there a way to get the same behavior (i.e. use the same DTLS cert for all connections)?

MushMal commented 3 years ago

@Mobe91 perhaps that's the root cause - not sure.

Here is the documentation link for the pre-generated certificates: https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c#use-pre-generated-certificates

This is intended to be used for lowering the latency of the connection on some low-powered devices where the self-signed cert generation takes considerable amount of time. The use case there is that the device would pre-generate the certs off of the "hot path" and use them when it actually needs them.

NOTE: Using the same certificate for the two different connections has certain security implications.

Mobe91 commented 3 years ago

The problem is that you generate different DTLS certificates with the same CN and same Serial Number (SN).

From RFC 5280 and as mentioned in the Firefox bug report:

4.1.2.2. Serial Number

The serial number MUST be a positive integer assigned by the CA to each certificate. It MUST be unique for each certificate issued by a given CA (i.e., the issuer name and serial number identify a unique certificate). ...

Note: Non-conforming CAs may issue certificates with serial numbers that are negative or zero. Certificate users SHOULD be prepared to gracefully handle such certificates.

Reading this, I am actually surprised that it works in Chrome because you are using a constant CN with a constant SN of 1 for all your generated DTLS certificates. This violates the RFC that says the tuple (CN, SN) MUST be unique.

For SNs <= 0 the RFC suggests that such certificates SHOULD be handled gracefully. However, when testing with Firefox it did not make a difference if the SN is changed to be <= 0.

Working configurations according to my testing are:

  1. Use the same generated certificate for all PeerConnections
  2. Use different CNs for each generated certificate with constant SN
  3. Use different SNs for each generated certificate with constant CN

Since you suggested that using the same certificate for all PeerConnection has security implications I guess option 2 or 3 should be preferred. In my tests I just postfixed the CN with a timestamp but this may not be a perfect solution. It might be better to introduce a global atomic counter to count up the SN.

I am not a 100% fit in C so I am not sure if it's a good idea for me to raise a PR for this, though I have a working solution locally. Are you able to fix this issue?

MushMal commented 3 years ago

@Mobe91 Here is my understanding of the issue. The RFC refers to PKI infrastructure and indeed, a public authority issuing a certificates under it's CA should issue different serial numbers - hence the need for up-to 20 bytes of data space for SN.

However, the usage of self-signed certificates for the purpose of DTLS session establishment where the entire certificate fingerprint is evaluated is somewhat open for interpretation. In this case, the CA and SN are really irrelevant as the finterprint will include bits from public and private key that's just been generated and it has worked on Chrome previously.

In order to get this to work for FF, it seems that the best course of action is to simply increment the SN or use a random number.

Will need to do some investigation before pushing a PR>

Mobe91 commented 3 years ago

Ok - can you reopen this issue then?

MushMal commented 3 years ago

Merged. Closing