mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-10-30 00:05:03 -04:00
improve live camera error handling
* don't error out on websocket error message. The close message has
more useful info. (Unfortunately though, for security reasons it
doesn't give too much to the script on initial connection failure.)
* restore normal (non-error/waiting) state when switching cameras.
* prefix all log messages with the camera name
This commit is contained in:
parent
f34937220d
commit
2fe961f382
@ -84,6 +84,7 @@ class LiveCameraDriver {
|
|||||||
const url = `${proto}://${loc.host}/api/cameras/${this.camera.uuid}/sub/live.m4s`;
|
const url = `${proto}://${loc.host}/api/cameras/${this.camera.uuid}/sub/live.m4s`;
|
||||||
this.ws = new WebSocket(url);
|
this.ws = new WebSocket(url);
|
||||||
this.ws.addEventListener("close", this.onWsClose);
|
this.ws.addEventListener("close", this.onWsClose);
|
||||||
|
this.ws.addEventListener("open", this.onWsOpen);
|
||||||
this.ws.addEventListener("error", this.onWsError);
|
this.ws.addEventListener("error", this.onWsError);
|
||||||
this.ws.addEventListener("message", this.onWsMessage);
|
this.ws.addEventListener("message", this.onWsMessage);
|
||||||
};
|
};
|
||||||
@ -99,8 +100,12 @@ class LiveCameraDriver {
|
|||||||
this.error(`ws close: ${e.code} ${e.reason}`);
|
this.error(`ws close: ${e.code} ${e.reason}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
onWsError = (_e: Event) => {
|
onWsOpen = (e: Event) => {
|
||||||
this.error("ws error");
|
console.debug(`${this.camera.shortName}: ws open`);
|
||||||
|
};
|
||||||
|
|
||||||
|
onWsError = (e: Event) => {
|
||||||
|
console.error(`${this.camera.shortName}: ws error`);
|
||||||
};
|
};
|
||||||
|
|
||||||
onWsMessage = async (e: MessageEvent) => {
|
onWsMessage = async (e: MessageEvent) => {
|
||||||
@ -112,7 +117,7 @@ class LiveCameraDriver {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.buf.state === "error") {
|
if (this.buf.state === "error") {
|
||||||
console.log("onWsMessage while in state error");
|
console.log(`${this.camera.shortName}: onWsMessage while in state error`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let result = parsePart(raw);
|
let result = parsePart(raw);
|
||||||
@ -155,7 +160,9 @@ class LiveCameraDriver {
|
|||||||
|
|
||||||
bufUpdateEnd = () => {
|
bufUpdateEnd = () => {
|
||||||
if (this.buf.state !== "open") {
|
if (this.buf.state !== "open") {
|
||||||
console.error("bufUpdateEnd in state", this.buf.state);
|
console.error(
|
||||||
|
`${this.camera.shortName}: bufUpdateEnd in state ${this.buf.state}`
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!this.buf.busy) {
|
if (!this.buf.busy) {
|
||||||
@ -252,6 +259,7 @@ class LiveCameraDriver {
|
|||||||
const NORMAL_CLOSURE = 1000; // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
const NORMAL_CLOSURE = 1000; // https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent
|
||||||
this.ws.close(NORMAL_CLOSURE);
|
this.ws.close(NORMAL_CLOSURE);
|
||||||
this.ws.removeEventListener("close", this.onWsClose);
|
this.ws.removeEventListener("close", this.onWsClose);
|
||||||
|
this.ws.removeEventListener("open", this.onWsOpen);
|
||||||
this.ws.removeEventListener("error", this.onWsError);
|
this.ws.removeEventListener("error", this.onWsError);
|
||||||
this.ws.removeEventListener("message", this.onWsMessage);
|
this.ws.removeEventListener("message", this.onWsMessage);
|
||||||
this.ws = undefined;
|
this.ws = undefined;
|
||||||
@ -291,6 +299,7 @@ const LiveCamera = ({ camera, chooser }: LiveCameraProps) => {
|
|||||||
// Load the camera driver.
|
// Load the camera driver.
|
||||||
const [driver, setDriver] = React.useState<LiveCameraDriver | null>(null);
|
const [driver, setDriver] = React.useState<LiveCameraDriver | null>(null);
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
|
setPlaybackState({ state: "normal" });
|
||||||
if (camera === null) {
|
if (camera === null) {
|
||||||
setDriver(null);
|
setDriver(null);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user