diff --git a/README.md b/README.md index b8d1b69..7a106c9 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,14 @@ technology. - Screen sharing +- Group call with up to 4 peers - Picture in picture - Live captions - Text chat - Auto-scaling video quality - No download required, entirely browser based - Direct peer to peer connection ensures lowest latency +- No SFU servers, group calls use mesh networks - Single use disposable chat rooms ## Quick start diff --git a/public/js/chat.js b/public/js/chat.js index 1c2d2fc..af31460 100644 --- a/public/js/chat.js +++ b/public/js/chat.js @@ -195,7 +195,16 @@ var VideoChat = { logIt("connected"); break; case "disconnected": - logIt("disconnected"); + logIt("disconnected - UUID " + uuid); + VideoChat.remoteVideoWrapper.removeChild(document.querySelectorAll(`[uuid="${uuid}"]`)[0]); + VideoChat.connected.delete(uuid); + VideoChat.peerConnections.delete(uuid); + dataChannel.delete(uuid); + + if (VideoChat.peerConnections.size === 0) { + displayWaitingCaption(); + } + break; case "failed": logIt("failed"); // VideoChat.socket.connect @@ -332,6 +341,7 @@ var VideoChat = { node.setAttribute("autoplay", ""); node.setAttribute("playsinline", ""); node.setAttribute("id", "remote-video"); + node.setAttribute("uuid", uuid); VideoChat.remoteVideoWrapper.appendChild(node); // Update remote video source VideoChat.remoteVideoWrapper.lastChild.srcObject = event.stream; @@ -863,7 +873,7 @@ function toggleChat() { } // End Text chat -//Picture in picture +// Picture in picture function togglePictureInPicture() { if ( "pictureInPictureEnabled" in document || @@ -893,7 +903,15 @@ function togglePictureInPicture() { ); } } -//Picture in picture + +// Helper function for displaying waiting caption +function displayWaitingCaption() { + // Set caption text on start + captionText.text("Waiting for other user to join...").fadeIn(); + + // Reposition captions on start + rePositionCaptions(); +} function startUp() { // Try and detect in-app browsers and redirect @@ -987,11 +1005,7 @@ function startUp() { }, }); - // Set caption text on start - captionText.text("Waiting for other user to join...").fadeIn(); - - // Reposition captions on start - rePositionCaptions(); + displayWaitingCaption(); // On change media devices refresh page and switch to system default navigator.mediaDevices.ondevicechange = () => window.location.reload(); diff --git a/public/landing.html b/public/landing.html index 332dced..7e1b62d 100755 --- a/public/landing.html +++ b/public/landing.html @@ -67,9 +67,9 @@ class="mt-0 mb-32 reveal-from-bottom" data-reveal-delay="300" > - Simple, Secure, and Fast. Peer to peer video calling - provides quality and latency simply not available with - traditional technology. + Simple, Secure, and Fast. Peer to peer group video + calling provides quality and latency simply not + available with traditional technology.
- Each chat is single use, data stays between you and your - caller. Zipcall is built privacy first. + Zipcall lets you talk to up to four friends by + directly connecting to them, completely + decentralized.
- End to end state of the art encryption means your calls + Zipcall is built privacy first. Each chat is single use, + and end to end state of the art encryption means your calls are exactly that. Your calls.