cameras: add autoconfiguration alert

This commit is contained in:
Koushik Dutta
2024-08-10 23:10:05 -07:00
parent 12273b7d1e
commit 3033cd9626
4 changed files with 28 additions and 10 deletions

View File

@@ -1,4 +1,4 @@
import { AudioStreamOptions, MediaStreamConfiguration, MediaStreamDestination, MediaStreamOptions, Setting } from "@scrypted/sdk";
import sdk, { AudioStreamOptions, MediaStreamConfiguration, MediaStreamDestination, MediaStreamOptions, ScryptedDeviceBase, Setting } from "@scrypted/sdk";
export const automaticallyConfigureSettings: Setting = {
key: 'autoconfigure',
@@ -24,6 +24,16 @@ function getBitrateForResolution(resolution: number) {
return MEGABIT / 4;
}
export async function checkPluginNeedsAutoConfigure(plugin: ScryptedDeviceBase, extraDevices = 0) {
if (plugin.storage.getItem('autoconfigure') === 'true')
return;
plugin.storage.setItem('autoconfigure', 'true');
if (sdk.deviceManager.getNativeIds().length <= 1 + extraDevices)
return;
plugin.log.a(`${plugin.name} now has support for automatic camera configuration for optimal performance. Cameras can be autoconfigured in their respective settings.`);
}
export async function autoconfigureCodecs(
getCodecs: () => Promise<MediaStreamOptions[]>,
configureCodecs: (options: MediaStreamOptions) => Promise<MediaStreamConfiguration>,

View File

@@ -1,7 +1,7 @@
import { automaticallyConfigureSettings } from "@scrypted/common/src/autoconfigure-codecs";
import { automaticallyConfigureSettings, checkPluginNeedsAutoConfigure } from "@scrypted/common/src/autoconfigure-codecs";
import { ffmpegLogInitialOutput } from '@scrypted/common/src/media-helpers';
import { readLength } from "@scrypted/common/src/read-stream";
import sdk, { Camera, DeviceCreatorSettings, DeviceInformation, FFmpegInput, Intercom, Lock, MediaObject, MediaStreamOptions, ObjectDetectionTypes, ObjectDetector, ObjectsDetected, Reboot, RequestPictureOptions, RequestRecordingStreamOptions, ResponseMediaStreamOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, Setting, VideoCameraConfiguration, VideoRecorder } from "@scrypted/sdk";
import sdk, { Camera, DeviceCreatorSettings, DeviceInformation, FFmpegInput, Intercom, Lock, MediaObject, MediaStreamOptions, ObjectDetectionTypes, ObjectDetector, ObjectsDetected, Reboot, RequestPictureOptions, RequestRecordingStreamOptions, ResponseMediaStreamOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, ScryptedNativeId, Setting, VideoCameraConfiguration, VideoRecorder } from "@scrypted/sdk";
import child_process, { ChildProcess } from 'child_process';
import { PassThrough, Readable, Stream } from "stream";
import { OnvifIntercom } from "../../onvif/src/onvif-intercom";
@@ -338,7 +338,7 @@ class AmcrestCamera extends RtspSmartCamera implements VideoCameraConfiguration,
};
ac.type = 'button';
ret.push(ac);
return ret;
}
@@ -607,6 +607,11 @@ class AmcrestCamera extends RtspSmartCamera implements VideoCameraConfiguration,
}
class AmcrestProvider extends RtspProvider {
constructor(nativeId?: ScryptedNativeId) {
super(nativeId);
checkPluginNeedsAutoConfigure(this);
}
getAdditionalInterfaces() {
return [
ScryptedInterface.Reboot,

View File

@@ -1,5 +1,5 @@
import { automaticallyConfigureSettings } from "@scrypted/common/src/autoconfigure-codecs";
import sdk, { Camera, DeviceCreatorSettings, DeviceInformation, FFmpegInput, Intercom, MediaObject, MediaStreamOptions, ObjectDetectionResult, ObjectDetectionTypes, ObjectDetector, ObjectsDetected, Reboot, RequestPictureOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, Setting, VideoCameraConfiguration } from "@scrypted/sdk";
import { automaticallyConfigureSettings, checkPluginNeedsAutoConfigure } from "@scrypted/common/src/autoconfigure-codecs";
import sdk, { Camera, DeviceCreatorSettings, DeviceInformation, FFmpegInput, Intercom, MediaObject, MediaStreamOptions, ObjectDetectionResult, ObjectDetectionTypes, ObjectDetector, ObjectsDetected, Reboot, RequestPictureOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, ScryptedNativeId, Setting, VideoCameraConfiguration } from "@scrypted/sdk";
import crypto from 'crypto';
import { PassThrough } from "stream";
import xml2js from 'xml2js';
@@ -610,8 +610,9 @@ export class HikvisionCamera extends RtspSmartCamera implements Camera, Intercom
class HikvisionProvider extends RtspProvider {
clients: Map<string, HikvisionCameraAPI>;
constructor() {
super();
constructor(nativeId?: ScryptedNativeId) {
super(nativeId);
checkPluginNeedsAutoConfigure(this);
}
getScryptedDeviceCreator(): string {

View File

@@ -9,7 +9,7 @@ import { autoconfigureSettings, configureCodecs, getCodecs } from "./onvif-confi
import { listenEvents } from "./onvif-events";
import { OnvifIntercom } from "./onvif-intercom";
import { OnvifPTZMixinProvider } from "./onvif-ptz";
import { automaticallyConfigureSettings } from "@scrypted/common/src/autoconfigure-codecs";
import { automaticallyConfigureSettings, checkPluginNeedsAutoConfigure } from "@scrypted/common/src/autoconfigure-codecs";
const { mediaManager, systemManager, deviceManager } = sdk;
@@ -298,8 +298,10 @@ class OnvifProvider extends RtspProvider implements DeviceDiscovery {
timeout: NodeJS.Timeout;
}>();
constructor(nativeId?: string) {
constructor(nativeId?: ScryptedNativeId) {
super(nativeId);
checkPluginNeedsAutoConfigure(this, 1);
process.nextTick(() => {
deviceManager.onDeviceDiscovered({