hap-nodejs 0.10.0-beta.1 → 0.10.0-beta.10
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/@types/bonjour-hap.d.ts +4 -3
- package/@types/simple-plist.d.ts +2 -1
- package/README.md +1 -1
- package/dist/BridgedCore.js +7 -6
- package/dist/BridgedCore.js.map +1 -1
- package/dist/Core.js +14 -12
- package/dist/Core.js.map +1 -1
- package/dist/accessories/AirConditioner_accessory.js +9 -9
- package/dist/accessories/AirConditioner_accessory.js.map +1 -1
- package/dist/accessories/AppleTVRemote_accessory.js +17 -16
- package/dist/accessories/AppleTVRemote_accessory.js.map +1 -1
- package/dist/accessories/Camera_accessory.js +415 -36
- package/dist/accessories/Camera_accessory.js.map +1 -1
- package/dist/accessories/Fan_accessory.js +10 -15
- package/dist/accessories/Fan_accessory.js.map +1 -1
- package/dist/accessories/GarageDoorOpener_accessory.js +7 -8
- package/dist/accessories/GarageDoorOpener_accessory.js.map +1 -1
- package/dist/accessories/Light-AdaptiveLighting_accessory.js +3 -4
- package/dist/accessories/Light-AdaptiveLighting_accessory.js.map +1 -1
- package/dist/accessories/Light_accessory.js +23 -14
- package/dist/accessories/Light_accessory.js.map +1 -1
- package/dist/accessories/Lock_accessory.js +7 -8
- package/dist/accessories/Lock_accessory.js.map +1 -1
- package/dist/accessories/MotionSensor_accessory.js +5 -6
- package/dist/accessories/MotionSensor_accessory.js.map +1 -1
- package/dist/accessories/Outlet_accessory.js +5 -6
- package/dist/accessories/Outlet_accessory.js.map +1 -1
- package/dist/accessories/SmartSpeaker_accessory.js +6 -6
- package/dist/accessories/SmartSpeaker_accessory.js.map +1 -1
- package/dist/accessories/Sprinkler_accessory.js +12 -13
- package/dist/accessories/Sprinkler_accessory.js.map +1 -1
- package/dist/accessories/TV_accessory.js +4 -5
- package/dist/accessories/TV_accessory.js.map +1 -1
- package/dist/accessories/TemperatureSensor_accessory.js +5 -6
- package/dist/accessories/TemperatureSensor_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.d.ts +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.d.ts.map +1 -1
- package/dist/accessories/Wi-FiRouter_accessory.js +7 -8
- package/dist/accessories/Wi-FiRouter_accessory.js.map +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.d.ts +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.d.ts.map +1 -1
- package/dist/accessories/Wi-FiSatellite_accessory.js +6 -7
- package/dist/accessories/Wi-FiSatellite_accessory.js.map +1 -1
- package/dist/accessories/gstreamer-audioProducer.d.ts.map +1 -1
- package/dist/accessories/gstreamer-audioProducer.js +21 -22
- package/dist/accessories/gstreamer-audioProducer.js.map +1 -1
- package/dist/index.d.ts +27 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -24
- package/dist/index.js.map +1 -1
- package/dist/internal-types.d.ts +2 -0
- package/dist/internal-types.d.ts.map +1 -1
- package/dist/internal-types.js.map +1 -1
- package/dist/lib/Accessory.d.ts +38 -17
- package/dist/lib/Accessory.d.ts.map +1 -1
- package/dist/lib/Accessory.js +345 -273
- package/dist/lib/Accessory.js.map +1 -1
- package/dist/lib/AccessoryLoader.d.ts +10 -10
- package/dist/lib/AccessoryLoader.d.ts.map +1 -1
- package/dist/lib/AccessoryLoader.js +109 -99
- package/dist/lib/AccessoryLoader.js.map +1 -1
- package/dist/lib/Advertiser.d.ts +23 -3
- package/dist/lib/Advertiser.d.ts.map +1 -1
- package/dist/lib/Advertiser.js +242 -29
- package/dist/lib/Advertiser.js.map +1 -1
- package/dist/lib/Bridge.d.ts +1 -1
- package/dist/lib/Bridge.d.ts.map +1 -1
- package/dist/lib/Bridge.js +1 -1
- package/dist/lib/Bridge.js.map +1 -1
- package/dist/lib/Characteristic.d.ts +22 -21
- package/dist/lib/Characteristic.d.ts.map +1 -1
- package/dist/lib/Characteristic.js +147 -144
- package/dist/lib/Characteristic.js.map +1 -1
- package/dist/lib/HAPServer.d.ts +2 -2
- package/dist/lib/HAPServer.d.ts.map +1 -1
- package/dist/lib/HAPServer.js +43 -39
- package/dist/lib/HAPServer.js.map +1 -1
- package/dist/lib/Service.d.ts +3 -3
- package/dist/lib/Service.d.ts.map +1 -1
- package/dist/lib/Service.js +51 -47
- package/dist/lib/Service.js.map +1 -1
- package/dist/lib/camera/Camera.d.ts +2 -2
- package/dist/lib/camera/Camera.d.ts.map +1 -1
- package/dist/lib/camera/Camera.js +3 -3
- package/dist/lib/camera/Camera.js.map +1 -1
- package/dist/lib/camera/RTPProxy.d.ts +19 -19
- package/dist/lib/camera/RTPProxy.d.ts.map +1 -1
- package/dist/lib/camera/RTPProxy.js +230 -208
- package/dist/lib/camera/RTPProxy.js.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.d.ts +46 -10
- package/dist/lib/camera/RTPStreamManagement.d.ts.map +1 -1
- package/dist/lib/camera/RTPStreamManagement.js +124 -49
- package/dist/lib/camera/RTPStreamManagement.js.map +1 -1
- package/dist/lib/camera/RecordingManagement.d.ts +267 -0
- package/dist/lib/camera/RecordingManagement.d.ts.map +1 -0
- package/dist/lib/camera/RecordingManagement.js +750 -0
- package/dist/lib/camera/RecordingManagement.js.map +1 -0
- package/dist/lib/camera/index.d.ts +4 -3
- package/dist/lib/camera/index.d.ts.map +1 -1
- package/dist/lib/camera/index.js +4 -3
- package/dist/lib/camera/index.js.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.d.ts +9 -9
- package/dist/lib/controller/AdaptiveLightingController.d.ts.map +1 -1
- package/dist/lib/controller/AdaptiveLightingController.js +37 -31
- package/dist/lib/controller/AdaptiveLightingController.js.map +1 -1
- package/dist/lib/controller/CameraController.d.ts +253 -7
- package/dist/lib/controller/CameraController.d.ts.map +1 -1
- package/dist/lib/controller/CameraController.js +382 -35
- package/dist/lib/controller/CameraController.js.map +1 -1
- package/dist/lib/controller/Controller.d.ts +3 -3
- package/dist/lib/controller/Controller.d.ts.map +1 -1
- package/dist/lib/controller/Controller.js.map +1 -1
- package/dist/lib/controller/DoorbellController.d.ts +43 -1
- package/dist/lib/controller/DoorbellController.d.ts.map +1 -1
- package/dist/lib/controller/DoorbellController.js +64 -12
- package/dist/lib/controller/DoorbellController.js.map +1 -1
- package/dist/lib/controller/RemoteController.d.ts +4 -4
- package/dist/lib/controller/RemoteController.d.ts.map +1 -1
- package/dist/lib/controller/RemoteController.js +79 -69
- package/dist/lib/controller/RemoteController.js.map +1 -1
- package/dist/lib/controller/index.d.ts +4 -4
- package/dist/lib/controller/index.js +5 -5
- package/dist/lib/controller/index.js.map +1 -1
- package/dist/lib/datastream/DataStreamManagement.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamManagement.js +12 -11
- package/dist/lib/datastream/DataStreamManagement.js.map +1 -1
- package/dist/lib/datastream/DataStreamParser.d.ts +24 -24
- package/dist/lib/datastream/DataStreamParser.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamParser.js +31 -22
- package/dist/lib/datastream/DataStreamParser.js.map +1 -1
- package/dist/lib/datastream/DataStreamServer.d.ts +24 -5
- package/dist/lib/datastream/DataStreamServer.d.ts.map +1 -1
- package/dist/lib/datastream/DataStreamServer.js +109 -68
- package/dist/lib/datastream/DataStreamServer.js.map +1 -1
- package/dist/lib/datastream/index.d.ts +3 -3
- package/dist/lib/datastream/index.js +3 -3
- package/dist/lib/datastream/index.js.map +1 -1
- package/dist/lib/definitions/CharacteristicDefinitions.js +249 -249
- package/dist/lib/definitions/CharacteristicDefinitions.js.map +1 -1
- package/dist/lib/definitions/ServiceDefinitions.js +75 -75
- package/dist/lib/definitions/ServiceDefinitions.js.map +1 -1
- package/dist/lib/definitions/generate-definitions.d.ts.map +1 -1
- package/dist/lib/definitions/generate-definitions.js +76 -72
- package/dist/lib/definitions/generate-definitions.js.map +1 -1
- package/dist/lib/definitions/generator-configuration.d.ts.map +1 -1
- package/dist/lib/definitions/generator-configuration.js +34 -16
- package/dist/lib/definitions/generator-configuration.js.map +1 -1
- package/dist/lib/definitions/index.js +2 -2
- package/dist/lib/definitions/index.js.map +1 -1
- package/dist/lib/model/AccessoryInfo.d.ts +6 -6
- package/dist/lib/model/AccessoryInfo.d.ts.map +1 -1
- package/dist/lib/model/AccessoryInfo.js +86 -76
- package/dist/lib/model/AccessoryInfo.js.map +1 -1
- package/dist/lib/model/ControllerStorage.d.ts.map +1 -1
- package/dist/lib/model/ControllerStorage.js +9 -9
- package/dist/lib/model/ControllerStorage.js.map +1 -1
- package/dist/lib/model/HAPStorage.d.ts.map +1 -1
- package/dist/lib/model/HAPStorage.js +2 -1
- package/dist/lib/model/HAPStorage.js.map +1 -1
- package/dist/lib/model/IdentifierCache.d.ts +11 -11
- package/dist/lib/model/IdentifierCache.d.ts.map +1 -1
- package/dist/lib/model/IdentifierCache.js +69 -67
- package/dist/lib/model/IdentifierCache.js.map +1 -1
- package/dist/lib/tv/AccessControlManagement.d.ts +1 -1
- package/dist/lib/tv/AccessControlManagement.d.ts.map +1 -1
- package/dist/lib/tv/AccessControlManagement.js +2 -2
- package/dist/lib/tv/AccessControlManagement.js.map +1 -1
- package/dist/lib/util/clone.js +5 -4
- package/dist/lib/util/clone.js.map +1 -1
- package/dist/lib/util/color-utils.d.ts.map +1 -1
- package/dist/lib/util/color-utils.js +2 -2
- package/dist/lib/util/color-utils.js.map +1 -1
- package/dist/lib/util/eventedhttp.d.ts +4 -4
- package/dist/lib/util/eventedhttp.d.ts.map +1 -1
- package/dist/lib/util/eventedhttp.js +54 -51
- package/dist/lib/util/eventedhttp.js.map +1 -1
- package/dist/lib/util/hapCrypto.d.ts +5 -5
- package/dist/lib/util/hapCrypto.d.ts.map +1 -1
- package/dist/lib/util/hapCrypto.js +66 -82
- package/dist/lib/util/hapCrypto.js.map +1 -1
- package/dist/lib/util/hapStatusError.js +3 -3
- package/dist/lib/util/hapStatusError.js.map +1 -1
- package/dist/lib/util/net-utils.d.ts.map +1 -1
- package/dist/lib/util/net-utils.js +4 -6
- package/dist/lib/util/net-utils.js.map +1 -1
- package/dist/lib/util/once.d.ts +1 -1
- package/dist/lib/util/once.d.ts.map +1 -1
- package/dist/lib/util/once.js +2 -1
- package/dist/lib/util/once.js.map +1 -1
- package/dist/lib/util/promise-utils.d.ts +2 -0
- package/dist/lib/util/promise-utils.d.ts.map +1 -0
- package/dist/lib/util/promise-utils.js +10 -0
- package/dist/lib/util/promise-utils.js.map +1 -0
- package/dist/lib/util/request-util.d.ts.map +1 -1
- package/dist/lib/util/request-util.js +1 -0
- package/dist/lib/util/request-util.js.map +1 -1
- package/dist/lib/util/time.d.ts +1 -1
- package/dist/lib/util/time.d.ts.map +1 -1
- package/dist/lib/util/time.js +8 -8
- package/dist/lib/util/time.js.map +1 -1
- package/dist/lib/util/tlv.d.ts.map +1 -1
- package/dist/lib/util/tlv.js +15 -12
- package/dist/lib/util/tlv.js.map +1 -1
- package/dist/lib/util/uuid.d.ts.map +1 -1
- package/dist/lib/util/uuid.js +26 -20
- package/dist/lib/util/uuid.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +22 -19
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { LegacyCameraSource } from "../../index";
|
|
3
|
-
import { SessionIdentifier } from
|
|
2
|
+
import { LegacyCameraSource, ResourceRequestReason, StateChangeDelegate } from "../../index";
|
|
3
|
+
import { SessionIdentifier } from "../../types";
|
|
4
4
|
import { CameraStreamingDelegate } from "../controller";
|
|
5
5
|
import type { CameraRTPStreamManagement } from "../definitions";
|
|
6
|
-
import RTPProxy from
|
|
6
|
+
import RTPProxy from "./RTPProxy";
|
|
7
7
|
declare const enum StreamingStatus {
|
|
8
8
|
AVAILABLE = 0,
|
|
9
9
|
IN_USE = 1,
|
|
10
10
|
UNAVAILABLE = 2
|
|
11
11
|
}
|
|
12
|
+
export declare const enum VideoCodecType {
|
|
13
|
+
H264 = 0
|
|
14
|
+
}
|
|
12
15
|
export declare const enum H264Profile {
|
|
13
16
|
BASELINE = 0,
|
|
14
17
|
MAIN = 1,
|
|
@@ -58,10 +61,10 @@ export declare type VideoStreamingOptions = {
|
|
|
58
61
|
resolutions: Resolution[];
|
|
59
62
|
cvoId?: number;
|
|
60
63
|
};
|
|
61
|
-
export
|
|
64
|
+
export interface H264CodecParameters {
|
|
62
65
|
levels: H264Level[];
|
|
63
66
|
profiles: H264Profile[];
|
|
64
|
-
}
|
|
67
|
+
}
|
|
65
68
|
export declare type Resolution = [number, number, number];
|
|
66
69
|
export declare type AudioStreamingOptions = {
|
|
67
70
|
codecs: AudioStreamingCodec[];
|
|
@@ -92,6 +95,13 @@ export declare type StreamSessionIdentifier = string;
|
|
|
92
95
|
export declare type SnapshotRequest = {
|
|
93
96
|
height: number;
|
|
94
97
|
width: number;
|
|
98
|
+
/**
|
|
99
|
+
* An optional {@link ResourceRequestReason}. The client decides if it wants to send this value. It is typically
|
|
100
|
+
* only sent in the context of HomeKit Secure Video Cameras.
|
|
101
|
+
* This value might be used by a `CameraStreamingDelegate` for informational purposes.
|
|
102
|
+
* When `handleSnapshotRequest` is called, it is already checked if the respective reason is allowed in the current camera configuration.
|
|
103
|
+
*/
|
|
104
|
+
reason?: ResourceRequestReason;
|
|
95
105
|
};
|
|
96
106
|
export declare type PrepareStreamRequest = {
|
|
97
107
|
sessionID: StreamSessionIdentifier;
|
|
@@ -127,7 +137,7 @@ export declare type PrepareStreamResponse = {
|
|
|
127
137
|
*/
|
|
128
138
|
export declare type Address = {
|
|
129
139
|
address: string;
|
|
130
|
-
type?:
|
|
140
|
+
type?: "v4" | "v6";
|
|
131
141
|
};
|
|
132
142
|
export interface SourceResponse {
|
|
133
143
|
port: number;
|
|
@@ -185,6 +195,7 @@ export declare type AudioInfo = {
|
|
|
185
195
|
comfortNoiseEnabled: boolean;
|
|
186
196
|
};
|
|
187
197
|
export declare type VideoInfo = {
|
|
198
|
+
codec: VideoCodecType;
|
|
188
199
|
profile: H264Profile;
|
|
189
200
|
level: H264Level;
|
|
190
201
|
packetizationMode: VideoCodecPacketizationMode;
|
|
@@ -205,25 +216,31 @@ export declare type ReconfiguredVideoInfo = {
|
|
|
205
216
|
max_bit_rate: number;
|
|
206
217
|
rtcp_interval: number;
|
|
207
218
|
};
|
|
219
|
+
export interface RTPStreamManagementState {
|
|
220
|
+
id: number;
|
|
221
|
+
active: boolean;
|
|
222
|
+
}
|
|
208
223
|
export declare class RTPStreamManagement {
|
|
209
224
|
/**
|
|
210
|
-
* @deprecated Please use the SRTPCryptoSuites const enum above.
|
|
225
|
+
* @deprecated Please use the SRTPCryptoSuites const enum above.
|
|
211
226
|
*/
|
|
212
227
|
static SRTPCryptoSuites: typeof SRTPCryptoSuites;
|
|
213
228
|
/**
|
|
214
|
-
* @deprecated Please use the H264Profile const enum above.
|
|
229
|
+
* @deprecated Please use the H264Profile const enum above.
|
|
215
230
|
*/
|
|
216
231
|
static VideoCodecParamProfileIDTypes: typeof H264Profile;
|
|
217
232
|
/**
|
|
218
|
-
* @deprecated won't be updated anymore. Please use the H264Level const enum above.
|
|
233
|
+
* @deprecated won't be updated anymore. Please use the H264Level const enum above.
|
|
219
234
|
*/
|
|
220
235
|
static VideoCodecParamLevelTypes: Readonly<{
|
|
221
236
|
TYPE3_1: number;
|
|
222
237
|
TYPE3_2: number;
|
|
223
238
|
TYPE4_0: number;
|
|
224
239
|
}>;
|
|
240
|
+
private readonly id;
|
|
225
241
|
private readonly delegate;
|
|
226
242
|
readonly service: CameraRTPStreamManagement;
|
|
243
|
+
private stateChangeDelegate?;
|
|
227
244
|
requireProxy: boolean;
|
|
228
245
|
disableAudioProxy: boolean;
|
|
229
246
|
supportedCryptoSuites: SRTPCryptoSuites[];
|
|
@@ -244,7 +261,13 @@ export declare class RTPStreamManagement {
|
|
|
244
261
|
setupEndpointsResponse: string;
|
|
245
262
|
audioProxy?: RTPProxy;
|
|
246
263
|
videoProxy?: RTPProxy;
|
|
247
|
-
|
|
264
|
+
/**
|
|
265
|
+
* A RTPStreamManagement is considered disabled if `HomeKitCameraActive` is set to false.
|
|
266
|
+
* We use a closure based approach to retrieve the value of this characteristic.
|
|
267
|
+
* The characteristic is managed by the RecordingManagement.
|
|
268
|
+
*/
|
|
269
|
+
private readonly disabledThroughOperatingMode?;
|
|
270
|
+
constructor(id: number, options: CameraStreamingOptions, delegate: CameraStreamingDelegate, service?: CameraRTPStreamManagement, disabledThroughOperatingMode?: () => boolean);
|
|
248
271
|
forceStop(): void;
|
|
249
272
|
getService(): CameraRTPStreamManagement;
|
|
250
273
|
/**
|
|
@@ -256,6 +279,7 @@ export declare class RTPStreamManagement {
|
|
|
256
279
|
private constructService;
|
|
257
280
|
private setupServiceHandlers;
|
|
258
281
|
private handleSessionClosed;
|
|
282
|
+
private streamingIsDisabled;
|
|
259
283
|
private _handleSelectedStreamConfigurationWrite;
|
|
260
284
|
private _handleStartStream;
|
|
261
285
|
private handleReconfigureStream;
|
|
@@ -269,6 +293,18 @@ export declare class RTPStreamManagement {
|
|
|
269
293
|
private _supportedAudioStreamConfiguration;
|
|
270
294
|
private resetSetupEndpointsResponse;
|
|
271
295
|
private resetSelectedStreamConfiguration;
|
|
296
|
+
/**
|
|
297
|
+
* @private
|
|
298
|
+
*/
|
|
299
|
+
serialize(): RTPStreamManagementState | undefined;
|
|
300
|
+
/**
|
|
301
|
+
* @private
|
|
302
|
+
*/
|
|
303
|
+
deserialize(serialized: RTPStreamManagementState): void;
|
|
304
|
+
/**
|
|
305
|
+
* @private
|
|
306
|
+
*/
|
|
307
|
+
setupStateChangeDelegate(delegate?: StateChangeDelegate): void;
|
|
272
308
|
}
|
|
273
309
|
/**
|
|
274
310
|
* @deprecated - only there for backwards compatibility, please use {@see RTPStreamManagement} directly
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RTPStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/lib/camera/RTPStreamManagement.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"RTPStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/lib/camera/RTPStreamManagement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.StreamController = exports.RTPStreamManagement = exports.StreamRequestTypes = exports.AudioStreamingSamplerate = exports.AudioStreamingCodecType = exports.SRTPCryptoSuites = exports.H264Level = exports.H264Profile = void 0;
|
|
3
|
+
exports.StreamController = exports.RTPStreamManagement = exports.StreamRequestTypes = exports.AudioStreamingSamplerate = exports.AudioStreamingCodecType = exports.SRTPCryptoSuites = exports.H264Level = exports.H264Profile = exports.VideoCodecType = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
5
|
+
var assert_1 = (0, tslib_1.__importDefault)(require("assert"));
|
|
6
|
+
var crypto_1 = (0, tslib_1.__importDefault)(require("crypto"));
|
|
7
|
+
var debug_1 = (0, tslib_1.__importDefault)(require("debug"));
|
|
8
|
+
var net_1 = (0, tslib_1.__importDefault)(require("net"));
|
|
8
9
|
// noinspection JSDeprecatedSymbols
|
|
9
10
|
var index_1 = require("../../index");
|
|
10
11
|
var Characteristic_1 = require("../Characteristic");
|
|
11
12
|
var controller_1 = require("../controller");
|
|
12
13
|
var Service_1 = require("../Service");
|
|
13
|
-
var tlv = tslib_1.__importStar(require("../util/tlv"));
|
|
14
|
-
var RTPProxy_1 = tslib_1.__importDefault(require("./RTPProxy"));
|
|
15
|
-
var debug = debug_1.default(
|
|
14
|
+
var tlv = (0, tslib_1.__importStar)(require("../util/tlv"));
|
|
15
|
+
var RTPProxy_1 = (0, tslib_1.__importDefault)(require("./RTPProxy"));
|
|
16
|
+
var debug = (0, debug_1.default)("HAP-NodeJS:Camera:RTPStreamManagement");
|
|
16
17
|
// ---------------------------------- TLV DEFINITIONS START ----------------------------------
|
|
17
18
|
var StreamingStatusTypes;
|
|
18
19
|
(function (StreamingStatusTypes) {
|
|
@@ -52,7 +53,9 @@ var VideoAttributesTypes;
|
|
|
52
53
|
var VideoCodecType;
|
|
53
54
|
(function (VideoCodecType) {
|
|
54
55
|
VideoCodecType[VideoCodecType["H264"] = 0] = "H264";
|
|
55
|
-
|
|
56
|
+
// while the namespace is already reserved for H265 it isn't currently supported.
|
|
57
|
+
// H265 = 0x01,
|
|
58
|
+
})(VideoCodecType = exports.VideoCodecType || (exports.VideoCodecType = {}));
|
|
56
59
|
var H264Profile;
|
|
57
60
|
(function (H264Profile) {
|
|
58
61
|
H264Profile[H264Profile["BASELINE"] = 0] = "BASELINE";
|
|
@@ -71,8 +74,8 @@ var VideoCodecPacketizationMode;
|
|
|
71
74
|
})(VideoCodecPacketizationMode || (VideoCodecPacketizationMode = {}));
|
|
72
75
|
var VideoCodecCVO;
|
|
73
76
|
(function (VideoCodecCVO) {
|
|
74
|
-
VideoCodecCVO[VideoCodecCVO["UNSUPPORTED"] =
|
|
75
|
-
VideoCodecCVO[VideoCodecCVO["SUPPORTED"] =
|
|
77
|
+
VideoCodecCVO[VideoCodecCVO["UNSUPPORTED"] = 0] = "UNSUPPORTED";
|
|
78
|
+
VideoCodecCVO[VideoCodecCVO["SUPPORTED"] = 1] = "SUPPORTED";
|
|
76
79
|
})(VideoCodecCVO || (VideoCodecCVO = {}));
|
|
77
80
|
// ----------
|
|
78
81
|
var SupportedAudioStreamConfigurationTypes;
|
|
@@ -218,6 +221,7 @@ var AudioRTPParametersTypes;
|
|
|
218
221
|
AudioRTPParametersTypes[AudioRTPParametersTypes["MIN_RTCP_INTERVAL"] = 4] = "MIN_RTCP_INTERVAL";
|
|
219
222
|
AudioRTPParametersTypes[AudioRTPParametersTypes["COMFORT_NOISE_PAYLOAD_TYPE"] = 6] = "COMFORT_NOISE_PAYLOAD_TYPE";
|
|
220
223
|
})(AudioRTPParametersTypes || (AudioRTPParametersTypes = {}));
|
|
224
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
221
225
|
function isLegacySRTPOptions(options) {
|
|
222
226
|
return "srtp" in options;
|
|
223
227
|
}
|
|
@@ -244,12 +248,13 @@ var StreamRequestTypes;
|
|
|
244
248
|
StreamRequestTypes["STOP"] = "stop";
|
|
245
249
|
})(StreamRequestTypes = exports.StreamRequestTypes || (exports.StreamRequestTypes = {}));
|
|
246
250
|
var RTPStreamManagement = /** @class */ (function () {
|
|
247
|
-
function RTPStreamManagement(id, options, delegate, service) {
|
|
251
|
+
function RTPStreamManagement(id, options, delegate, service, disabledThroughOperatingMode) {
|
|
248
252
|
this.videoOnly = false;
|
|
249
253
|
this.sessionIdentifier = undefined;
|
|
250
254
|
this.streamStatus = 0 /* AVAILABLE */; // use _updateStreamStatus to update this property
|
|
251
255
|
this.selectedConfiguration = ""; // base64 representation of the currently selected configuration
|
|
252
256
|
this.setupEndpointsResponse = ""; // response of the SetupEndpoints Characteristic
|
|
257
|
+
this.id = id;
|
|
253
258
|
this.delegate = delegate;
|
|
254
259
|
this.requireProxy = options.proxy || false;
|
|
255
260
|
this.disableAudioProxy = options.disable_audio_proxy || false;
|
|
@@ -263,7 +268,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
263
268
|
this.supportedCryptoSuites.push(2 /* NONE */);
|
|
264
269
|
}
|
|
265
270
|
if (!options.video) {
|
|
266
|
-
throw new Error(
|
|
271
|
+
throw new Error("Video parameters cannot be undefined in options");
|
|
267
272
|
}
|
|
268
273
|
this.supportedRTPConfiguration = RTPStreamManagement._supportedRTPConfiguration(this.supportedCryptoSuites);
|
|
269
274
|
this.supportedVideoStreamConfiguration = RTPStreamManagement._supportedVideoStreamConfiguration(options.video);
|
|
@@ -272,6 +277,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
272
277
|
this.setupServiceHandlers();
|
|
273
278
|
this.resetSetupEndpointsResponse();
|
|
274
279
|
this.resetSelectedStreamConfiguration();
|
|
280
|
+
this.disabledThroughOperatingMode = disabledThroughOperatingMode;
|
|
275
281
|
}
|
|
276
282
|
RTPStreamManagement.prototype.forceStop = function () {
|
|
277
283
|
this.handleSessionClosed();
|
|
@@ -283,14 +289,16 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
283
289
|
/**
|
|
284
290
|
* @deprecated
|
|
285
291
|
*/
|
|
292
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
286
293
|
RTPStreamManagement.prototype.handleCloseConnection = function (connectionID) {
|
|
287
294
|
// This method is only here for legacy compatibility. It used to be called by legacy style CameraSource
|
|
288
295
|
// implementations to signal that the associated HAP connection was closed.
|
|
289
|
-
// This is now handled automatically. Thus we don't need to do anything anymore.
|
|
296
|
+
// This is now handled automatically. Thus, we don't need to do anything anymore.
|
|
290
297
|
};
|
|
291
298
|
RTPStreamManagement.prototype.handleFactoryReset = function () {
|
|
292
299
|
this.resetSelectedStreamConfiguration();
|
|
293
300
|
this.resetSetupEndpointsResponse();
|
|
301
|
+
this.service.updateCharacteristic(Characteristic_1.Characteristic.Active, true);
|
|
294
302
|
// on a factory reset the assumption is that all connections were already terminated and thus "handleStopStream" was already called
|
|
295
303
|
};
|
|
296
304
|
RTPStreamManagement.prototype.destroy = function () {
|
|
@@ -299,24 +307,42 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
299
307
|
}
|
|
300
308
|
};
|
|
301
309
|
RTPStreamManagement.prototype.constructService = function (id) {
|
|
302
|
-
var managementService = new Service_1.Service.CameraRTPStreamManagement(
|
|
310
|
+
var managementService = new Service_1.Service.CameraRTPStreamManagement("", id.toString());
|
|
311
|
+
// this service is required only when recording is enabled. We don't really have access to this info here,
|
|
312
|
+
// so we just add the characteristic. Doesn't really hurt.
|
|
303
313
|
managementService.setCharacteristic(Characteristic_1.Characteristic.Active, true);
|
|
304
|
-
managementService.setCharacteristic(Characteristic_1.Characteristic.SupportedRTPConfiguration, this.supportedRTPConfiguration);
|
|
305
|
-
managementService.setCharacteristic(Characteristic_1.Characteristic.SupportedVideoStreamConfiguration, this.supportedVideoStreamConfiguration);
|
|
306
|
-
managementService.setCharacteristic(Characteristic_1.Characteristic.SupportedAudioStreamConfiguration, this.supportedAudioStreamConfiguration);
|
|
307
314
|
return managementService;
|
|
308
315
|
};
|
|
309
316
|
RTPStreamManagement.prototype.setupServiceHandlers = function () {
|
|
310
317
|
var _this = this;
|
|
318
|
+
if (!this.service.testCharacteristic(Characteristic_1.Characteristic.Active)) {
|
|
319
|
+
// the active characteristic might not be present on some older configurations.
|
|
320
|
+
this.service.setCharacteristic(Characteristic_1.Characteristic.Active, true);
|
|
321
|
+
}
|
|
322
|
+
this.service.getCharacteristic(Characteristic_1.Characteristic.Active)
|
|
323
|
+
.on("change" /* CHANGE */, function () { var _a; return (_a = _this.stateChangeDelegate) === null || _a === void 0 ? void 0 : _a.call(_this); })
|
|
324
|
+
.setProps({ adminOnlyAccess: [1 /* WRITE */] });
|
|
325
|
+
// ensure that configurations are up-to-date and reflected in the characteristic values
|
|
326
|
+
this.service.setCharacteristic(Characteristic_1.Characteristic.SupportedRTPConfiguration, this.supportedRTPConfiguration);
|
|
327
|
+
this.service.setCharacteristic(Characteristic_1.Characteristic.SupportedVideoStreamConfiguration, this.supportedVideoStreamConfiguration);
|
|
328
|
+
this.service.setCharacteristic(Characteristic_1.Characteristic.SupportedAudioStreamConfiguration, this.supportedAudioStreamConfiguration);
|
|
311
329
|
this._updateStreamStatus(0 /* AVAILABLE */); // reset streaming status to available
|
|
312
330
|
this.service.setCharacteristic(Characteristic_1.Characteristic.SetupEndpoints, this.setupEndpointsResponse); // reset SetupEndpoints to default
|
|
313
331
|
this.service.getCharacteristic(Characteristic_1.Characteristic.SelectedRTPStreamConfiguration)
|
|
314
332
|
.on("get" /* GET */, function (callback) {
|
|
333
|
+
if (_this.streamingIsDisabled()) {
|
|
334
|
+
callback(null, tlv.encode(1 /* SESSION_CONTROL */, tlv.encode(2 /* COMMAND */, SessionControlCommand.SUSPEND_SESSION)).toString("base64"));
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
315
337
|
callback(null, _this.selectedConfiguration);
|
|
316
338
|
})
|
|
317
339
|
.on("set" /* SET */, this._handleSelectedStreamConfigurationWrite.bind(this));
|
|
318
340
|
this.service.getCharacteristic(Characteristic_1.Characteristic.SetupEndpoints)
|
|
319
341
|
.on("get" /* GET */, function (callback) {
|
|
342
|
+
if (_this.streamingIsDisabled()) {
|
|
343
|
+
callback(null, tlv.encode(2 /* STATUS */, 2 /* ERROR */).toString("base64"));
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
320
346
|
callback(null, _this.setupEndpointsResponse);
|
|
321
347
|
})
|
|
322
348
|
.on("set" /* SET */, function (value, callback, context, connection) {
|
|
@@ -350,15 +376,32 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
350
376
|
this.audioProxy = undefined;
|
|
351
377
|
}
|
|
352
378
|
};
|
|
379
|
+
RTPStreamManagement.prototype.streamingIsDisabled = function (callback) {
|
|
380
|
+
var _a;
|
|
381
|
+
if (!this.service.getCharacteristic(Characteristic_1.Characteristic.Active).value) {
|
|
382
|
+
console.log("STREAMING DISABLED ACTIVE");
|
|
383
|
+
callback && callback(new index_1.HapStatusError(-70412 /* NOT_ALLOWED_IN_CURRENT_STATE */));
|
|
384
|
+
return true;
|
|
385
|
+
}
|
|
386
|
+
if ((_a = this.disabledThroughOperatingMode) === null || _a === void 0 ? void 0 : _a.call(this)) {
|
|
387
|
+
console.log("STREAMING DISABLED OPERATION MODE!");
|
|
388
|
+
callback && callback(new index_1.HapStatusError(-70412 /* NOT_ALLOWED_IN_CURRENT_STATE */));
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
return false;
|
|
392
|
+
};
|
|
353
393
|
RTPStreamManagement.prototype._handleSelectedStreamConfigurationWrite = function (value, callback) {
|
|
354
394
|
var _this = this;
|
|
355
|
-
|
|
395
|
+
if (this.streamingIsDisabled(callback)) {
|
|
396
|
+
return;
|
|
397
|
+
}
|
|
398
|
+
var data = Buffer.from(value, "base64");
|
|
356
399
|
var objects = tlv.decode(data);
|
|
357
400
|
var sessionControl = tlv.decode(objects[1 /* SESSION_CONTROL */]);
|
|
358
401
|
var sessionIdentifier = index_1.uuid.unparse(sessionControl[1 /* SESSION_IDENTIFIER */]);
|
|
359
402
|
var requestType = sessionControl[2 /* COMMAND */][0];
|
|
360
403
|
if (sessionIdentifier !== this.sessionIdentifier) {
|
|
361
|
-
debug("Received unknown session Identifier with request to "
|
|
404
|
+
debug("Received unknown session Identifier with request to ".concat(SessionControlCommand[requestType]));
|
|
362
405
|
callback(-70410 /* INVALID_VALUE_IN_REQUEST */);
|
|
363
406
|
return;
|
|
364
407
|
}
|
|
@@ -371,22 +414,24 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
371
414
|
}
|
|
372
415
|
};
|
|
373
416
|
switch (requestType) {
|
|
374
|
-
case SessionControlCommand.START_SESSION:
|
|
417
|
+
case SessionControlCommand.START_SESSION: {
|
|
375
418
|
var selectedVideoParameters = tlv.decode(objects[2 /* SELECTED_VIDEO_PARAMETERS */]);
|
|
376
419
|
var selectedAudioParameters = tlv.decode(objects[3 /* SELECTED_AUDIO_PARAMETERS */]);
|
|
377
420
|
this._handleStartStream(selectedVideoParameters, selectedAudioParameters, streamCallback);
|
|
378
421
|
break;
|
|
379
|
-
|
|
422
|
+
}
|
|
423
|
+
case SessionControlCommand.RECONFIGURE_SESSION: {
|
|
380
424
|
var reconfiguredVideoParameters = tlv.decode(objects[2 /* SELECTED_VIDEO_PARAMETERS */]);
|
|
381
425
|
this.handleReconfigureStream(reconfiguredVideoParameters, streamCallback);
|
|
382
426
|
break;
|
|
427
|
+
}
|
|
383
428
|
case SessionControlCommand.END_SESSION:
|
|
384
429
|
this._handleStopStream(streamCallback);
|
|
385
430
|
break;
|
|
386
431
|
case SessionControlCommand.RESUME_SESSION:
|
|
387
432
|
case SessionControlCommand.SUSPEND_SESSION:
|
|
388
433
|
default:
|
|
389
|
-
debug("Unhandled request type "
|
|
434
|
+
debug("Unhandled request type ".concat(SessionControlCommand[requestType]));
|
|
390
435
|
callback(-70410 /* INVALID_VALUE_IN_REQUEST */);
|
|
391
436
|
return;
|
|
392
437
|
}
|
|
@@ -405,7 +450,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
405
450
|
var packetizationMode = videoParameters[3 /* PACKETIZATION_MODE */][0];
|
|
406
451
|
var cvoEnabled = videoParameters[4 /* CVO_ENABLED */];
|
|
407
452
|
var cvoId = undefined;
|
|
408
|
-
if (cvoEnabled && cvoEnabled[0] ===
|
|
453
|
+
if (cvoEnabled && cvoEnabled[0] === 1 /* SUPPORTED */) {
|
|
409
454
|
cvoId = videoParameters[5 /* CVO_ID */].readUInt8(0);
|
|
410
455
|
}
|
|
411
456
|
// video attributes
|
|
@@ -448,6 +493,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
448
493
|
}
|
|
449
494
|
}
|
|
450
495
|
var videoInfo = {
|
|
496
|
+
codec: videoCodec.readUInt8(0),
|
|
451
497
|
profile: h264Profile,
|
|
452
498
|
level: h264Level,
|
|
453
499
|
packetizationMode: packetizationMode,
|
|
@@ -486,7 +532,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
486
532
|
audioCodecName = "AMR-WB" /* AMR_WB */;
|
|
487
533
|
break;
|
|
488
534
|
default:
|
|
489
|
-
throw new Error("Encountered unknown selected audio codec "
|
|
535
|
+
throw new Error("Encountered unknown selected audio codec ".concat(audioCodec));
|
|
490
536
|
}
|
|
491
537
|
switch (samplerate) {
|
|
492
538
|
case 0 /* KHZ_8 */:
|
|
@@ -499,7 +545,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
499
545
|
samplerateNum = 24;
|
|
500
546
|
break;
|
|
501
547
|
default:
|
|
502
|
-
throw new Error("Encountered unknown selected audio samplerate "
|
|
548
|
+
throw new Error("Encountered unknown selected audio samplerate ".concat(samplerate));
|
|
503
549
|
}
|
|
504
550
|
var audioInfo = {
|
|
505
551
|
codec: audioCodecName,
|
|
@@ -534,7 +580,8 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
534
580
|
// video rtp parameters
|
|
535
581
|
var videoRTPParameters = tlv.decode(videoRTPParametersTLV);
|
|
536
582
|
var videoMaximumBitrate = videoRTPParameters[3 /* MAX_BIT_RATE */].readUInt16LE(0);
|
|
537
|
-
|
|
583
|
+
// seems to be always zero, use default of 0.5
|
|
584
|
+
var videoRTCPInterval = videoRTPParameters[4 /* MIN_RTCP_INTERVAL */].readFloatLE(0) || 0.5;
|
|
538
585
|
var reconfiguredVideoInfo = {
|
|
539
586
|
width: width,
|
|
540
587
|
height: height,
|
|
@@ -559,7 +606,10 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
559
606
|
};
|
|
560
607
|
RTPStreamManagement.prototype.handleSetupEndpoints = function (value, callback, connection) {
|
|
561
608
|
var _this = this;
|
|
562
|
-
|
|
609
|
+
if (this.streamingIsDisabled(callback)) {
|
|
610
|
+
return;
|
|
611
|
+
}
|
|
612
|
+
var data = Buffer.from(value, "base64");
|
|
563
613
|
var objects = tlv.decode(data);
|
|
564
614
|
var sessionIdentifier = index_1.uuid.unparse(objects[1 /* SESSION_ID */]);
|
|
565
615
|
if (this.streamStatus !== 0 /* AVAILABLE */) {
|
|
@@ -577,7 +627,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
577
627
|
var targetAddressPayload = objects[3 /* CONTROLLER_ADDRESS */];
|
|
578
628
|
var processedAddressInfo = tlv.decode(targetAddressPayload);
|
|
579
629
|
var addressVersion = processedAddressInfo[1 /* ADDRESS_VERSION */][0];
|
|
580
|
-
var controllerAddress = processedAddressInfo[2 /* ADDRESS */].toString(
|
|
630
|
+
var controllerAddress = processedAddressInfo[2 /* ADDRESS */].toString("utf8");
|
|
581
631
|
var targetVideoPort = processedAddressInfo[3 /* VIDEO_RTP_PORT */].readUInt16LE(0);
|
|
582
632
|
var targetAudioPort = processedAddressInfo[4 /* AUDIO_RTP_PORT */].readUInt16LE(0);
|
|
583
633
|
// Video SRTP Params
|
|
@@ -592,7 +642,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
592
642
|
var audioCryptoSuite = processedAudioInfo[1 /* SRTP_CRYPTO_SUITE */][0];
|
|
593
643
|
var audioMasterKey = processedAudioInfo[2 /* MASTER_KEY */];
|
|
594
644
|
var audioMasterSalt = processedAudioInfo[3 /* MASTER_SALT */];
|
|
595
|
-
debug(
|
|
645
|
+
debug("Session: ", sessionIdentifier, "\nControllerAddress: ", controllerAddress, "\nVideoPort: ", targetVideoPort, "\nAudioPort: ", targetAudioPort, "\nVideo Crypto: ", videoCryptoSuite, "\nVideo Master Key: ", videoMasterKey, "\nVideo Master Salt: ", videoMasterSalt, "\nAudio Crypto: ", audioCryptoSuite, "\nAudio Master Key: ", audioMasterKey, "\nAudio Master Salt: ", audioMasterSalt);
|
|
596
646
|
var prepareRequest = {
|
|
597
647
|
sessionID: sessionIdentifier,
|
|
598
648
|
targetAddress: controllerAddress,
|
|
@@ -617,7 +667,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
617
667
|
outgoingAddress: controllerAddress,
|
|
618
668
|
outgoingPort: targetVideoPort,
|
|
619
669
|
outgoingSSRC: crypto_1.default.randomBytes(4).readUInt32LE(0),
|
|
620
|
-
disabled: false
|
|
670
|
+
disabled: false,
|
|
621
671
|
});
|
|
622
672
|
promises.push(this.videoProxy.setup().then(function () {
|
|
623
673
|
prepareRequest.video.proxy_rtp = _this.videoProxy.incomingRTPPort();
|
|
@@ -628,7 +678,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
628
678
|
outgoingAddress: controllerAddress,
|
|
629
679
|
outgoingPort: targetAudioPort,
|
|
630
680
|
outgoingSSRC: crypto_1.default.randomBytes(4).readUInt32LE(0),
|
|
631
|
-
disabled: this.videoOnly
|
|
681
|
+
disabled: this.videoOnly,
|
|
632
682
|
});
|
|
633
683
|
promises.push(this.audioProxy.setup().then(function () {
|
|
634
684
|
prepareRequest.audio.proxy_rtp = _this.audioProxy.incomingRTPPort();
|
|
@@ -637,9 +687,9 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
637
687
|
}
|
|
638
688
|
}
|
|
639
689
|
Promise.all(promises).then(function () {
|
|
640
|
-
_this.delegate.prepareStream(prepareRequest, index_1.once(function (error, response) {
|
|
690
|
+
_this.delegate.prepareStream(prepareRequest, (0, index_1.once)(function (error, response) {
|
|
641
691
|
if (error || !response) {
|
|
642
|
-
debug("PrepareStream request encountered an error: "
|
|
692
|
+
debug("PrepareStream request encountered an error: ".concat(error ? error.message : undefined));
|
|
643
693
|
_this.setupEndpointsResponse = tlv.encode(1 /* SESSION_ID */, index_1.uuid.write(sessionIdentifier), 2 /* STATUS */, 2 /* ERROR */).toString("base64");
|
|
644
694
|
_this.handleSessionClosed();
|
|
645
695
|
callback(error);
|
|
@@ -684,7 +734,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
684
734
|
address = connection.getLocalAddress(addressVersion);
|
|
685
735
|
}
|
|
686
736
|
if (request.addressVersion !== addressVersion) {
|
|
687
|
-
throw new Error("Incoming and outgoing ip address versions must match! Expected "
|
|
737
|
+
throw new Error("Incoming and outgoing ip address versions must match! Expected ".concat(request.addressVersion, " but got ").concat(addressVersion));
|
|
688
738
|
}
|
|
689
739
|
videoPort = videoInfo.port;
|
|
690
740
|
audioPort = audioInfo.port;
|
|
@@ -744,7 +794,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
744
794
|
};
|
|
745
795
|
RTPStreamManagement.prototype._updateStreamStatus = function (status) {
|
|
746
796
|
this.streamStatus = status;
|
|
747
|
-
this.service.updateCharacteristic(Characteristic_1.Characteristic.StreamingStatus, tlv.encode(1 /* STATUS */, this.streamStatus).toString(
|
|
797
|
+
this.service.updateCharacteristic(Characteristic_1.Characteristic.StreamingStatus, tlv.encode(1 /* STATUS */, this.streamStatus).toString("base64"));
|
|
748
798
|
};
|
|
749
799
|
RTPStreamManagement._supportedRTPConfiguration = function (supportedCryptoSuites) {
|
|
750
800
|
if (supportedCryptoSuites.length === 1 && supportedCryptoSuites[0] === 2 /* NONE */) {
|
|
@@ -754,21 +804,21 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
754
804
|
};
|
|
755
805
|
RTPStreamManagement._supportedVideoStreamConfiguration = function (videoOptions) {
|
|
756
806
|
if (!videoOptions.codec) {
|
|
757
|
-
throw new Error(
|
|
807
|
+
throw new Error("Video codec cannot be undefined");
|
|
758
808
|
}
|
|
759
809
|
if (!videoOptions.resolutions) {
|
|
760
|
-
throw new Error(
|
|
810
|
+
throw new Error("Video resolutions cannot be undefined");
|
|
761
811
|
}
|
|
762
812
|
var codecParameters = tlv.encode(1 /* PROFILE_ID */, videoOptions.codec.profiles, 2 /* LEVEL */, videoOptions.codec.levels, 3 /* PACKETIZATION_MODE */, 0 /* NON_INTERLEAVED */);
|
|
763
|
-
if (videoOptions.cvoId !=
|
|
813
|
+
if (videoOptions.cvoId != null) {
|
|
764
814
|
codecParameters = Buffer.concat([
|
|
765
815
|
codecParameters,
|
|
766
|
-
tlv.encode(4 /* CVO_ENABLED */,
|
|
816
|
+
tlv.encode(4 /* CVO_ENABLED */, 1 /* SUPPORTED */, 5 /* CVO_ID */, videoOptions.cvoId),
|
|
767
817
|
]);
|
|
768
818
|
}
|
|
769
819
|
var videoStreamConfiguration = tlv.encode(1 /* CODEC_TYPE */, 0 /* H264 */, 2 /* CODEC_PARAMETERS */, codecParameters, 3 /* ATTRIBUTES */, videoOptions.resolutions.map(function (resolution) {
|
|
770
|
-
if (resolution.length
|
|
771
|
-
throw new Error(
|
|
820
|
+
if (resolution.length !== 3) {
|
|
821
|
+
throw new Error("Unexpected video resolution");
|
|
772
822
|
}
|
|
773
823
|
var width = Buffer.alloc(2);
|
|
774
824
|
var height = Buffer.alloc(2);
|
|
@@ -778,7 +828,7 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
778
828
|
frameRate.writeUInt8(resolution[2], 0);
|
|
779
829
|
return tlv.encode(1 /* IMAGE_WIDTH */, width, 2 /* IMAGE_HEIGHT */, height, 3 /* FRAME_RATE */, frameRate);
|
|
780
830
|
}));
|
|
781
|
-
return tlv.encode(1 /* VIDEO_CODEC_CONFIGURATION */, videoStreamConfiguration).toString(
|
|
831
|
+
return tlv.encode(1 /* VIDEO_CODEC_CONFIGURATION */, videoStreamConfiguration).toString("base64");
|
|
782
832
|
};
|
|
783
833
|
RTPStreamManagement.prototype.checkForLegacyAudioCodecRepresentation = function (codecs) {
|
|
784
834
|
var codecMap = {};
|
|
@@ -875,19 +925,44 @@ var RTPStreamManagement = /** @class */ (function () {
|
|
|
875
925
|
this.service.updateCharacteristic(Characteristic_1.Characteristic.SelectedRTPStreamConfiguration, this.selectedConfiguration);
|
|
876
926
|
};
|
|
877
927
|
/**
|
|
878
|
-
* @
|
|
928
|
+
* @private
|
|
929
|
+
*/
|
|
930
|
+
RTPStreamManagement.prototype.serialize = function () {
|
|
931
|
+
var characteristicValue = this.service.getCharacteristic(Characteristic_1.Characteristic.Active).value;
|
|
932
|
+
if (characteristicValue === true) {
|
|
933
|
+
return undefined;
|
|
934
|
+
}
|
|
935
|
+
return {
|
|
936
|
+
id: this.id,
|
|
937
|
+
active: !!characteristicValue,
|
|
938
|
+
};
|
|
939
|
+
};
|
|
940
|
+
/**
|
|
941
|
+
* @private
|
|
942
|
+
*/
|
|
943
|
+
RTPStreamManagement.prototype.deserialize = function (serialized) {
|
|
944
|
+
(0, assert_1.default)(serialized.id === this.id, "Tried to initialize RTPStreamManagement ".concat(this.id, " with data from management with id ").concat(serialized.id, "!"));
|
|
945
|
+
this.service.updateCharacteristic(Characteristic_1.Characteristic.Active, serialized.active);
|
|
946
|
+
};
|
|
947
|
+
/**
|
|
948
|
+
* @private
|
|
949
|
+
*/
|
|
950
|
+
RTPStreamManagement.prototype.setupStateChangeDelegate = function (delegate) {
|
|
951
|
+
this.stateChangeDelegate = delegate;
|
|
952
|
+
};
|
|
953
|
+
/**
|
|
954
|
+
* @deprecated Please use the SRTPCryptoSuites const enum above.
|
|
879
955
|
*/
|
|
880
|
-
// @ts-
|
|
956
|
+
// @ts-expect-error: forceConsistentCasingInFileNames compiler option
|
|
881
957
|
RTPStreamManagement.SRTPCryptoSuites = SRTPCryptoSuites;
|
|
882
958
|
/**
|
|
883
|
-
* @deprecated Please use the H264Profile const enum above.
|
|
959
|
+
* @deprecated Please use the H264Profile const enum above.
|
|
884
960
|
*/
|
|
885
|
-
// @ts-
|
|
961
|
+
// @ts-expect-error: forceConsistentCasingInFileNames compiler option
|
|
886
962
|
RTPStreamManagement.VideoCodecParamProfileIDTypes = H264Profile;
|
|
887
963
|
/**
|
|
888
|
-
* @deprecated won't be updated anymore. Please use the H264Level const enum above.
|
|
964
|
+
* @deprecated won't be updated anymore. Please use the H264Level const enum above.
|
|
889
965
|
*/
|
|
890
|
-
// @ts-ignore
|
|
891
966
|
RTPStreamManagement.VideoCodecParamLevelTypes = Object.freeze({ TYPE3_1: 0, TYPE3_2: 1, TYPE4_0: 2 });
|
|
892
967
|
return RTPStreamManagement;
|
|
893
968
|
}());
|
|
@@ -896,7 +971,7 @@ exports.RTPStreamManagement = RTPStreamManagement;
|
|
|
896
971
|
* @deprecated - only there for backwards compatibility, please use {@see RTPStreamManagement} directly
|
|
897
972
|
*/
|
|
898
973
|
var StreamController = /** @class */ (function (_super) {
|
|
899
|
-
tslib_1.__extends(StreamController, _super);
|
|
974
|
+
(0, tslib_1.__extends)(StreamController, _super);
|
|
900
975
|
// noinspection JSDeprecatedSymbols
|
|
901
976
|
function StreamController(id, options, delegate, service) {
|
|
902
977
|
var _this = _super.call(this, id, options, new index_1.LegacyCameraSourceAdapter(delegate), service) || this;
|