mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2025-12-23 22:37:53 -05:00
95 lines
2.6 KiB
JavaScript
95 lines
2.6 KiB
JavaScript
import {VideoRTC} from './video-rtc.js';
|
|
|
|
/**
|
|
* This is example, how you can extend VideoRTC player for your app.
|
|
* Also you can check this example: https://github.com/AlexxIT/WebRTC
|
|
*/
|
|
class VideoStream extends VideoRTC {
|
|
set divMode(value) {
|
|
const modeEl = this.closest('[id ^= "monitor"]').querySelector('.stream-info-mode');
|
|
const statusEl = this.closest('[id ^= "monitor"]').querySelector('.stream-info-status');
|
|
if (modeEl) modeEl.innerText = 'Go2RTC ' + value;
|
|
if (statusEl) statusEl.innerText = '';
|
|
this.setAttribute('current-mode', value.toUpperCase());
|
|
this.currentMode = value.toUpperCase();
|
|
}
|
|
|
|
set divError(value) {
|
|
const modeEl = this.closest('[id ^= "monitor"]').querySelector('.stream-info-mode');
|
|
const statusEl = this.closest('[id ^= "monitor"]').querySelector('.stream-info-status');
|
|
if (modeEl) {
|
|
const state = modeEl.innerText;
|
|
if (state !== 'Go2RTC loading') return;
|
|
modeEl.innerText = 'Go2RTC ' + 'error';
|
|
}
|
|
if (statusEl) statusEl.innerText = 'Go2RTC ' + value;
|
|
this.setAttribute('current-mode', 'ERROR');
|
|
this.currentMode = 'ERROR';
|
|
}
|
|
|
|
/**
|
|
* Custom GUI
|
|
*/
|
|
oninit() {
|
|
console.debug('stream.oninit');
|
|
super.oninit();
|
|
}
|
|
|
|
onconnect() {
|
|
console.debug('stream.onconnect');
|
|
const result = super.onconnect();
|
|
if (result) this.divMode = 'loading';
|
|
return result;
|
|
}
|
|
|
|
ondisconnect() {
|
|
console.debug('stream.ondisconnect');
|
|
super.ondisconnect();
|
|
}
|
|
|
|
onopen() {
|
|
console.debug('stream.onopen');
|
|
const result = super.onopen();
|
|
|
|
this.onmessage['stream'] = msg => {
|
|
console.debug('stream.onmessge', msg);
|
|
switch (msg.type) {
|
|
case 'error':
|
|
this.divError = msg.value;
|
|
break;
|
|
case 'mse':
|
|
case 'hls':
|
|
case 'mp4':
|
|
case 'mjpeg':
|
|
this.divMode = msg.type.toUpperCase();
|
|
break;
|
|
}
|
|
};
|
|
|
|
return result;
|
|
}
|
|
|
|
onclose() {
|
|
console.debug('stream.onclose');
|
|
return super.onclose();
|
|
}
|
|
|
|
onpcvideo(ev) {
|
|
console.debug('stream.onpcvideo');
|
|
super.onpcvideo(ev);
|
|
|
|
if (this.pcState !== WebSocket.CLOSED) {
|
|
this.divMode = 'RTC';
|
|
}
|
|
}
|
|
|
|
pause() {
|
|
this.video.pause();
|
|
}
|
|
close() {
|
|
this.video.pause();
|
|
}
|
|
}
|
|
|
|
customElements.define('video-stream', VideoStream);
|