Browse Source

webrtc: display publish-related errors in web page (#1836) (#2080)

pull/2075/head
Alessandro Ros 3 years ago committed by GitHub
parent
commit
048280f4e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      internal/core/webrtc_publish_index.html

42
internal/core/webrtc_publish_index.html

@ -88,6 +88,9 @@ select {
<div id="transmitting" style="display: none;"> <div id="transmitting" style="display: none;">
publishing publishing
</div> </div>
<div id="error" style="display: none;">
<span id="error-message"></span>
</div>
</div> </div>
<script> <script>
@ -95,23 +98,28 @@ select {
const INITIALIZING = 0; const INITIALIZING = 0;
const DEVICE = 1; const DEVICE = 1;
const TRANSMITTING = 2; const TRANSMITTING = 2;
const ERROR = 3;
let state = INITIALIZING; let state = INITIALIZING;
let errorMessage = '';
const setState = (newState) => { const render = () => {
state = newState; for (const el of ['initializing', 'device', 'transmitting', 'error']) {
document.getElementById(el).style.display = 'none';
}
switch (state) { switch (state) {
case DEVICE: case DEVICE:
document.getElementById("initializing").style.display = 'none'; document.getElementById('device').style.display = 'flex';
document.getElementById("device").style.display = 'flex';
document.getElementById("transmitting").style.display = 'none';
break; break;
case TRANSMITTING: case TRANSMITTING:
document.getElementById("initializing").style.display = 'none'; document.getElementById('transmitting').style.display = 'flex';
document.getElementById("device").style.display = 'none'; break;
document.getElementById("transmitting").style.display = 'flex';
case ERROR:
document.getElementById('error').style.display = 'flex';
document.getElementById('error-message').innerHTML = 'error: ' + errorMessage;
break; break;
} }
}; };
@ -444,7 +452,8 @@ class Transmitter {
} }
const onTransmit = (stream) => { const onTransmit = (stream) => {
setState(TRANSMITTING); state = TRANSMITTING;
render();
document.getElementById('video').srcObject = stream; document.getElementById('video').srcObject = stream;
new Transmitter(stream); new Transmitter(stream);
}; };
@ -563,13 +572,26 @@ const populateCodecs = () => {
}; };
const initialize = () => { const initialize = () => {
if (navigator.mediaDevices === undefined) {
state = ERROR;
errorMessage = 'can\'t access webcams or microphones. Make sure that WebRTC encryption is enabled.';
render();
return;
}
navigator.mediaDevices.getUserMedia({ video: true, audio: true }) navigator.mediaDevices.getUserMedia({ video: true, audio: true })
.then(() => Promise.all([ .then(() => Promise.all([
populateDevices(), populateDevices(),
populateCodecs(), populateCodecs(),
])) ]))
.then(() => { .then(() => {
setState(DEVICE); state = DEVICE;
render();
})
.catch((err) => {
state = ERROR;
errorMessage = err.toString();
render();
}); });
}; };

Loading…
Cancel
Save