index: quick hacky fixes for recent browsers

* fixup screen capture api changes
* require mouse click before screen capture
* better ICE logging
* vendor webrtc adapter
This commit is contained in:
Piotr Dobrowolski 2022-07-10 22:10:12 +02:00
parent 7e62a246b8
commit 31293e2141
2 changed files with 3498 additions and 19 deletions

3480
adapter-latest.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script> <script src="/adapter-latest.js"></script>
<script src="/socket.io/socket.io.js"></script> <script src="/socket.io/socket.io.js"></script>
<script> <script>
@ -27,10 +27,10 @@
if (data.id === id) if (data.id === id)
return; return;
console.info('Message:', data);
if (data.type === 'joined') { if (data.type === 'joined') {
var conn = await getPeerConnection(data.id, true); var conn = await getPeerConnection(data.id, true);
} else if (data.type === 'ice' && data.peer === id) { } else if (data.type === 'ice' && data.peer === id) {
console.info('Remote ICE candidate:', JSON.stringify(data.ice))
var conn = await getPeerConnection(data.id); var conn = await getPeerConnection(data.id);
conn.addIceCandidate(data.ice).catch(e => { conn.addIceCandidate(data.ice).catch(e => {
console.log("Failure during addIceCandidate(): " + e.name); console.log("Failure during addIceCandidate(): " + e.name);
@ -69,7 +69,21 @@
async function getMedia() { async function getMedia() {
if (hash[1] === 'screen' || hash[1] === 'window' || hash[1] === 'tab') { if (hash[1] === 'screen' || hash[1] === 'window' || hash[1] === 'tab') {
return navigator.getDisplayMedia({video: true}); return new Promise((resolve,reject) => {
document.addEventListener('click', resolve);
}).then(() => navigator.mediaDevices.getDisplayMedia({
video: {
width: 1920,
height: 1080,
frameRate: 30,
cursor: "always",
},
audio: {
echoCancellation: true,
noiseSuppression: true,
sampleRate: 44100
},
}));
} else { } else {
return navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}}); return navigator.mediaDevices.getUserMedia({video: {width: 1280, height: 720}});
} }
@ -81,15 +95,11 @@
console.info('Creating PeerConnection for', peer); console.info('Creating PeerConnection for', peer);
var conn = new RTCPeerConnection({ var conn = new RTCPeerConnection({
iceServers: [
{urls: 'stun:numb.viagenie.ca'},
{urls: 'turn:numb.viagenie.ca', username: 'informatic@hackerspace.pl', credential: 'dupa.8', "expiry": 86400}
]
}); });
peers[peer] = conn; peers[peer] = conn;
conn.onicecandidate = function (event) { conn.onicecandidate = function (event) {
console.info('ICE candidate:', event); console.info('Local ICE candidate:', JSON.stringify(event.candidate));
socket.emit('message', { socket.emit('message', {
id, room, peer, id, room, peer,
type: 'ice', ice: event.candidate type: 'ice', ice: event.candidate
@ -172,17 +182,6 @@
if (!receiver) { if (!receiver) {
var elem = document.documentElement; var elem = document.documentElement;
/* View in fullscreen */
if (elem.requestFullscreen) {
elem.requestFullscreen();
} else if (elem.mozRequestFullScreen) { /* Firefox */
elem.mozRequestFullScreen();
} else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
elem.webkitRequestFullscreen();
} else if (elem.msRequestFullscreen) { /* IE/Edge */
elem.msRequestFullscreen();
}
try { try {
var stream = await getMedia(); var stream = await getMedia();
var video = document.getElementById("vlocal"); var video = document.getElementById("vlocal");