camstreamerlib 4.0.0-beta.4 → 4.0.0-beta.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -0
- package/cjs/CamOverlayAPI.js +135 -92
- package/cjs/CamScripterAPI.js +52 -42
- package/cjs/CamStreamerAPI.js +83 -39
- package/cjs/CamSwitcherAPI.js +141 -123
- package/cjs/CamSwitcherEvents.js +4 -60
- package/cjs/PlaneTrackerAPI.js +210 -0
- package/cjs/VapixAPI.js +323 -233
- package/cjs/{CreatePackage.js → bin/CreatePackage.js} +22 -19
- package/cjs/errors/errors.js +78 -1
- package/cjs/index.js +17 -4
- package/cjs/internal/ProxyClient.js +28 -32
- package/cjs/internal/WsEvents.js +72 -0
- package/cjs/internal/types.js +2 -0
- package/cjs/internal/utils.js +22 -3
- package/cjs/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +7 -4
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/cjs/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +5 -17
- package/cjs/node/CamOverlayPainter/ResourceManager.js +72 -0
- package/cjs/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +7 -4
- package/cjs/node/DefaultClient.js +10 -12
- package/cjs/{internal → node}/Digest.js +8 -5
- package/cjs/node/HttpRequestSender.js +14 -4
- package/cjs/node/HttpServer.js +15 -12
- package/cjs/{VapixEvents.js → node/VapixEvents.js} +1 -1
- package/cjs/node/WsClient.js +12 -9
- package/cjs/node/events/AxisCameraStationEvents.js +53 -0
- package/cjs/node/events/GenetecAgent.js +123 -0
- package/cjs/node/index.js +38 -5
- package/cjs/types/CamOverlayAPI/CamOverlayAPI.js +92 -0
- package/cjs/types/CamOverlayAPI/accuweatherSchema.js +47 -0
- package/cjs/types/CamOverlayAPI/customGraphicsSchema.js +72 -0
- package/cjs/types/CamOverlayAPI/imagesSchema.js +9 -0
- package/cjs/types/CamOverlayAPI/index.js +27 -0
- package/cjs/types/CamOverlayAPI/infotickerSchema.js +26 -0
- package/cjs/types/CamOverlayAPI/pipSchema.js +39 -0
- package/cjs/types/CamOverlayAPI/ptzCompassSchema.js +25 -0
- package/cjs/types/CamOverlayAPI/ptzSchema.js +12 -0
- package/cjs/types/CamOverlayAPI/scoreBoardSchema.js +132 -0
- package/cjs/types/CamOverlayAPI/screenSharingSchema.js +8 -0
- package/cjs/types/CamOverlayAPI/serviceCommonTypes.js +91 -0
- package/cjs/types/CamOverlayAPI/webCameraSharingSchema.js +8 -0
- package/cjs/types/CamOverlayDrawingAPI.js +2 -0
- package/cjs/types/CamOverlayPainter.js +14 -0
- package/cjs/types/CamScripterAPI.js +22 -7
- package/cjs/types/CamScripterAPICameraEventsGenerator.js +2 -0
- package/cjs/types/CamStreamerAPI.js +34 -3
- package/cjs/types/CamSwitcherAPI.js +38 -1
- package/cjs/types/CamSwitcherEvents.js +8 -0
- package/cjs/types/GenetecAgent.js +31 -0
- package/cjs/types/PlaneTrackerAPI.js +286 -0
- package/cjs/types/VapixAPI.js +71 -13
- package/cjs/types/VapixEvents.js +2 -0
- package/cjs/web/DefaultClient.js +22 -10
- package/cjs/web/WsClient.js +3 -3
- package/esm/CamOverlayAPI.js +131 -88
- package/esm/CamScripterAPI.js +48 -38
- package/esm/CamStreamerAPI.js +81 -38
- package/esm/CamSwitcherAPI.js +137 -119
- package/esm/CamSwitcherEvents.js +5 -61
- package/esm/PlaneTrackerAPI.js +206 -0
- package/esm/VapixAPI.js +315 -225
- package/esm/{CreatePackage.js → bin/CreatePackage.js} +3 -3
- package/esm/errors/errors.js +66 -0
- package/esm/index.js +12 -3
- package/esm/internal/ProxyClient.js +28 -32
- package/esm/internal/WsEvents.js +68 -0
- package/esm/internal/utils.js +17 -1
- package/esm/{CamOverlayDrawingAPI.js → node/CamOverlayDrawingAPI.js} +2 -2
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Frame.js +33 -0
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/Painter.js +2 -13
- package/esm/{CamOverlayPainter → node/CamOverlayPainter}/ResourceManager.js +7 -5
- package/esm/{CamScripterAPICameraEventsGenerator.js → node/CamScripterAPICameraEventsGenerator.js} +2 -2
- package/esm/node/DefaultClient.js +10 -12
- package/esm/{internal → node}/Digest.js +1 -1
- package/esm/node/HttpRequestSender.js +14 -4
- package/esm/node/HttpServer.js +5 -5
- package/esm/{VapixEvents.js → node/VapixEvents.js} +1 -1
- package/esm/node/WsClient.js +3 -3
- package/esm/{events → node/events}/AxisCameraStationEvents.js +18 -13
- package/esm/node/events/GenetecAgent.js +119 -0
- package/esm/node/index.js +17 -2
- package/esm/types/CamOverlayAPI/CamOverlayAPI.js +76 -0
- package/esm/types/CamOverlayAPI/accuweatherSchema.js +44 -0
- package/esm/types/CamOverlayAPI/customGraphicsSchema.js +69 -0
- package/esm/types/CamOverlayAPI/imagesSchema.js +6 -0
- package/esm/types/CamOverlayAPI/index.js +11 -0
- package/esm/types/CamOverlayAPI/infotickerSchema.js +23 -0
- package/esm/types/CamOverlayAPI/pipSchema.js +36 -0
- package/esm/types/CamOverlayAPI/ptzCompassSchema.js +22 -0
- package/esm/types/CamOverlayAPI/ptzSchema.js +9 -0
- package/esm/types/CamOverlayAPI/scoreBoardSchema.js +129 -0
- package/esm/types/CamOverlayAPI/screenSharingSchema.js +5 -0
- package/esm/types/CamOverlayAPI/serviceCommonTypes.js +88 -0
- package/esm/types/CamOverlayAPI/webCameraSharingSchema.js +5 -0
- package/esm/types/CamOverlayPainter.js +11 -0
- package/esm/types/CamScripterAPI.js +21 -6
- package/esm/types/CamScripterAPICameraEventsGenerator.js +1 -0
- package/esm/types/CamStreamerAPI.js +33 -2
- package/esm/types/CamSwitcherAPI.js +38 -1
- package/esm/types/CamSwitcherEvents.js +8 -0
- package/esm/types/GenetecAgent.js +28 -0
- package/esm/types/PlaneTrackerAPI.js +283 -0
- package/esm/types/VapixAPI.js +70 -12
- package/esm/types/VapixEvents.js +1 -0
- package/esm/web/DefaultClient.js +22 -10
- package/esm/web/WsClient.js +3 -3
- package/package.json +30 -12
- package/types/CamOverlayAPI.d.ts +865 -0
- package/types/CamScripterAPI.d.ts +47 -0
- package/types/CamStreamerAPI.d.ts +64 -0
- package/types/CamSwitcherAPI.d.ts +167 -0
- package/types/CamSwitcherEvents.d.ts +8 -0
- package/types/PlaneTrackerAPI.d.ts +230 -0
- package/types/VapixAPI.d.ts +118 -0
- package/types/bin/CreatePackage.d.ts +1 -0
- package/types/errors/errors.d.ts +68 -0
- package/types/index.d.ts +20 -0
- package/types/internal/ProxyClient.d.ts +10 -0
- package/types/internal/WsEvents.d.ts +41 -0
- package/types/internal/types.d.ts +45 -0
- package/{cjs → types}/internal/utils.d.ts +4 -1
- package/{cjs → types}/internal/versionCompare.d.ts +2 -2
- package/types/node/CamOverlayDrawingAPI.d.ts +41 -0
- package/{esm → types/node}/CamOverlayPainter/Frame.d.ts +8 -37
- package/{cjs → types/node}/CamOverlayPainter/Painter.d.ts +5 -21
- package/types/node/CamOverlayPainter/ResourceManager.d.ts +15 -0
- package/types/node/CamScripterAPICameraEventsGenerator.d.ts +31 -0
- package/types/node/DefaultClient.d.ts +16 -0
- package/{esm → types}/node/HttpRequestSender.d.ts +1 -0
- package/{cjs → types}/node/HttpServer.d.ts +2 -2
- package/types/node/VapixEvents.d.ts +16 -0
- package/{cjs → types}/node/WsClient.d.ts +3 -2
- package/types/node/events/AxisCameraStationEvents.d.ts +12 -0
- package/types/node/events/GenetecAgent.d.ts +16 -0
- package/types/node/index.d.ts +17 -0
- package/types/types/CamOverlayAPI/CamOverlayAPI.d.ts +4321 -0
- package/types/types/CamOverlayAPI/accuweatherSchema.d.ts +84 -0
- package/types/types/CamOverlayAPI/customGraphicsSchema.d.ts +700 -0
- package/types/types/CamOverlayAPI/imagesSchema.d.ts +95 -0
- package/types/types/CamOverlayAPI/index.d.ts +11 -0
- package/types/types/CamOverlayAPI/infotickerSchema.d.ts +96 -0
- package/types/types/CamOverlayAPI/pipSchema.d.ts +125 -0
- package/types/types/CamOverlayAPI/ptzCompassSchema.d.ts +93 -0
- package/types/types/CamOverlayAPI/ptzSchema.d.ts +118 -0
- package/types/types/CamOverlayAPI/scoreBoardSchema.d.ts +357 -0
- package/types/types/CamOverlayAPI/screenSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayAPI/serviceCommonTypes.d.ts +145 -0
- package/types/types/CamOverlayAPI/webCameraSharingSchema.d.ts +58 -0
- package/types/types/CamOverlayDrawingAPI.d.ts +48 -0
- package/types/types/CamOverlayPainter.d.ts +76 -0
- package/types/types/CamScripterAPI.d.ts +130 -0
- package/types/types/CamScripterAPICameraEventsGenerator.d.ts +45 -0
- package/types/types/CamStreamerAPI.d.ts +272 -0
- package/{esm → types}/types/CamSwitcherAPI.d.ts +115 -36
- package/{cjs → types}/types/CamSwitcherEvents.d.ts +77 -0
- package/{esm/events → types/types}/GenetecAgent.d.ts +47 -47
- package/types/types/PlaneTrackerAPI.d.ts +890 -0
- package/{cjs → types}/types/VapixAPI.d.ts +647 -465
- package/types/types/VapixEvents.d.ts +15 -0
- package/{esm → types}/types/common.d.ts +15 -5
- package/types/web/DefaultClient.d.ts +6 -0
- package/cjs/CamOverlayAPI.d.ts +0 -31
- package/cjs/CamOverlayDrawingAPI.d.ts +0 -86
- package/cjs/CamOverlayPainter/Frame.d.ts +0 -96
- package/cjs/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/cjs/CamOverlayPainter/ResourceManager.js +0 -46
- package/cjs/CamScripterAPI.d.ts +0 -19
- package/cjs/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/cjs/CamStreamerAPI.d.ts +0 -16
- package/cjs/CamSwitcherAPI.d.ts +0 -48
- package/cjs/CamSwitcherEvents.d.ts +0 -18
- package/cjs/VapixAPI.d.ts +0 -66
- package/cjs/VapixEvents.d.ts +0 -43
- package/cjs/errors/errors.d.ts +0 -34
- package/cjs/events/AxisCameraStationEvents.d.ts +0 -9
- package/cjs/events/AxisCameraStationEvents.js +0 -48
- package/cjs/events/GenetecAgent.d.ts +0 -174
- package/cjs/events/GenetecAgent.js +0 -123
- package/cjs/index.d.ts +0 -11
- package/cjs/internal/ProxyClient.d.ts +0 -11
- package/cjs/internal/common.d.ts +0 -39
- package/cjs/internal/common.js +0 -27
- package/cjs/node/DefaultClient.d.ts +0 -15
- package/cjs/node/HttpRequestSender.d.ts +0 -28
- package/cjs/node/WsEventClient.d.ts +0 -13
- package/cjs/node/WsEventClient.js +0 -22
- package/cjs/types/CamOverlayAPI.d.ts +0 -188
- package/cjs/types/CamOverlayAPI.js +0 -47
- package/cjs/types/CamScripterAPI.d.ts +0 -67
- package/cjs/types/CamStreamerAPI.d.ts +0 -139
- package/cjs/types/CamSwitcherAPI.d.ts +0 -814
- package/cjs/types/common.d.ts +0 -37
- package/cjs/web/DefaultClient.d.ts +0 -6
- package/cjs/web/index.d.ts +0 -2
- package/esm/CamOverlayAPI.d.ts +0 -31
- package/esm/CamOverlayDrawingAPI.d.ts +0 -86
- package/esm/CamOverlayPainter/Painter.d.ts +0 -48
- package/esm/CamOverlayPainter/ResourceManager.d.ts +0 -14
- package/esm/CamScripterAPI.d.ts +0 -19
- package/esm/CamScripterAPICameraEventsGenerator.d.ts +0 -74
- package/esm/CamStreamerAPI.d.ts +0 -16
- package/esm/CamSwitcherAPI.d.ts +0 -48
- package/esm/CamSwitcherEvents.d.ts +0 -18
- package/esm/VapixAPI.d.ts +0 -66
- package/esm/VapixEvents.d.ts +0 -43
- package/esm/errors/errors.d.ts +0 -34
- package/esm/events/AxisCameraStationEvents.d.ts +0 -9
- package/esm/events/GenetecAgent.js +0 -119
- package/esm/index.d.ts +0 -11
- package/esm/internal/Digest.d.ts +0 -4
- package/esm/internal/ProxyClient.d.ts +0 -11
- package/esm/internal/common.d.ts +0 -39
- package/esm/internal/common.js +0 -20
- package/esm/internal/constants.d.ts +0 -1
- package/esm/internal/transformers.d.ts +0 -5
- package/esm/internal/utils.d.ts +0 -11
- package/esm/internal/versionCompare.d.ts +0 -6
- package/esm/node/DefaultClient.d.ts +0 -15
- package/esm/node/HttpServer.d.ts +0 -21
- package/esm/node/WsClient.d.ts +0 -39
- package/esm/node/WsEventClient.d.ts +0 -13
- package/esm/node/WsEventClient.js +0 -18
- package/esm/node/index.d.ts +0 -2
- package/esm/types/CamOverlayAPI.d.ts +0 -188
- package/esm/types/CamOverlayAPI.js +0 -44
- package/esm/types/CamScripterAPI.d.ts +0 -67
- package/esm/types/CamStreamerAPI.d.ts +0 -139
- package/esm/types/CamSwitcherEvents.d.ts +0 -491
- package/esm/types/VapixAPI.d.ts +0 -1683
- package/esm/web/DefaultClient.d.ts +0 -6
- package/esm/web/WsClient.d.ts +0 -13
- package/esm/web/index.d.ts +0 -2
- /package/{cjs/CreatePackage.d.ts → esm/internal/types.js} +0 -0
- /package/esm/{CreatePackage.d.ts → types/CamOverlayDrawingAPI.js} +0 -0
- /package/{cjs → types}/internal/constants.d.ts +0 -0
- /package/{cjs → types}/internal/transformers.d.ts +0 -0
- /package/{cjs/internal → types/node}/Digest.d.ts +0 -0
- /package/{cjs → types}/web/WsClient.d.ts +0 -0
- /package/{cjs/node → types/web}/index.d.ts +0 -0
package/cjs/CamStreamerAPI.js
CHANGED
|
@@ -1,65 +1,109 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CamStreamerAPI = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
3
|
+
exports.parseCameraStreamResponse = exports.CamStreamerAPI = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const ProxyClient_1 = require("./internal/ProxyClient");
|
|
6
|
+
const utils_1 = require("./internal/utils");
|
|
6
7
|
const CamStreamerAPI_1 = require("./types/CamStreamerAPI");
|
|
8
|
+
const errors_1 = require("./errors/errors");
|
|
9
|
+
const BASE_PATH = '/local/camstreamer';
|
|
7
10
|
class CamStreamerAPI {
|
|
8
11
|
client;
|
|
9
|
-
constructor(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
constructor(client) {
|
|
13
|
+
this.client = client;
|
|
14
|
+
}
|
|
15
|
+
getClient(proxyParams) {
|
|
16
|
+
return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
|
|
17
|
+
}
|
|
18
|
+
async wsAuthorization(options) {
|
|
19
|
+
const res = await this._getJson(`${BASE_PATH}/ws_authorization.cgi`, undefined, options);
|
|
20
|
+
if (res.status !== 200) {
|
|
21
|
+
throw new errors_1.WsAuthorizationError(res.message);
|
|
12
22
|
}
|
|
13
|
-
|
|
14
|
-
|
|
23
|
+
return zod_1.z.string().parse(res.data);
|
|
24
|
+
}
|
|
25
|
+
async getUtcTime(options) {
|
|
26
|
+
const res = await this._getJson(`${BASE_PATH}/get_utc_time.cgi`, undefined, options);
|
|
27
|
+
if (res.status !== 200) {
|
|
28
|
+
throw new errors_1.UtcTimeFetchError(res.message);
|
|
15
29
|
}
|
|
30
|
+
return zod_1.z.number().parse(res.data);
|
|
16
31
|
}
|
|
17
|
-
async getStreamList() {
|
|
18
|
-
const
|
|
19
|
-
|
|
32
|
+
async getStreamList(options) {
|
|
33
|
+
const res = await this._getJson(`${BASE_PATH}/stream/list.cgi`, undefined, options);
|
|
34
|
+
const list = zod_1.z.record(zod_1.z.string(), CamStreamerAPI_1.cameraStreamSchema).parse(res.data);
|
|
35
|
+
const streamList = {};
|
|
36
|
+
for (const [key, data] of Object.entries(list)) {
|
|
37
|
+
const streamId = parseInt(key);
|
|
38
|
+
streamList[streamId] = (0, exports.parseCameraStreamResponse)(data);
|
|
39
|
+
}
|
|
40
|
+
return streamList;
|
|
20
41
|
}
|
|
21
|
-
async getStream(
|
|
22
|
-
const
|
|
23
|
-
|
|
42
|
+
async getStream(streamId, options) {
|
|
43
|
+
const res = await this._getJson(`${BASE_PATH}/stream/get.cgi`, { stream_id: streamId }, options);
|
|
44
|
+
const cameraData = CamStreamerAPI_1.cameraStreamSchema.parse(res.data);
|
|
45
|
+
return (0, exports.parseCameraStreamResponse)(cameraData);
|
|
24
46
|
}
|
|
25
|
-
async getStreamParameter(
|
|
26
|
-
const
|
|
27
|
-
return
|
|
47
|
+
async getStreamParameter(streamId, paramName, options) {
|
|
48
|
+
const res = await this._getJson(`${BASE_PATH}/stream/get.cgi`, { stream_id: streamId }, options);
|
|
49
|
+
return zod_1.z.string().parse(res.data[paramName]);
|
|
28
50
|
}
|
|
29
|
-
async setStream(
|
|
51
|
+
async setStream(streamId, params, options) {
|
|
30
52
|
const { streamDelay, startTime, stopTime, ...rest } = params;
|
|
31
|
-
await this.
|
|
32
|
-
stream_id:
|
|
53
|
+
await this._getJson(`${BASE_PATH}/stream/set.cgi`, {
|
|
54
|
+
stream_id: streamId,
|
|
33
55
|
streamDelay: streamDelay ?? '',
|
|
34
|
-
startTime: startTime ??
|
|
35
|
-
stopTime: stopTime ??
|
|
56
|
+
startTime: startTime ?? null,
|
|
57
|
+
stopTime: stopTime ?? null,
|
|
36
58
|
...rest,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
async setStreamParameter(streamID, paramName, value) {
|
|
40
|
-
await this.get(`/local/camstreamer/stream/set.cgi?stream_id=${streamID}&${paramName}=${value}`);
|
|
41
|
-
}
|
|
42
|
-
async isStreaming(streamID) {
|
|
43
|
-
const response = await this.get(`/local/camstreamer/get_streamstat.cgi?stream_id=${streamID}`);
|
|
44
|
-
return response.data.is_streaming === 1;
|
|
59
|
+
}, options);
|
|
45
60
|
}
|
|
46
|
-
async
|
|
47
|
-
await this.
|
|
61
|
+
async setStreamParameter(streamId, paramName, value, options) {
|
|
62
|
+
await this._getJson(`${BASE_PATH}/stream/set.cgi`, { stream_id: streamId, [paramName]: value }, options);
|
|
48
63
|
}
|
|
49
|
-
|
|
50
|
-
|
|
64
|
+
async isStreaming(streamId, options) {
|
|
65
|
+
const res = await this._getJson(`${BASE_PATH}/get_streamstat.cgi`, { stream_id: streamId }, options);
|
|
66
|
+
return res.data.is_streaming === 1;
|
|
51
67
|
}
|
|
52
|
-
async
|
|
53
|
-
|
|
68
|
+
async deleteStream(streamId, options) {
|
|
69
|
+
const res = await this._getJson(`${BASE_PATH}/stream/remove.cgi`, { stream_id: streamId }, options);
|
|
70
|
+
return res.data.status === 200;
|
|
54
71
|
}
|
|
55
|
-
async
|
|
56
|
-
const
|
|
72
|
+
async _getJson(path, parameters, options) {
|
|
73
|
+
const agent = this.getClient(options?.proxyParams);
|
|
74
|
+
const res = await agent.get({ path, parameters, timeout: options?.timeout });
|
|
57
75
|
if (res.ok) {
|
|
58
76
|
return await res.json();
|
|
59
77
|
}
|
|
60
78
|
else {
|
|
61
|
-
throw new Error(await (0,
|
|
79
|
+
throw new Error(await (0, utils_1.responseStringify)(res));
|
|
62
80
|
}
|
|
63
81
|
}
|
|
64
82
|
}
|
|
65
83
|
exports.CamStreamerAPI = CamStreamerAPI;
|
|
84
|
+
const parseCameraStreamResponse = (cameraStreamData) => {
|
|
85
|
+
return {
|
|
86
|
+
enabled: parseInt(cameraStreamData.enabled),
|
|
87
|
+
active: parseInt(cameraStreamData.active),
|
|
88
|
+
audioSource: cameraStreamData.audioSource,
|
|
89
|
+
avSyncMsec: parseInt(cameraStreamData.avSyncMsec),
|
|
90
|
+
internalVapixParameters: cameraStreamData.internalVapixParameters,
|
|
91
|
+
userVapixParameters: cameraStreamData.userVapixParameters,
|
|
92
|
+
outputParameters: cameraStreamData.outputParameters,
|
|
93
|
+
outputType: cameraStreamData.outputType,
|
|
94
|
+
mediaServerUrl: cameraStreamData.mediaServerUrl,
|
|
95
|
+
inputType: cameraStreamData.inputType,
|
|
96
|
+
inputUrl: cameraStreamData.inputUrl,
|
|
97
|
+
forceStereo: parseInt(cameraStreamData.forceStereo),
|
|
98
|
+
streamDelay: isNaN(parseInt(cameraStreamData.streamDelay)) ? null : parseInt(cameraStreamData.streamDelay),
|
|
99
|
+
statusLed: parseInt(cameraStreamData.statusLed),
|
|
100
|
+
statusPort: cameraStreamData.statusPort,
|
|
101
|
+
callApi: parseInt(cameraStreamData.callApi),
|
|
102
|
+
trigger: cameraStreamData.trigger,
|
|
103
|
+
schedule: cameraStreamData.schedule,
|
|
104
|
+
prepareAhead: parseInt(cameraStreamData.prepareAhead),
|
|
105
|
+
startTime: isNaN(parseInt(cameraStreamData.startTime)) ? null : parseInt(cameraStreamData.startTime),
|
|
106
|
+
stopTime: isNaN(parseInt(cameraStreamData.stopTime)) ? null : parseInt(cameraStreamData.stopTime),
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
exports.parseCameraStreamResponse = parseCameraStreamResponse;
|
package/cjs/CamSwitcherAPI.js
CHANGED
|
@@ -3,124 +3,142 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CamSwitcherAPI = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const errors_1 = require("./errors/errors");
|
|
6
|
-
const
|
|
6
|
+
const utils_1 = require("./internal/utils");
|
|
7
7
|
const CamSwitcherAPI_1 = require("./types/CamSwitcherAPI");
|
|
8
|
-
const
|
|
8
|
+
const common_1 = require("./types/common");
|
|
9
9
|
const VapixAPI_1 = require("./VapixAPI");
|
|
10
10
|
const versionCompare_1 = require("./internal/versionCompare");
|
|
11
|
-
const utils_1 = require("./internal/utils");
|
|
12
11
|
const constants_1 = require("./internal/constants");
|
|
13
|
-
const
|
|
12
|
+
const ProxyClient_1 = require("./internal/ProxyClient");
|
|
13
|
+
const BASE_PATH = '/local/camswitcher/api';
|
|
14
14
|
class CamSwitcherAPI {
|
|
15
15
|
client;
|
|
16
|
+
CustomFormData;
|
|
16
17
|
vapixAgent;
|
|
17
|
-
constructor(client) {
|
|
18
|
+
constructor(client, CustomFormData = FormData) {
|
|
18
19
|
this.client = client;
|
|
19
|
-
this.
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
static
|
|
23
|
-
static
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
20
|
+
this.CustomFormData = CustomFormData;
|
|
21
|
+
this.vapixAgent = new VapixAPI_1.VapixAPI(client);
|
|
22
|
+
}
|
|
23
|
+
static getProxyPath = () => `${BASE_PATH}/proxy.cgi`;
|
|
24
|
+
static getWsEventsPath = () => `/local/camswitcher/events`;
|
|
25
|
+
static getClipPreviewPath = (id, storage) => `${BASE_PATH}/clip_preview.cgi?clip_name=${id}&storage=${storage}`;
|
|
26
|
+
getClient(proxyParams) {
|
|
27
|
+
return proxyParams ? new ProxyClient_1.ProxyClient(this.client, proxyParams) : this.client;
|
|
28
|
+
}
|
|
29
|
+
async checkCameraTime(options) {
|
|
30
|
+
const res = await this._getJson(`${BASE_PATH}/camera_time.cgi`, undefined, options);
|
|
31
|
+
return zod_1.z.boolean().parse(res.data);
|
|
32
|
+
}
|
|
33
|
+
async getNetworkCameraList(options) {
|
|
34
|
+
const res = await this._getJson(`${BASE_PATH}/network_camera_list.cgi`, undefined, options);
|
|
35
|
+
return common_1.networkCameraListSchema.parse(res.data);
|
|
36
|
+
}
|
|
37
|
+
async generateSilence(sampleRate, channels, options) {
|
|
38
|
+
const agent = this.getClient(options?.proxyParams);
|
|
39
|
+
await agent.get({
|
|
40
|
+
path: `${BASE_PATH}/generate_silence.cgi`,
|
|
41
|
+
parameters: {
|
|
42
|
+
sample_rate: sampleRate.toString(),
|
|
43
|
+
channels,
|
|
44
|
+
},
|
|
45
|
+
timeout: options?.timeout,
|
|
28
46
|
});
|
|
29
47
|
}
|
|
30
|
-
async
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const data = await this.get(`${baseUrl}/network_camera_list.cgi`);
|
|
36
|
-
return common_2.networkCameraListSchema.parse(data);
|
|
48
|
+
async getMaxFps(source, options) {
|
|
49
|
+
const res = await this._getJson(`${BASE_PATH}/get_max_framerate.cgi`, {
|
|
50
|
+
video_source: source,
|
|
51
|
+
}, options);
|
|
52
|
+
return zod_1.z.number().parse(res.data);
|
|
37
53
|
}
|
|
38
|
-
async
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
});
|
|
42
|
-
return zod_1.z.number().parse(data);
|
|
43
|
-
}
|
|
44
|
-
async getStorageInfo() {
|
|
45
|
-
const data = await this.get(`${baseUrl}/get_storage.cgi`);
|
|
46
|
-
return CamSwitcherAPI_1.storageInfoListSchema.parse(data);
|
|
54
|
+
async getStorageInfo(options) {
|
|
55
|
+
const res = await this._getJson(`${BASE_PATH}/get_storage.cgi`, undefined, options);
|
|
56
|
+
return CamSwitcherAPI_1.storageInfoListSchema.parse(res.data);
|
|
47
57
|
}
|
|
48
|
-
async wsAuthorization() {
|
|
49
|
-
const
|
|
50
|
-
return zod_1.z.string().parse(data);
|
|
58
|
+
async wsAuthorization(options) {
|
|
59
|
+
const res = await this._getJson(`${BASE_PATH}/ws_authorization.cgi`, undefined, options);
|
|
60
|
+
return zod_1.z.string().parse(res.data);
|
|
51
61
|
}
|
|
52
|
-
async getOutputInfo() {
|
|
53
|
-
const
|
|
54
|
-
return CamSwitcherAPI_1.outputInfoSchema.parse(data);
|
|
62
|
+
async getOutputInfo(options) {
|
|
63
|
+
const res = await this._getJson(`${BASE_PATH}/output_info.cgi`, undefined, options);
|
|
64
|
+
return CamSwitcherAPI_1.outputInfoSchema.parse(res.data);
|
|
55
65
|
}
|
|
56
|
-
async getAudioPushInfo() {
|
|
57
|
-
const
|
|
58
|
-
return CamSwitcherAPI_1.audioPushInfoSchema.parse(data);
|
|
66
|
+
async getAudioPushInfo(options) {
|
|
67
|
+
const res = await this._getJson(`${BASE_PATH}/audio_push_info.cgi`, undefined, options);
|
|
68
|
+
return CamSwitcherAPI_1.audioPushInfoSchema.parse(res.data);
|
|
59
69
|
}
|
|
60
|
-
async getStreamSaveList() {
|
|
61
|
-
const
|
|
62
|
-
return CamSwitcherAPI_1.streamSaveLoadSchema.parse(data);
|
|
70
|
+
async getStreamSaveList(options) {
|
|
71
|
+
const res = await this._getJson(`${BASE_PATH}/streams.cgi`, { action: 'get' }, options);
|
|
72
|
+
return CamSwitcherAPI_1.streamSaveLoadSchema.parse(res.data);
|
|
63
73
|
}
|
|
64
|
-
async getClipSaveList() {
|
|
65
|
-
const
|
|
66
|
-
return CamSwitcherAPI_1.clipSaveLoadSchema.parse(data);
|
|
74
|
+
async getClipSaveList(options) {
|
|
75
|
+
const res = await this._getJson(`${BASE_PATH}/clips.cgi`, { action: 'get' }, options);
|
|
76
|
+
return CamSwitcherAPI_1.clipSaveLoadSchema.parse(res.data);
|
|
67
77
|
}
|
|
68
|
-
async getPlaylistSaveList() {
|
|
69
|
-
const
|
|
70
|
-
return CamSwitcherAPI_1.playlistSaveLoadSchema.parse(data);
|
|
78
|
+
async getPlaylistSaveList(options) {
|
|
79
|
+
const res = await this._getJson(`${BASE_PATH}/playlists.cgi`, { action: 'get' }, options);
|
|
80
|
+
return CamSwitcherAPI_1.playlistSaveLoadSchema.parse(res.data);
|
|
71
81
|
}
|
|
72
|
-
async getTrackerSaveList() {
|
|
73
|
-
const
|
|
74
|
-
return CamSwitcherAPI_1.trackerSaveLoadSchema.parse(data);
|
|
82
|
+
async getTrackerSaveList(options) {
|
|
83
|
+
const res = await this._getJson(`${BASE_PATH}/trackers.cgi`, { action: 'get' }, options);
|
|
84
|
+
return CamSwitcherAPI_1.trackerSaveLoadSchema.parse(res.data);
|
|
75
85
|
}
|
|
76
|
-
async setStreamSaveList(data) {
|
|
77
|
-
|
|
86
|
+
async setStreamSaveList(data, options) {
|
|
87
|
+
await this._post(`${BASE_PATH}/streams.cgi`, data, { action: 'set' }, options);
|
|
78
88
|
}
|
|
79
|
-
async setClipSaveList(data) {
|
|
80
|
-
|
|
89
|
+
async setClipSaveList(data, options) {
|
|
90
|
+
await this._post(`${BASE_PATH}/clips.cgi`, data, { action: 'set' }, options);
|
|
81
91
|
}
|
|
82
|
-
async setPlaylistSaveList(data) {
|
|
83
|
-
|
|
92
|
+
async setPlaylistSaveList(data, options) {
|
|
93
|
+
await this._post(`${BASE_PATH}/playlists.cgi`, data, { action: 'set' }, options);
|
|
84
94
|
}
|
|
85
|
-
async setTrackerSaveList(data) {
|
|
86
|
-
|
|
95
|
+
async setTrackerSaveList(data, options) {
|
|
96
|
+
await this._post(`${BASE_PATH}/trackers.cgi`, data, { action: 'set' }, options);
|
|
87
97
|
}
|
|
88
|
-
async playlistSwitch(playlistName) {
|
|
89
|
-
await this.
|
|
98
|
+
async playlistSwitch(playlistName, options) {
|
|
99
|
+
await this._getJson(`${BASE_PATH}/playlist_switch.cgi`, { playlist_name: playlistName }, options);
|
|
90
100
|
}
|
|
91
|
-
async playlistQueuePush(playlistName) {
|
|
92
|
-
await this.
|
|
101
|
+
async playlistQueuePush(playlistName, options) {
|
|
102
|
+
await this._getJson(`${BASE_PATH}/playlist_queue_push.cgi`, { playlist_name: playlistName }, options);
|
|
93
103
|
}
|
|
94
|
-
async playlistQueueClear() {
|
|
95
|
-
await this.
|
|
104
|
+
async playlistQueueClear(options) {
|
|
105
|
+
await this._getJson(`${BASE_PATH}/playlist_queue_clear.cgi`, undefined, options);
|
|
96
106
|
}
|
|
97
|
-
async playlistQueueList() {
|
|
98
|
-
const
|
|
99
|
-
return CamSwitcherAPI_1.playlistQueueSchema.parse(data).playlistQueueList;
|
|
107
|
+
async playlistQueueList(options) {
|
|
108
|
+
const res = await this._getJson(`${BASE_PATH}/playlist_queue_list.cgi`, undefined, options);
|
|
109
|
+
return CamSwitcherAPI_1.playlistQueueSchema.parse(res.data).playlistQueueList;
|
|
100
110
|
}
|
|
101
|
-
async playlistQueuePlayNext() {
|
|
102
|
-
await this.
|
|
111
|
+
async playlistQueuePlayNext(options) {
|
|
112
|
+
await this._getJson(`${BASE_PATH}/playlist_queue_play_next.cgi`, undefined, options);
|
|
103
113
|
}
|
|
104
|
-
async addNewClip(file, clipType, storage,
|
|
105
|
-
const
|
|
106
|
-
formData.
|
|
114
|
+
async addNewClip(file, clipType, storage, clipId, fileName, options) {
|
|
115
|
+
const path = `${BASE_PATH}/clip_upload.cgi`;
|
|
116
|
+
const formData = new this.CustomFormData();
|
|
117
|
+
formData.append('clip_name', clipId);
|
|
107
118
|
formData.append('clip_type', clipType);
|
|
108
119
|
formData.append('file', file, fileName);
|
|
109
|
-
const
|
|
110
|
-
const res = await
|
|
120
|
+
const agent = this.getClient(options?.proxyParams);
|
|
121
|
+
const res = await agent.post({
|
|
122
|
+
path,
|
|
123
|
+
data: formData,
|
|
124
|
+
parameters: {
|
|
125
|
+
storage: storage,
|
|
126
|
+
},
|
|
127
|
+
timeout: options?.timeout,
|
|
128
|
+
});
|
|
111
129
|
const output = (await res.json());
|
|
112
130
|
if (output.status !== 200) {
|
|
113
131
|
throw new errors_1.AddNewClipError(output.message);
|
|
114
132
|
}
|
|
115
133
|
}
|
|
116
|
-
removeClip(
|
|
117
|
-
|
|
134
|
+
async removeClip(clipId, storage, options) {
|
|
135
|
+
await this._getJson(`${BASE_PATH}/clip_remove.cgi`, { clip_name: clipId, storage }, options);
|
|
118
136
|
}
|
|
119
|
-
async getClipList() {
|
|
120
|
-
const
|
|
121
|
-
return CamSwitcherAPI_1.clipListSchema.parse(data).clip_list;
|
|
137
|
+
async getClipList(options) {
|
|
138
|
+
const res = await this._getJson(`${BASE_PATH}/clip_list.cgi`, undefined, options);
|
|
139
|
+
return CamSwitcherAPI_1.clipListSchema.parse(res.data).clip_list;
|
|
122
140
|
}
|
|
123
|
-
setCamSwitchOptions(data, cameraFWVersion) {
|
|
141
|
+
setCamSwitchOptions(data, cameraFWVersion, options) {
|
|
124
142
|
const bitrateVapixParams = parseBitrateOptionsToBitrateVapixParams(cameraFWVersion, data.bitrateMode, data);
|
|
125
143
|
const saveData = {
|
|
126
144
|
video: {
|
|
@@ -138,9 +156,9 @@ class CamSwitcherAPI {
|
|
|
138
156
|
},
|
|
139
157
|
keyboard: data.keyboard,
|
|
140
158
|
};
|
|
141
|
-
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SETTINGS, saveData);
|
|
159
|
+
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SETTINGS, saveData, options);
|
|
142
160
|
}
|
|
143
|
-
setGlobalAudioSettings(settings) {
|
|
161
|
+
setGlobalAudioSettings(settings, options) {
|
|
144
162
|
let acceptedType = 'NONE';
|
|
145
163
|
if (settings.type === 'source' && settings.source) {
|
|
146
164
|
if ((0, utils_1.isClip)(settings.source)) {
|
|
@@ -156,9 +174,9 @@ class CamSwitcherAPI {
|
|
|
156
174
|
clip_name: settings.source,
|
|
157
175
|
storage: settings.storage,
|
|
158
176
|
};
|
|
159
|
-
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.MASTER_AUDIO, data);
|
|
177
|
+
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.MASTER_AUDIO, data, options);
|
|
160
178
|
}
|
|
161
|
-
setSecondaryAudioSettings(settings) {
|
|
179
|
+
setSecondaryAudioSettings(settings, options) {
|
|
162
180
|
const data = {
|
|
163
181
|
type: settings.type,
|
|
164
182
|
stream_name: settings.streamName ?? '',
|
|
@@ -167,34 +185,34 @@ class CamSwitcherAPI {
|
|
|
167
185
|
secondary_audio_level: settings.secondaryAudioLevel,
|
|
168
186
|
master_audio_level: settings.masterAudioLevel,
|
|
169
187
|
};
|
|
170
|
-
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SECONDARY_AUDIO, data);
|
|
188
|
+
return this.setParamFromCameraJSON(CSW_PARAM_NAMES.SECONDARY_AUDIO, data, options);
|
|
171
189
|
}
|
|
172
|
-
setDefaultPlaylist(
|
|
173
|
-
const value = JSON.stringify({ default_playlist_id:
|
|
190
|
+
setDefaultPlaylist(playlistId, options) {
|
|
191
|
+
const value = JSON.stringify({ default_playlist_id: playlistId });
|
|
174
192
|
return this.vapixAgent.setParameter({
|
|
175
193
|
[CSW_PARAM_NAMES.DEFAULT_PLAYLIST]: value,
|
|
176
|
-
},
|
|
194
|
+
}, options);
|
|
177
195
|
}
|
|
178
|
-
setPermanentRtspUrlToken(token) {
|
|
179
|
-
return this.vapixAgent.setParameter({ [CSW_PARAM_NAMES.RTSP_TOKEN]: token },
|
|
196
|
+
setPermanentRtspUrlToken(token, options) {
|
|
197
|
+
return this.vapixAgent.setParameter({ [CSW_PARAM_NAMES.RTSP_TOKEN]: token }, options);
|
|
180
198
|
}
|
|
181
|
-
async getCamSwitchOptions() {
|
|
182
|
-
const saveData = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SETTINGS);
|
|
183
|
-
if ((0,
|
|
199
|
+
async getCamSwitchOptions(options) {
|
|
200
|
+
const saveData = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SETTINGS, options);
|
|
201
|
+
if ((0, utils_1.isNullish)(saveData.video)) {
|
|
184
202
|
return saveData;
|
|
185
203
|
}
|
|
186
|
-
if (!(0,
|
|
204
|
+
if (!(0, utils_1.isNullish)(saveData.video?.bitrateVapixParams)) {
|
|
187
205
|
const bitrateOptions = parseVapixParamsToBitrateOptions(saveData.video.bitrateVapixParams);
|
|
188
206
|
saveData.video.bitrateMode = bitrateOptions.bitrateMode;
|
|
189
207
|
saveData.video.maximumBitRate = bitrateOptions.maximumBitRate;
|
|
190
208
|
saveData.video.retentionTime = bitrateOptions.retentionTime;
|
|
191
209
|
saveData.video.bitRateLimit = bitrateOptions.bitRateLimit;
|
|
192
210
|
}
|
|
193
|
-
if (!(0,
|
|
211
|
+
if (!(0, utils_1.isNullish)(saveData.video?.bitrateLimit)) {
|
|
194
212
|
saveData.video.maximumBitRate = saveData.video.bitrateLimit;
|
|
195
213
|
saveData.video.bitrateMode = 'MBR';
|
|
196
214
|
}
|
|
197
|
-
if (!(0,
|
|
215
|
+
if (!(0, utils_1.isNullish)(saveData.video?.videoClipQuality)) {
|
|
198
216
|
saveData.video.maximumBitRate = saveData.video.videoClipQuality;
|
|
199
217
|
}
|
|
200
218
|
return {
|
|
@@ -204,12 +222,12 @@ class CamSwitcherAPI {
|
|
|
204
222
|
keyboard: saveData.keyboard,
|
|
205
223
|
};
|
|
206
224
|
}
|
|
207
|
-
async getGlobalAudioSettings() {
|
|
225
|
+
async getGlobalAudioSettings(options) {
|
|
208
226
|
const settings = {
|
|
209
227
|
type: 'fromSource',
|
|
210
228
|
source: 'fromSource',
|
|
211
229
|
};
|
|
212
|
-
const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.MASTER_AUDIO);
|
|
230
|
+
const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.MASTER_AUDIO, options);
|
|
213
231
|
if (res.type === 'STREAM') {
|
|
214
232
|
settings.type = 'source';
|
|
215
233
|
settings.source = res.stream_name;
|
|
@@ -219,10 +237,10 @@ class CamSwitcherAPI {
|
|
|
219
237
|
settings.source = res.clip_name;
|
|
220
238
|
settings.storage = res.storage;
|
|
221
239
|
}
|
|
222
|
-
return settings;
|
|
240
|
+
return CamSwitcherAPI_1.globalAudioSettingsSchema.parse(settings);
|
|
223
241
|
}
|
|
224
|
-
async getSecondaryAudioSettings() {
|
|
225
|
-
const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SECONDARY_AUDIO);
|
|
242
|
+
async getSecondaryAudioSettings(options) {
|
|
243
|
+
const res = await this.getParamFromCameraAndJSONParse(CSW_PARAM_NAMES.SECONDARY_AUDIO, options);
|
|
226
244
|
const settings = {
|
|
227
245
|
type: res.type ?? 'NONE',
|
|
228
246
|
streamName: res.stream_name,
|
|
@@ -231,40 +249,40 @@ class CamSwitcherAPI {
|
|
|
231
249
|
secondaryAudioLevel: res.secondary_audio_level ?? 1,
|
|
232
250
|
masterAudioLevel: res.master_audio_level ?? 1,
|
|
233
251
|
};
|
|
234
|
-
return settings;
|
|
252
|
+
return CamSwitcherAPI_1.secondaryAudioSettingsSchema.parse(settings);
|
|
235
253
|
}
|
|
236
|
-
async getPermanentRtspUrlToken() {
|
|
254
|
+
async getPermanentRtspUrlToken(options) {
|
|
237
255
|
const paramName = CSW_PARAM_NAMES.RTSP_TOKEN;
|
|
238
|
-
const res = await this.vapixAgent.getParameter([paramName],
|
|
239
|
-
return res[paramName] ?? '';
|
|
256
|
+
const res = await this.vapixAgent.getParameter([paramName], options);
|
|
257
|
+
return zod_1.z.string().parse(res[paramName] ?? '');
|
|
240
258
|
}
|
|
241
|
-
async
|
|
242
|
-
const
|
|
259
|
+
async _getJson(path, parameters, options) {
|
|
260
|
+
const agent = this.getClient(options?.proxyParams);
|
|
261
|
+
const res = await agent.get({ path, parameters, timeout: options?.timeout });
|
|
243
262
|
if (res.ok) {
|
|
244
|
-
|
|
245
|
-
return d.data;
|
|
263
|
+
return await res.json();
|
|
246
264
|
}
|
|
247
265
|
else {
|
|
248
|
-
throw new Error(await (0,
|
|
266
|
+
throw new Error(await (0, utils_1.responseStringify)(res));
|
|
249
267
|
}
|
|
250
268
|
}
|
|
251
|
-
async
|
|
252
|
-
const
|
|
269
|
+
async _post(path, data, parameters, options, headers) {
|
|
270
|
+
const agent = this.getClient(options?.proxyParams);
|
|
271
|
+
const res = await agent.post({ path, data, parameters, timeout: options?.timeout, headers });
|
|
253
272
|
if (res.ok) {
|
|
254
|
-
|
|
255
|
-
return parsed.message === 'OK';
|
|
273
|
+
return await res.json();
|
|
256
274
|
}
|
|
257
275
|
else {
|
|
258
|
-
throw new Error(await (0,
|
|
276
|
+
throw new Error(await (0, utils_1.responseStringify)(res));
|
|
259
277
|
}
|
|
260
278
|
}
|
|
261
|
-
setParamFromCameraJSON(paramName, data) {
|
|
279
|
+
setParamFromCameraJSON(paramName, data, options) {
|
|
262
280
|
const params = {};
|
|
263
281
|
params[paramName] = JSON.stringify(data);
|
|
264
|
-
return this.vapixAgent.setParameter(params,
|
|
282
|
+
return this.vapixAgent.setParameter(params, options);
|
|
265
283
|
}
|
|
266
|
-
async getParamFromCameraAndJSONParse(paramName) {
|
|
267
|
-
const data = await this.vapixAgent.getParameter([paramName],
|
|
284
|
+
async getParamFromCameraAndJSONParse(paramName, options) {
|
|
285
|
+
const data = await this.vapixAgent.getParameter([paramName], options);
|
|
268
286
|
if (data[paramName] !== undefined) {
|
|
269
287
|
try {
|
|
270
288
|
if (data[paramName] === '') {
|
|
@@ -275,10 +293,10 @@ class CamSwitcherAPI {
|
|
|
275
293
|
}
|
|
276
294
|
}
|
|
277
295
|
catch {
|
|
278
|
-
throw new
|
|
296
|
+
throw new errors_1.JsonParseError(paramName, data[paramName]);
|
|
279
297
|
}
|
|
280
298
|
}
|
|
281
|
-
throw new
|
|
299
|
+
throw new errors_1.ParameterNotFoundError(paramName);
|
|
282
300
|
}
|
|
283
301
|
}
|
|
284
302
|
exports.CamSwitcherAPI = CamSwitcherAPI;
|
|
@@ -293,7 +311,7 @@ const parseBitrateOptionsToBitrateVapixParams = (firmWareVersion, bitrateMode, c
|
|
|
293
311
|
if (!(0, versionCompare_1.isFirmwareVersionAtLeast)(firmWareVersion, constants_1.FIRMWARE_WITH_BITRATE_MODES_SUPPORT)) {
|
|
294
312
|
return `videomaxbitrate=${cameraOptions.maximumBitRate}`;
|
|
295
313
|
}
|
|
296
|
-
if (bitrateMode ===
|
|
314
|
+
if (bitrateMode === undefined) {
|
|
297
315
|
return '';
|
|
298
316
|
}
|
|
299
317
|
const data = {
|
package/cjs/CamSwitcherEvents.js
CHANGED
|
@@ -1,67 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CamSwitcherEvents = void 0;
|
|
4
|
+
const WsEvents_1 = require("./internal/WsEvents");
|
|
4
5
|
const CamSwitcherEvents_1 = require("./types/CamSwitcherEvents");
|
|
5
|
-
class CamSwitcherEvents {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
listeners = {};
|
|
9
|
-
setWebsocket(ws) {
|
|
10
|
-
if (this.ws) {
|
|
11
|
-
this.ws.destroy();
|
|
12
|
-
}
|
|
13
|
-
this.ws = ws;
|
|
14
|
-
this.ws.onmessage = (e) => this.onMessage(e);
|
|
15
|
-
}
|
|
16
|
-
resendInitData() {
|
|
17
|
-
const request = {
|
|
18
|
-
command: 'sendInitData',
|
|
19
|
-
};
|
|
20
|
-
this.ws?.send(JSON.stringify(request));
|
|
21
|
-
}
|
|
22
|
-
addListener(type, listener, id) {
|
|
23
|
-
const typeList = this.listeners[type];
|
|
24
|
-
if (typeList === undefined) {
|
|
25
|
-
this.listeners[type] = { [id]: listener };
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
typeList[id] = listener;
|
|
29
|
-
}
|
|
30
|
-
removeListener(type, id) {
|
|
31
|
-
const typeList = this.listeners[type];
|
|
32
|
-
if (typeList) {
|
|
33
|
-
delete typeList[id];
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
onMessage(evt) {
|
|
37
|
-
if (this.isDestroyed) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
try {
|
|
41
|
-
const eventData = JSON.parse(evt.data);
|
|
42
|
-
const data = CamSwitcherEvents_1.cswEventsSchema.parse(eventData);
|
|
43
|
-
if (data.type === 'init') {
|
|
44
|
-
this.processMessage(data.data, true);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
this.processMessage(data, false);
|
|
48
|
-
}
|
|
49
|
-
catch (error) {
|
|
50
|
-
console.error('Error parsing event data:', evt.data, error);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
processMessage(event, isInit) {
|
|
54
|
-
const listeners = this.listeners[event.type];
|
|
55
|
-
const list = Object.values(listeners ?? {});
|
|
56
|
-
list.forEach((listener) => listener(event, isInit));
|
|
57
|
-
}
|
|
58
|
-
destroy() {
|
|
59
|
-
this.isDestroyed = true;
|
|
60
|
-
if (this.ws) {
|
|
61
|
-
this.ws.destroy();
|
|
62
|
-
this.ws = null;
|
|
63
|
-
}
|
|
64
|
-
this.listeners = {};
|
|
6
|
+
class CamSwitcherEvents extends WsEvents_1.WsEvents {
|
|
7
|
+
constructor(ws) {
|
|
8
|
+
super(CamSwitcherEvents_1.cswEventsSchema, ws);
|
|
65
9
|
}
|
|
66
10
|
}
|
|
67
11
|
exports.CamSwitcherEvents = CamSwitcherEvents;
|