mirror of
https://github.com/scottlamb/moonfire-nvr.git
synced 2025-02-13 22:58:11 -05:00
It's a start. It can display several streams at once, which is nice. There are lots of opportunities for improvement: * it doesn't keep the videos approximately in sync. * it accumulates extra buffering, drifting behind live. This is particularly noticeable when it's paused and played again; it can be several seconds before it jumps to after the break. * it always uses the sub stream rather main. I'd prefer it support "auto" (use main if the viewport is larger than the sub stream and there's sufficient bandwidth), "main", or "sub". * it has a kludgy heuristic where it throws away everything buffered 5 seconds before the current timestamp. It should throw away everything before the current GOP instead, but I need to alter the API so it can easily know when that is. * it can't tell you when a camera connection is down. This needs an API change also. * it'd be nice to quickly double-click on a stream to view only it, then double-click again to go back to the multi-pane view. * it doesn't allow you to zoom in on part of the video. This would be nice particularly when viewing 4k video streams on small screens. * it has only four preconfigured layouts that subdivide a 16x9 viewport. You have to choose every camera every time. It'd be nice to both allow more flexibility and have more memory. React prototype: #111 live stream: #59
25 lines
1.2 KiB
TypeScript
25 lines
1.2 KiB
TypeScript
// This file is part of Moonfire NVR, a security camera network video recorder.
|
|
// Copyright (C) 2021 The Moonfire NVR Authors; see AUTHORS and LICENSE.txt.
|
|
// SPDX-License-Identifier: GPL-v3.0-or-later WITH GPL-3.0-linking-exception
|
|
|
|
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
|
// allows you to do things like:
|
|
// expect(element).toHaveTextContent(/react/i)
|
|
// learn more: https://github.com/testing-library/jest-dom
|
|
import "@testing-library/jest-dom";
|
|
import { TextDecoder } from "util";
|
|
|
|
// LiveCamera/parser.ts uses TextDecoder, which works fine from the browser
|
|
// but isn't available from node.js without a little help.
|
|
// https://create-react-app.dev/docs/running-tests/#initializing-test-environment
|
|
// https://stackoverflow.com/questions/51090515/global-functions-in-typescript-for-jest-testing#comment89270564_51091150
|
|
declare let global: any;
|
|
|
|
// TODO: There's likely an elegant way to add TextDecoder to global's type.
|
|
// Some promising links:
|
|
// https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation
|
|
// https://stackoverflow.com/a/62011156/23584
|
|
// https://github.com/facebook/create-react-app/issues/6553#issuecomment-475491096
|
|
|
|
global.TextDecoder = TextDecoder;
|