working on reconnecting and the like

master
Bel LaPointe 2020-05-13 15:15:36 -06:00
parent 5418ef2b37
commit b762ce2401
2 changed files with 37 additions and 10 deletions

View File

@ -27,7 +27,8 @@
<div>Audio<label class="switch"><input onclick="toggle('audio', this)" type="checkbox"><span class="slider round"></span></label></div> <div>Audio<label class="switch"><input onclick="toggle('audio', this)" type="checkbox"><span class="slider round"></span></label></div>
<video id="preview" autoplay muted ></video> <video id="preview" autoplay muted ></video>
<video id="remoteVideo" autoplay ></video> <div id="remote">
</div>
<br /> <br />

View File

@ -81,8 +81,12 @@ class Remote {
element = null; element = null;
constructor(id, stream) { constructor(id, stream) {
document.getElementById("remote").innerHTML += `
<video id="${id}" autoplay ></video>
`;
this.element = document.getElementById(id); this.element = document.getElementById(id);
this.element.srcObject = stream; this.element.srcObject = stream;
View.log(this.element);
} }
} }
@ -93,6 +97,10 @@ class Preview {
this.element = document.getElementById(id); this.element = document.getElementById(id);
this.element.srcObject = stream; this.element.srcObject = stream;
} }
destructor() {
this.element.remove();
}
} }
class Server { class Server {
@ -105,17 +113,32 @@ class Server {
} }
class Peer { class Peer {
peer = null;
streams = {};
constructor(stream) { constructor(stream) {
this.peer = new RTCPeerConnection(Config.iceConfig); this.peer = new RTCPeerConnection(Config.iceConfig);
this.peer.onicecandidate = this.gotIceCandidate; this.peer.onicecandidate = (event) => {
this.peer.ontrack = (event) => new Remote('remoteVideo', event.streams[0]);
this.peer.addStream(stream);
}
gotIceCandidate(event) {
if(event.candidate != null) { if(event.candidate != null) {
Server.server.send(JSON.stringify({'ice': event.candidate, 'uuid': Config.getUUID()})); Server.server.send(JSON.stringify({'ice': event.candidate, 'uuid': Config.getUUID()}));
} }
};
this.peer.ontrack = (event) => {
event.streams.forEach((stream) => {
this.streams[stream.id] = new Remote(stream.id, stream);
});
View.log("/ontrack:", this.streams);
};
this.peer.onremovestream = (event) => {
event.streams.forEach((stream) => {
this.streams[stream.id].destructor();
delete this.streams[stream.id];
});
View.log("/onremovestream:", this.streams);
};
this.peer.onconnectionstatechange = (event) => {
View.log("/onconnectionstatechange:", this.streams, this.peer.connectionState);
};
this.peer.addStream(stream);
} }
offer(cb) { offer(cb) {
@ -127,8 +150,11 @@ class Peer {
.then(cb) .then(cb)
.catch(View.error); .catch(View.error);
} }
destructor() {
this.peer.close();
}
} }
Peer.peer = null;
class Entropy { class Entropy {
static pageReady() { static pageReady() {