working on reconnecting and the like
parent
5418ef2b37
commit
b762ce2401
|
|
@ -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 />
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,19 +113,34 @@ 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]);
|
if(event.candidate != null) {
|
||||||
|
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);
|
this.peer.addStream(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
gotIceCandidate(event) {
|
|
||||||
if(event.candidate != null) {
|
|
||||||
Server.server.send(JSON.stringify({'ice': event.candidate, 'uuid': Config.getUUID()}));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
offer(cb) {
|
offer(cb) {
|
||||||
this.peer
|
this.peer
|
||||||
.createOffer({
|
.createOffer({
|
||||||
|
|
@ -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() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue