From 48801216fe6ac4eaa14aa86a3f0129e17f131a6c Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Mon, 23 Feb 2026 13:58:48 +0300 Subject: [PATCH 01/10] Added "zmsState" and its processing (MonitorStream.js) --- web/js/MonitorStream.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/web/js/MonitorStream.js b/web/js/MonitorStream.js index 3a2fe3802..3b04dbc16 100644 --- a/web/js/MonitorStream.js +++ b/web/js/MonitorStream.js @@ -6,6 +6,7 @@ function MonitorStream(monitorData) { this.id = monitorData.id; this.name = monitorData.name; this.started = false; + this.zmsState = null; this.muted = (currentView == 'watch') ? !!getCookie('zmWatchMuted') : true; this.connKey = monitorData.connKey; this.genConnKey = function() { @@ -1538,6 +1539,13 @@ function MonitorStream(monitorData) { params.command = command; } this.streamCmdReq(params); + if (params.command == CMD_PAUSE) { + this.zmsState = 'paused'; + } else if (params.command == CMD_PLAY) { + this.zmsState = 'played'; + } else if (params.command == CMD_STOP || params.command == CMD_QUIT) { + this.zmsState = 'stoped'; + } }; this.alarmCommand = function(command) { From b6894f590edc0c7431fd42040adbd7af85d29ce5 Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Mon, 23 Feb 2026 14:13:35 +0300 Subject: [PATCH 02/10] =?UTF-8?q?Fix:=20If=20you=20click=20=E2=80=9Cpause?= =?UTF-8?q?=E2=80=9D,=20then=20hide=20the=20page=20and=20display=20it=20ag?= =?UTF-8?q?ain=20after=20at=20least=2015=20seconds,=20the=20stream=20will?= =?UTF-8?q?=20still=20be=20paused=20and=20not=20start=20(as=20it=20was=20b?= =?UTF-8?q?efore)=20(watch.js)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/skins/classic/views/js/watch.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 8981437c1..9efd66077 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1378,7 +1378,7 @@ function changePlayer() { // Kick everything off $j( window ).on("load", initPage); -var prevStateStarted = false; +var prevStateStarted = null; document.onvisibilitychange = () => { // Always clear it because the return to visibility might happen before timeout TimerHideShow = clearTimeout(TimerHideShow); @@ -1387,22 +1387,29 @@ document.onvisibilitychange = () => { //Stop monitor when closing or hiding page if (monitorStream) { if (monitorStream.started) { + if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused)) { + prevStateStarted = 'paused'; + } else { prevStateStarted = 'played'; //Stop only if playing or paused. // We might want to continue status updates so that alarm sounds etc still happen monitorStream.stop(); + } } else { - prevStateStarted = false; + prevStateStarted = 'stoped'; } } }, 15*1000); } else { //Start monitor when show page if (monitorStream && prevStateStarted == 'played' && !idleTimeoutTriggered) { - prevStateStarted = false; + prevStateStarted = null; onPlay(); //Set the correct state of the player buttons. monitorStream.start(monitorStream.currentChannelStream); monitorsSetScale(monitorId); + //} else if (prevStateStarted != 'paused') { + } else if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused)) { + prevStateStarted = null; } } }; From 2cb917c8112c57b9cd756bdf35799bc8be2c7f14 Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Mon, 23 Feb 2026 14:23:08 +0300 Subject: [PATCH 03/10] Update video-stream.js --- web/js/video-stream.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/web/js/video-stream.js b/web/js/video-stream.js index 9415caeb5..5b5252238 100644 --- a/web/js/video-stream.js +++ b/web/js/video-stream.js @@ -42,6 +42,7 @@ class VideoStream extends VideoRTC { */ oninit() { console.debug('stream.oninit'); + this.visibilityCheck = false; super.oninit(); } @@ -57,6 +58,15 @@ class VideoStream extends VideoRTC { super.ondisconnect(); } + connectedCallback() { + console.debug('stream.connectedCallback'); + if (!this.video) { + //Execute only at the very first moment, when the video has not yet been initialized + //Otherwise, when hiding the page with the player stopped and then displaying the page, the player will play!!! + super.connectedCallback(); + } + } + onopen() { console.debug('stream.onopen'); const result = super.onopen(); From 4512bb30d6db981fead4fd1d4f346c01842a0426 Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Mon, 23 Feb 2026 15:35:52 +0300 Subject: [PATCH 04/10] Fix; Eslint (watch.js) --- web/skins/classic/views/js/watch.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 9efd66077..cddce6740 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1390,10 +1390,10 @@ document.onvisibilitychange = () => { if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused)) { prevStateStarted = 'paused'; } else { - prevStateStarted = 'played'; - //Stop only if playing or paused. - // We might want to continue status updates so that alarm sounds etc still happen - monitorStream.stop(); + prevStateStarted = 'played'; + //Stop only if playing or paused. + // We might want to continue status updates so that alarm sounds etc still happen + monitorStream.stop(); } } else { prevStateStarted = 'stoped'; From cf73e7885f16f139a672e31eb65625a31fdd62c6 Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Mon, 23 Feb 2026 15:55:09 +0300 Subject: [PATCH 05/10] RTSP2Web support (watch.js) --- web/skins/classic/views/js/watch.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index cddce6740..982a5cb41 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1387,7 +1387,7 @@ document.onvisibilitychange = () => { //Stop monitor when closing or hiding page if (monitorStream) { if (monitorStream.started) { - if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused)) { + if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused) || monitorStream.element.paused) { prevStateStarted = 'paused'; } else { prevStateStarted = 'played'; @@ -1408,7 +1408,7 @@ document.onvisibilitychange = () => { monitorStream.start(monitorStream.currentChannelStream); monitorsSetScale(monitorId); //} else if (prevStateStarted != 'paused') { - } else if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused)) { + } else if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused) || monitorStream.element.paused) { prevStateStarted = null; } } From 389d44ae953dd91b05e8518610e7a2d81b99ae86 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 4 Mar 2026 20:49:59 -0500 Subject: [PATCH 06/10] Update web/skins/classic/views/js/watch.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- web/skins/classic/views/js/watch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 188981d6c..33ddc569d 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1408,7 +1408,7 @@ document.onvisibilitychange = () => { monitorStream.start(monitorStream.currentChannelStream); monitorsSetScale(monitorId); //} else if (prevStateStarted != 'paused') { - } else if ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused) || monitorStream.element.paused) { + } else if (monitorStream && monitorStream.element && ((monitorStream.zmsState == 'paused') || (monitorStream.element.video && monitorStream.element.video.paused) || monitorStream.element.paused)) { prevStateStarted = null; } } From fcbdc60d12297a6979c0541e3e946fd3b44f8a07 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 4 Mar 2026 20:50:21 -0500 Subject: [PATCH 07/10] Update web/skins/classic/views/js/watch.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- web/skins/classic/views/js/watch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 33ddc569d..191c27008 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1396,7 +1396,7 @@ document.onvisibilitychange = () => { monitorStream.stop(); } } else { - prevStateStarted = 'stoped'; + prevStateStarted = 'stopped'; } } }, 15*1000); From efe6bf341befa788a7c6771f3dfa617270b01639 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Wed, 4 Mar 2026 20:51:02 -0500 Subject: [PATCH 08/10] Update web/js/MonitorStream.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- web/js/MonitorStream.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/js/MonitorStream.js b/web/js/MonitorStream.js index 3b04dbc16..f4d677364 100644 --- a/web/js/MonitorStream.js +++ b/web/js/MonitorStream.js @@ -1544,7 +1544,7 @@ function MonitorStream(monitorData) { } else if (params.command == CMD_PLAY) { this.zmsState = 'played'; } else if (params.command == CMD_STOP || params.command == CMD_QUIT) { - this.zmsState = 'stoped'; + this.zmsState = 'stopped'; } }; From 8a24846f34904848c72b01f02702aa9ce2697c47 Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Thu, 5 Mar 2026 10:26:44 +0300 Subject: [PATCH 09/10] Update web/skins/classic/views/js/watch.js Recommended by Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- web/skins/classic/views/js/watch.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/skins/classic/views/js/watch.js b/web/skins/classic/views/js/watch.js index 191c27008..64953e020 100644 --- a/web/skins/classic/views/js/watch.js +++ b/web/skins/classic/views/js/watch.js @@ -1391,7 +1391,7 @@ document.onvisibilitychange = () => { prevStateStarted = 'paused'; } else { prevStateStarted = 'played'; - //Stop only if playing or paused. + //Stop only if playing (not paused). // We might want to continue status updates so that alarm sounds etc still happen monitorStream.stop(); } From 1f3b6413829736f2c549770dde22023f6ebb198d Mon Sep 17 00:00:00 2001 From: IgorA100 Date: Thu, 5 Mar 2026 15:55:00 +0300 Subject: [PATCH 10/10] No additional check for "this.video" is required; simply adding "this.visibilityCheck = false;" (video-stream.js) --- web/js/video-stream.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/web/js/video-stream.js b/web/js/video-stream.js index 5b5252238..391b5bd01 100644 --- a/web/js/video-stream.js +++ b/web/js/video-stream.js @@ -60,11 +60,7 @@ class VideoStream extends VideoRTC { connectedCallback() { console.debug('stream.connectedCallback'); - if (!this.video) { - //Execute only at the very first moment, when the video has not yet been initialized - //Otherwise, when hiding the page with the player stopped and then displaying the page, the player will play!!! - super.connectedCallback(); - } + super.connectedCallback(); } onopen() {