UNPKG

hap-nodejs

Version:

HAP-NodeJS is a Node.js implementation of HomeKit Accessory Server.

378 lines 9.28 kB
import { CameraStreamingDelegate, ResourceRequestReason, StateChangeDelegate } from "../controller"; import type { CameraRTPStreamManagement } from "../definitions"; import RTPProxy from "./RTPProxy"; declare const enum StreamingStatus { AVAILABLE = 0, IN_USE = 1,// Session is marked IN_USE after the first setup request UNAVAILABLE = 2 } /** * @group Camera */ export declare const enum VideoCodecType { H264 = 0 } /** * @group Camera */ export declare const enum H264Profile { BASELINE = 0, MAIN = 1, HIGH = 2 } /** * @group Camera */ export declare const enum H264Level { LEVEL3_1 = 0, LEVEL3_2 = 1, LEVEL4_0 = 2 } /** * @group Camera */ export declare const enum VideoCodecPacketizationMode { NON_INTERLEAVED = 0 } /** * @group Camera */ export declare const enum AudioBitrate { VARIABLE = 0, CONSTANT = 1 } /** * @group Camera */ export declare const enum AudioSamplerate { KHZ_8 = 0, KHZ_16 = 1, KHZ_24 = 2 } /** * @group Camera */ export declare const enum SRTPCryptoSuites { AES_CM_128_HMAC_SHA1_80 = 0, AES_CM_256_HMAC_SHA1_80 = 1, NONE = 2 } /** * @group Camera */ export type CameraStreamingOptions = CameraStreamingOptionsBase & (CameraStreamingOptionsLegacySRTP | CameraStreamingOptionsSupportedCryptoSuites); /** * @group Camera */ export interface CameraStreamingOptionsBase { proxy?: boolean; disable_audio_proxy?: boolean; video: VideoStreamingOptions; /** * "audio" is optional and only needs to be declared if audio streaming is supported. * If defined the Microphone service will be added and Microphone volume control will be made available. * If not defined hap-nodejs will expose a default codec in order for the video stream to work */ audio?: AudioStreamingOptions; } /** * @group Camera */ export interface CameraStreamingOptionsLegacySRTP { srtp: boolean; } /** * @group Camera */ export interface CameraStreamingOptionsSupportedCryptoSuites { supportedCryptoSuites: SRTPCryptoSuites[]; } /** * @group Camera */ export type VideoStreamingOptions = { codec: H264CodecParameters; resolutions: Resolution[]; cvoId?: number; }; /** * @group Camera */ export interface H264CodecParameters { levels: H264Level[]; profiles: H264Profile[]; } /** * @group Camera */ export type Resolution = [number, number, number]; /** * @group Camera */ export type AudioStreamingOptions = { codecs: AudioStreamingCodec[]; twoWayAudio?: boolean; comfort_noise?: boolean; }; /** * @group Camera */ export type AudioStreamingCodec = { type: AudioStreamingCodecType | string; audioChannels?: number; bitrate?: AudioBitrate; samplerate: AudioStreamingSamplerate[] | AudioStreamingSamplerate; }; /** * @group Camera */ export declare const enum AudioStreamingCodecType { PCMU = "PCMU", PCMA = "PCMA", AAC_ELD = "AAC-eld", OPUS = "OPUS", MSBC = "mSBC", AMR = "AMR", AMR_WB = "AMR-WB" } /** * @group Camera */ export declare const enum AudioStreamingSamplerate { KHZ_8 = 8, KHZ_16 = 16, KHZ_24 = 24 } /** * @group Camera */ export type StreamSessionIdentifier = string; /** * @group Camera */ export type SnapshotRequest = { height: number; width: number; /** * An optional {@link ResourceRequestReason}. The client decides if it wants to send this value. It is typically * only sent in the context of HomeKit Secure Video Cameras. * This value might be used by a `CameraStreamingDelegate` for informational purposes. * When `handleSnapshotRequest` is called, it is already checked if the respective reason is allowed in the current camera configuration. */ reason?: ResourceRequestReason; }; /** * @group Camera */ export type PrepareStreamRequest = { sessionID: StreamSessionIdentifier; sourceAddress: string; targetAddress: string; addressVersion: "ipv4" | "ipv6"; audio: Source; video: Source; }; /** * @group Camera */ export type Source = { port: number; srtpCryptoSuite: SRTPCryptoSuites; srtp_key: Buffer; srtp_salt: Buffer; proxy_rtp?: number; proxy_rtcp?: number; }; /** * @group Camera */ export type PrepareStreamResponse = { /** * Any value set to this optional property will overwrite the automatically determined local address, * which is sent as RTP endpoint to the iOS device. */ addressOverride?: string; video: SourceResponse | ProxiedSourceResponse; audio?: SourceResponse | ProxiedSourceResponse; }; /** * @group Camera */ export interface SourceResponse { port: number; ssrc: number; srtp_key?: Buffer; srtp_salt?: Buffer; } /** * @group Camera */ export interface ProxiedSourceResponse { proxy_pt: number; proxy_server_address: string; proxy_server_rtp: number; proxy_server_rtcp: number; } /** * @group Camera */ export declare const enum StreamRequestTypes { RECONFIGURE = "reconfigure", START = "start", STOP = "stop" } /** * @group Camera */ export type StreamingRequest = StartStreamRequest | ReconfigureStreamRequest | StopStreamRequest; /** * @group Camera */ export type StartStreamRequest = { sessionID: StreamSessionIdentifier; type: StreamRequestTypes.START; video: VideoInfo; audio: AudioInfo; }; /** * @group Camera */ export type ReconfigureStreamRequest = { sessionID: StreamSessionIdentifier; type: StreamRequestTypes.RECONFIGURE; video: ReconfiguredVideoInfo; }; /** * @group Camera */ export type StopStreamRequest = { sessionID: StreamSessionIdentifier; type: StreamRequestTypes.STOP; }; /** * @group Camera */ export type AudioInfo = { codec: AudioStreamingCodecType; channel: number; bit_rate: number; sample_rate: AudioStreamingSamplerate; packet_time: number; pt: number; ssrc: number; max_bit_rate: number; rtcp_interval: number; comfort_pt: number; comfortNoiseEnabled: boolean; }; /** * @group Camera */ export type VideoInfo = { codec: VideoCodecType; profile: H264Profile; level: H264Level; packetizationMode: VideoCodecPacketizationMode; cvoId?: number; width: number; height: number; fps: number; pt: number; ssrc: number; max_bit_rate: number; rtcp_interval: number; mtu: number; }; /** * @group Camera */ export type ReconfiguredVideoInfo = { width: number; height: number; fps: number; max_bit_rate: number; rtcp_interval: number; }; /** * @group Camera */ export interface RTPStreamManagementState { id: number; active: boolean; } /** * @group Camera */ export declare class RTPStreamManagement { private readonly id; private readonly delegate; readonly service: CameraRTPStreamManagement; private stateChangeDelegate?; requireProxy: boolean; disableAudioProxy: boolean; supportedCryptoSuites: SRTPCryptoSuites[]; videoOnly: boolean; readonly supportedRTPConfiguration: string; readonly supportedVideoStreamConfiguration: string; readonly supportedAudioStreamConfiguration: string; private activeConnection?; private readonly activeConnectionClosedListener; sessionIdentifier?: StreamSessionIdentifier; /** * @private private API */ streamStatus: StreamingStatus; private ipVersion?; selectedConfiguration: string; setupEndpointsResponse: string; /** * @private deprecated API */ audioProxy?: RTPProxy; /** * @private deprecated API */ videoProxy?: RTPProxy; /** * A RTPStreamManagement is considered disabled if `HomeKitCameraActive` is set to false. * We use a closure based approach to retrieve the value of this characteristic. * The characteristic is managed by the RecordingManagement. */ private readonly disabledThroughOperatingMode?; constructor(id: number, options: CameraStreamingOptions, delegate: CameraStreamingDelegate, service?: CameraRTPStreamManagement, disabledThroughOperatingMode?: () => boolean); forceStop(): void; getService(): CameraRTPStreamManagement; handleFactoryReset(): void; destroy(): void; private constructService; private setupServiceHandlers; private handleSessionClosed; private streamingIsDisabled; private _handleSelectedStreamConfigurationWrite; private _handleStartStream; private handleReconfigureStream; private _handleStopStream; private handleSetupEndpoints; private generateSetupEndpointResponse; private _updateStreamStatus; private static _supportedRTPConfiguration; private static _supportedVideoStreamConfiguration; private checkForLegacyAudioCodecRepresentation; private _supportedAudioStreamConfiguration; private resetSetupEndpointsResponse; private resetSelectedStreamConfiguration; /** * @private */ serialize(): RTPStreamManagementState | undefined; /** * @private */ deserialize(serialized: RTPStreamManagementState): void; /** * @private */ setupStateChangeDelegate(delegate?: StateChangeDelegate): void; } export {}; //# sourceMappingURL=RTPStreamManagement.d.ts.map