@camera.ui/camera-ui-homekit 0.0.7 → 0.0.9

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.
Files changed (41) hide show
  1. package/dist/camera/accessory.d.ts +2 -2
  2. package/dist/camera/accessory.js +6 -1
  3. package/dist/camera/accessory.js.map +1 -1
  4. package/dist/camera/recordingDelegate.js +2 -2
  5. package/dist/camera/recordingDelegate.js.map +1 -1
  6. package/dist/camera/sessionWrapper.d.ts +7 -3
  7. package/dist/camera/sessionWrapper.js +158 -108
  8. package/dist/camera/sessionWrapper.js.map +1 -1
  9. package/dist/camera/streamingDelegate.js +3 -2
  10. package/dist/camera/streamingDelegate.js.map +1 -1
  11. package/dist/utils/ffmpeg-process.d.ts +23 -0
  12. package/dist/utils/ffmpeg-process.js +72 -0
  13. package/dist/utils/ffmpeg-process.js.map +1 -0
  14. package/dist/utils/ffmpeg.d.ts +2 -11
  15. package/dist/utils/ffmpeg.js +9 -58
  16. package/dist/utils/ffmpeg.js.map +1 -1
  17. package/dist/utils/mp4.d.ts +10 -0
  18. package/dist/utils/mp4.js +53 -0
  19. package/dist/utils/mp4.js.map +1 -0
  20. package/dist/utils/opus-repacketizer.d.ts +1 -1
  21. package/dist/utils/opus-repacketizer.js.map +1 -1
  22. package/dist/utils/ports.d.ts +7 -0
  23. package/dist/utils/ports.js +43 -0
  24. package/dist/utils/ports.js.map +1 -0
  25. package/dist/utils/return-audio-transcoder.d.ts +40 -0
  26. package/dist/utils/return-audio-transcoder.js +84 -0
  27. package/dist/utils/return-audio-transcoder.js.map +1 -0
  28. package/dist/utils/rtp-splitter.d.ts +33 -0
  29. package/dist/utils/rtp-splitter.js +71 -0
  30. package/dist/utils/rtp-splitter.js.map +1 -0
  31. package/dist/utils/rtp.d.ts +3 -0
  32. package/dist/utils/rtp.js +16 -0
  33. package/dist/utils/rtp.js.map +1 -0
  34. package/dist/utils/srtp.d.ts +8 -0
  35. package/dist/utils/srtp.js +22 -0
  36. package/dist/utils/srtp.js.map +1 -0
  37. package/dist/utils/utils.d.ts +2 -1
  38. package/dist/utils/utils.js +24 -10
  39. package/dist/utils/utils.js.map +1 -1
  40. package/package.json +8 -10
  41. package/scripts/install-optional-deps.js +17 -0
@@ -1 +1 @@
1
- {"version":3,"file":"streamingDelegate.js","sourceRoot":"","sources":["../../src/camera/streamingDelegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"streamingDelegate.js","sourceRoot":"","sources":["../../src/camera/streamingDelegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface FfmpegProcessOptions {
2
+ ffmpegPath: string;
3
+ ffmpegArgs: (string | number)[];
4
+ logger?: {
5
+ error: (log: string) => unknown;
6
+ info: (log: string) => unknown;
7
+ };
8
+ logLabel?: string;
9
+ exitCallback?: (code: number | null, signal: string | null) => unknown;
10
+ stdoutCallback?: (data: any) => unknown;
11
+ startedCallback?: () => unknown;
12
+ }
13
+ export declare class FfmpegProcess {
14
+ readonly options: FfmpegProcessOptions;
15
+ private ff;
16
+ private processSubscription;
17
+ private started;
18
+ private stopped;
19
+ private exited;
20
+ constructor(options: FfmpegProcessOptions);
21
+ stop(): void;
22
+ writeStdin(input: string): void;
23
+ }
@@ -0,0 +1,72 @@
1
+ import { spawn } from 'child_process';
2
+ import { Subject } from 'rxjs';
3
+ const noop = () => null;
4
+ const onGlobalProcessStopped = new Subject();
5
+ // register a single event listener, rather than listener per ffmpeg process
6
+ // this helps avoid a warning for hitting too many listeners
7
+ process.on('exit', () => onGlobalProcessStopped.next(null));
8
+ export class FfmpegProcess {
9
+ options;
10
+ ff;
11
+ processSubscription = onGlobalProcessStopped.subscribe(() => this.stop());
12
+ started = false;
13
+ stopped = false;
14
+ exited = false;
15
+ constructor(options) {
16
+ this.options = options;
17
+ this.ff = spawn(options.ffmpegPath, options.ffmpegArgs.map((x) => x.toString()));
18
+ const { logger, logLabel } = options;
19
+ const logError = logger?.error || noop;
20
+ const logInfo = logger?.info || noop;
21
+ const logPrefix = logLabel ? `${logLabel}: ` : '';
22
+ if (options.stdoutCallback) {
23
+ const { stdoutCallback } = options;
24
+ this.ff.stdout.on('data', (data) => {
25
+ stdoutCallback(data);
26
+ });
27
+ }
28
+ this.ff.stderr.on('data', (data) => {
29
+ if (!this.started) {
30
+ this.started = true;
31
+ options.startedCallback?.();
32
+ }
33
+ logInfo(logPrefix + data);
34
+ });
35
+ this.ff.stdin.on('error', (error) => {
36
+ if (!error.message.includes('EPIPE')) {
37
+ logError(logPrefix + error.message);
38
+ }
39
+ });
40
+ this.ff.on('exit', (code, signal) => {
41
+ this.exited = true;
42
+ this.options.exitCallback?.(code, signal);
43
+ if (!code || code === 255) {
44
+ logInfo(logPrefix + 'stopped gracefully');
45
+ }
46
+ else {
47
+ logError(logPrefix + `exited with code ${code} and signal ${signal}`);
48
+ }
49
+ this.stop();
50
+ });
51
+ }
52
+ stop() {
53
+ if (this.stopped) {
54
+ return;
55
+ }
56
+ this.stopped = true;
57
+ this.processSubscription.unsubscribe();
58
+ this.ff.stderr.pause();
59
+ this.ff.stdout.pause();
60
+ if (!this.exited) {
61
+ this.ff.kill();
62
+ }
63
+ }
64
+ writeStdin(input) {
65
+ if (this.stopped) {
66
+ return;
67
+ }
68
+ this.ff.stdin.write(input);
69
+ this.ff.stdin.end();
70
+ }
71
+ }
72
+ //# sourceMappingURL=ffmpeg-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg-process.js","sourceRoot":"","sources":["../../src/utils/ffmpeg-process.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,2 @@
1
- export declare const NAL_TYPE_STAP_A = 24;
2
- export declare const NAL_TYPE_FU_A = 28;
3
- export declare const NAL_TYPE_NON_IDR = 1;
4
- export declare const NAL_TYPE_IDR = 5;
5
- export declare const NAL_TYPE_SEI = 6;
6
- export declare const NAL_TYPE_SPS = 7;
7
- export declare const NAL_TYPE_PPS = 8;
8
- export declare const NAL_TYPE_DELIMITER = 9;
9
- export declare const allowedNaluTypes: number[];
10
- export declare function timeoutPromise<T>(timeout: number, promise: Promise<T>): Promise<T>;
11
- export declare function checkMp4StartsWithKeyFrame(mp4: Buffer, ffmpegPath: string): Promise<boolean>;
1
+ export declare function doesFfmpegSupportCodec(codec: string, ffmpegPath: string): Promise<boolean>;
2
+ export declare function isFfmpegInstalled(ffmpegPath: string): Promise<boolean>;
@@ -1,63 +1,14 @@
1
- import { spawn } from 'node:child_process';
2
- // https://yumichan.net/video-processing/video-compression/introduction-to-h264-nal-unit/
3
- export const NAL_TYPE_STAP_A = 24;
4
- export const NAL_TYPE_FU_A = 28;
5
- export const NAL_TYPE_NON_IDR = 1;
6
- export const NAL_TYPE_IDR = 5;
7
- export const NAL_TYPE_SEI = 6;
8
- export const NAL_TYPE_SPS = 7;
9
- export const NAL_TYPE_PPS = 8;
10
- export const NAL_TYPE_DELIMITER = 9;
11
- export const allowedNaluTypes = [NAL_TYPE_STAP_A, NAL_TYPE_SPS, NAL_TYPE_PPS, NAL_TYPE_SEI, NAL_TYPE_DELIMITER];
12
- export function timeoutPromise(timeout, promise) {
13
- return new Promise((resolve, reject) => {
14
- const t = setTimeout(() => reject(new Error('Operation timed out')), timeout);
15
- promise
16
- .then((v) => {
17
- clearTimeout(t);
18
- resolve(v);
19
- })
20
- .catch((e) => {
21
- clearTimeout(t);
22
- reject(e);
23
- });
24
- });
1
+ import { exec } from 'child_process';
2
+ import { promisify } from 'util';
3
+ const execAwait = promisify(exec);
4
+ export async function doesFfmpegSupportCodec(codec, ffmpegPath) {
5
+ const output = await execAwait(`${ffmpegPath} -codecs`);
6
+ return output.stdout.includes(codec);
25
7
  }
26
- export async function checkMp4StartsWithKeyFrame(mp4, ffmpegPath) {
27
- const cp = spawn(ffmpegPath, ['-hide_banner', '-f', 'mp4', '-i', 'pipe:3', '-vcodec', 'copy', '-f', 'h264', 'pipe:4'], {
28
- stdio: ['pipe', 'pipe', 'pipe', 'pipe', 'pipe'],
29
- });
30
- const input = cp.stdio[3];
31
- const output = cp.stdio[4];
32
- const buffers = [];
33
- input.write(mp4);
34
- input.end();
35
- output.on('data', (data) => buffers.push(data));
8
+ export async function isFfmpegInstalled(ffmpegPath) {
36
9
  try {
37
- await timeoutPromise(1000, new Promise((resolve) => cp.on('exit', resolve)));
38
- const h264 = Buffer.concat(buffers);
39
- let offset = 0;
40
- while (offset < h264.length - 6) {
41
- if (h264.readInt32BE(offset) !== 1) {
42
- offset++;
43
- continue;
44
- }
45
- offset += 4;
46
- let naluType = h264.readUInt8(offset) & 0x1f;
47
- if (naluType === NAL_TYPE_FU_A) {
48
- offset++;
49
- naluType = h264.readUInt8(offset) & 0x1f;
50
- }
51
- if (naluType === NAL_TYPE_IDR) {
52
- return true;
53
- }
54
- if (allowedNaluTypes.includes(naluType)) {
55
- offset++;
56
- continue;
57
- }
58
- return false;
59
- }
60
- return false;
10
+ await execAwait(`${ffmpegPath} -codecs`);
11
+ return true;
61
12
  }
62
13
  catch {
63
14
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../../src/utils/ffmpeg.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAa,EAAE,UAAkB;IAC5E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare const NAL_TYPE_STAP_A = 24;
2
+ export declare const NAL_TYPE_FU_A = 28;
3
+ export declare const NAL_TYPE_NON_IDR = 1;
4
+ export declare const NAL_TYPE_IDR = 5;
5
+ export declare const NAL_TYPE_SEI = 6;
6
+ export declare const NAL_TYPE_SPS = 7;
7
+ export declare const NAL_TYPE_PPS = 8;
8
+ export declare const NAL_TYPE_DELIMITER = 9;
9
+ export declare const allowedNaluTypes: number[];
10
+ export declare function checkMp4StartsWithKeyFrame(mp4: Buffer, ffmpegPath: string): Promise<boolean>;
@@ -0,0 +1,53 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { timeoutPromise } from './utils.js';
3
+ // https://yumichan.net/video-processing/video-compression/introduction-to-h264-nal-unit/
4
+ export const NAL_TYPE_STAP_A = 24;
5
+ export const NAL_TYPE_FU_A = 28;
6
+ export const NAL_TYPE_NON_IDR = 1;
7
+ export const NAL_TYPE_IDR = 5;
8
+ export const NAL_TYPE_SEI = 6;
9
+ export const NAL_TYPE_SPS = 7;
10
+ export const NAL_TYPE_PPS = 8;
11
+ export const NAL_TYPE_DELIMITER = 9;
12
+ export const allowedNaluTypes = [NAL_TYPE_STAP_A, NAL_TYPE_SPS, NAL_TYPE_PPS, NAL_TYPE_SEI, NAL_TYPE_DELIMITER];
13
+ export async function checkMp4StartsWithKeyFrame(mp4, ffmpegPath) {
14
+ const cp = spawn(ffmpegPath, ['-hide_banner', '-f', 'mp4', '-i', 'pipe:3', '-vcodec', 'copy', '-f', 'h264', 'pipe:4'], {
15
+ stdio: ['pipe', 'pipe', 'pipe', 'pipe', 'pipe'],
16
+ });
17
+ const input = cp.stdio[3];
18
+ const output = cp.stdio[4];
19
+ const buffers = [];
20
+ input.write(mp4);
21
+ input.end();
22
+ output.on('data', (data) => buffers.push(data));
23
+ try {
24
+ await timeoutPromise(1000, new Promise((resolve) => cp.on('exit', resolve)));
25
+ const h264 = Buffer.concat(buffers);
26
+ let offset = 0;
27
+ while (offset < h264.length - 6) {
28
+ if (h264.readInt32BE(offset) !== 1) {
29
+ offset++;
30
+ continue;
31
+ }
32
+ offset += 4;
33
+ let naluType = h264.readUInt8(offset) & 0x1f;
34
+ if (naluType === NAL_TYPE_FU_A) {
35
+ offset++;
36
+ naluType = h264.readUInt8(offset) & 0x1f;
37
+ }
38
+ if (naluType === NAL_TYPE_IDR) {
39
+ return true;
40
+ }
41
+ if (allowedNaluTypes.includes(naluType)) {
42
+ offset++;
43
+ continue;
44
+ }
45
+ return false;
46
+ }
47
+ return false;
48
+ }
49
+ catch {
50
+ return false;
51
+ }
52
+ }
53
+ //# sourceMappingURL=mp4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mp4.js","sourceRoot":"","sources":["../../src/utils/mp4.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { RtpPacket } from 'werift';
2
2
  export declare class OpusRepacketizer {
3
3
  framesPerPacket: number;
4
- depacketized: Buffer[];
4
+ private depacketized;
5
5
  constructor(framesPerPacket: number);
6
6
  repacketize(packet: RtpPacket): RtpPacket | undefined;
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"opus-repacketizer.js","sourceRoot":"","sources":["../../src/utils/opus-repacketizer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opus-repacketizer.js","sourceRoot":"","sources":["../../src/utils/opus-repacketizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Socket } from 'dgram';
2
+ export declare function reservePorts({ count, type, attemptNumber, }?: {
3
+ count?: number;
4
+ type?: 'udp' | 'tcp';
5
+ attemptNumber?: number;
6
+ }): Promise<number[]>;
7
+ export declare function bindToPort(socket: Socket, address?: string): Promise<number>;
@@ -0,0 +1,43 @@
1
+ import { pickPort } from 'pick-port';
2
+ // Need to reserve ports in sequence because ffmpeg uses the next port up by default. If it's taken, ffmpeg will error
3
+ export async function reservePorts({ count = 1, type = 'udp', attemptNumber = 0, } = {}) {
4
+ if (attemptNumber > 100) {
5
+ throw new Error('Failed to reserve ports after 100 tries');
6
+ }
7
+ const pickPortOptions = {
8
+ type,
9
+ reserveTimeout: 15, // 15 seconds is max setup time for HomeKit streams, so the port should be in use by then
10
+ }, port = await pickPort(pickPortOptions), ports = [port], tryAgain = () => {
11
+ return reservePorts({
12
+ count,
13
+ type,
14
+ attemptNumber: attemptNumber + 1,
15
+ });
16
+ };
17
+ for (let i = 1; i < count; i++) {
18
+ try {
19
+ const targetConsecutivePort = port + i, openPort = await pickPort({
20
+ ...pickPortOptions,
21
+ minPort: targetConsecutivePort,
22
+ maxPort: targetConsecutivePort,
23
+ });
24
+ ports.push(openPort);
25
+ }
26
+ catch {
27
+ // can't reserve next port, bail and get another set
28
+ return tryAgain();
29
+ }
30
+ }
31
+ return ports;
32
+ }
33
+ export function bindToPort(socket, address = '127.0.0.1') {
34
+ return new Promise((resolve, reject) => {
35
+ socket.on('error', reject);
36
+ // 0 means select a random open port
37
+ socket.bind(0, address, () => {
38
+ const { port } = socket.address();
39
+ resolve(port);
40
+ });
41
+ });
42
+ }
43
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/utils/ports.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAKrC,uHAAuH;AACvH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,KAAK,GAAG,CAAC,EACT,IAAI,GAAG,KAAK,EACZ,aAAa,GAAG,CAAC,MAKf,EAAE;IACJ,IAAI,aAAa,GAAG,GAAG,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,eAAe,GAAG;QACpB,IAAI;QACJ,cAAc,EAAE,EAAE,EAAE,yFAAyF;KAC9G,EACD,IAAI,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,EACtC,KAAK,GAAG,CAAC,IAAI,CAAC,EACd,QAAQ,GAAG,GAAG,EAAE;QACd,OAAO,YAAY,CAAC;YAClB,KAAK;YACL,IAAI;YACJ,aAAa,EAAE,aAAa,GAAG,CAAC;SACjC,CAAC,CAAC;IACL,CAAC,CAAC;IAEJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,EACpC,QAAQ,GAAG,MAAM,QAAQ,CAAC;gBACxB,GAAG,eAAe;gBAClB,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,qBAAqB;aAC/B,CAAC,CAAC;YAEL,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;YACpD,OAAO,QAAQ,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,OAAO,GAAG,WAAW;IAC9D,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE3B,oCAAoC;QACpC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { FfmpegProcess } from './ffmpeg-process.js';
2
+ import type { FfmpegProcessOptions } from './ffmpeg-process.js';
3
+ import type { RtpSplitter } from './rtp-splitter.js';
4
+ interface Source {
5
+ srtp_key: Buffer;
6
+ srtp_salt: Buffer;
7
+ }
8
+ interface PrepareStreamRequest {
9
+ targetAddress: string;
10
+ addressVersion: 'ipv4' | 'ipv6';
11
+ audio: Source;
12
+ }
13
+ interface StartStreamRequest {
14
+ audio: {
15
+ codec: 'OPUS' | 'AAC_eld' | string;
16
+ channel: number;
17
+ sample_rate: number;
18
+ pt: number;
19
+ };
20
+ }
21
+ export declare class ReturnAudioTranscoder {
22
+ private options;
23
+ readonly returnRtpSplitter: RtpSplitter;
24
+ private startStreamRequest;
25
+ readonly ffmpegProcess: FfmpegProcess;
26
+ readonly reservedPortsPromise: Promise<number[]>;
27
+ constructor(options: {
28
+ outputArgs: (string | number)[];
29
+ prepareStreamRequest: PrepareStreamRequest;
30
+ incomingAudioOptions: {
31
+ ssrc: number;
32
+ rtcpPort: number;
33
+ };
34
+ returnAudioSplitter: RtpSplitter;
35
+ startStreamRequest?: StartStreamRequest;
36
+ } & Omit<FfmpegProcessOptions, 'ffmpegArgs'>);
37
+ start(): Promise<void>;
38
+ stop(): void;
39
+ }
40
+ export {};
@@ -0,0 +1,84 @@
1
+ import { FfmpegProcess } from './ffmpeg-process.js';
2
+ import { reservePorts } from './ports.js';
3
+ import { getSsrc } from './rtp.js';
4
+ import { createCryptoLine } from './srtp.js';
5
+ const defaultStartStreamReqeuest = {
6
+ audio: {
7
+ codec: 'AAC_eld',
8
+ channel: 1,
9
+ sample_rate: 16,
10
+ pt: 110,
11
+ },
12
+ };
13
+ export class ReturnAudioTranscoder {
14
+ options;
15
+ returnRtpSplitter;
16
+ startStreamRequest;
17
+ ffmpegProcess;
18
+ reservedPortsPromise = reservePorts({ count: 2 });
19
+ constructor(options) {
20
+ this.options = options;
21
+ this.startStreamRequest = this.options.startStreamRequest || defaultStartStreamReqeuest;
22
+ this.ffmpegProcess = new FfmpegProcess({
23
+ ffmpegArgs: [
24
+ '-hide_banner',
25
+ '-protocol_whitelist',
26
+ 'pipe,udp,rtp,file,crypto',
27
+ '-f',
28
+ 'sdp',
29
+ '-acodec',
30
+ this.startStreamRequest.audio.codec === 'OPUS' ? 'libopus' : 'libfdk_aac',
31
+ '-i',
32
+ 'pipe:',
33
+ '-map',
34
+ '0:0',
35
+ ...this.options.outputArgs,
36
+ ],
37
+ ...this.options,
38
+ });
39
+ // allow return audio splitter to be passed in if you want to create one in the prepare stream phase, and create the transcoder in the stream request phase
40
+ this.returnRtpSplitter = options.returnAudioSplitter;
41
+ }
42
+ async start() {
43
+ const [rtpPort, rtcpPort] = await this.reservedPortsPromise, { targetAddress, addressVersion, audio: { srtp_key: srtpKey, srtp_salt: srtpSalt }, } = this.options.prepareStreamRequest, { ssrc: incomingAudioSsrc, rtcpPort: incomingAudioRtcpPort } = this.options.incomingAudioOptions, { codec, sample_rate, channel, pt: packetType } = this.startStreamRequest.audio;
44
+ this.ffmpegProcess.writeStdin(
45
+ // This SDP was generated using ffmpeg, and describes the type of packets we expect to receive from HomeKit.
46
+ [
47
+ 'v=0',
48
+ 'o=- 0 0 IN IP4 127.0.0.1',
49
+ 's=Talk',
50
+ `c=IN ${addressVersion.replace('v', '').toUpperCase()} ${targetAddress}`,
51
+ 't=0 0',
52
+ 'a=tool:libavformat 58.38.100',
53
+ `m=audio ${rtpPort} RTP/AVP ${packetType}`,
54
+ 'b=AS:24',
55
+ ...(codec === 'OPUS'
56
+ ? [`a=rtpmap:${packetType} opus/${sample_rate}000/${channel}`, `a=fmtp:${packetType} minptime=10;useinbandfec=1`]
57
+ : [
58
+ `a=rtpmap:${packetType} MPEG4-GENERIC/${sample_rate}000/${channel}`,
59
+ `a=fmtp:${packetType} profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3; config=F8F0212C00BC00`,
60
+ ]),
61
+ createCryptoLine({
62
+ srtpKey,
63
+ srtpSalt,
64
+ }),
65
+ ].join('\n'));
66
+ this.returnRtpSplitter.addMessageHandler(({ isRtpMessage, message }) => {
67
+ // This splitter will receive all audio-related packets from HomeKit.
68
+ // This includes RTP + RTCP for return audio, as well as RTCP for incoming audio
69
+ if (!isRtpMessage && getSsrc(message) === incomingAudioSsrc) {
70
+ return {
71
+ port: incomingAudioRtcpPort,
72
+ };
73
+ }
74
+ return {
75
+ port: isRtpMessage ? rtpPort : rtcpPort,
76
+ };
77
+ });
78
+ }
79
+ stop() {
80
+ this.ffmpegProcess.stop();
81
+ this.returnRtpSplitter.close();
82
+ }
83
+ }
84
+ //# sourceMappingURL=return-audio-transcoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"return-audio-transcoder.js","sourceRoot":"","sources":["../../src/utils/return-audio-transcoder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { Observable } from 'rxjs';
2
+ import type { RemoteInfo, Socket } from 'dgram';
3
+ export interface SocketTarget {
4
+ port: number;
5
+ address?: string;
6
+ }
7
+ export interface RtpMessageDescription {
8
+ isRtpMessage: boolean;
9
+ payloadType: number;
10
+ info: RemoteInfo;
11
+ message: Buffer;
12
+ }
13
+ export type RtpMessageHandler = (description: RtpMessageDescription) => SocketTarget | null;
14
+ export declare class RtpSplitter {
15
+ socket?: Socket;
16
+ address?: string;
17
+ port?: number;
18
+ onMessage?: Observable<{
19
+ message: Buffer;
20
+ info: RemoteInfo;
21
+ isRtpMessage: boolean;
22
+ payloadType: number;
23
+ }>;
24
+ private closed;
25
+ private cleanedUp;
26
+ private onClose;
27
+ constructor();
28
+ prepare(type: 'udp4' | 'udp6', address?: string, messageHandler?: RtpMessageHandler): Promise<void>;
29
+ addMessageHandler(handler: RtpMessageHandler): void;
30
+ send(message: Buffer, sendTo: SocketTarget): void;
31
+ private cleanUp;
32
+ close(): void;
33
+ }
@@ -0,0 +1,71 @@
1
+ import { createSocket } from 'dgram';
2
+ import { fromEvent, merge, ReplaySubject } from 'rxjs';
3
+ import { map, share, takeUntil } from 'rxjs/operators';
4
+ import { bindToPort } from './ports.js';
5
+ import { getPayloadType, isRtpMessagePayloadType } from './rtp.js';
6
+ export class RtpSplitter {
7
+ socket;
8
+ address;
9
+ port;
10
+ onMessage;
11
+ closed = false;
12
+ cleanedUp = false;
13
+ onClose = new ReplaySubject();
14
+ constructor() { }
15
+ async prepare(type, address = '127.0.0.1', messageHandler) {
16
+ const socket = createSocket(type);
17
+ const port = await bindToPort(socket, address);
18
+ socket.setSendBufferSize(1024 * 1024);
19
+ this.socket = socket;
20
+ this.address = address;
21
+ this.port = port;
22
+ this.onMessage = fromEvent(this.socket, 'message').pipe(map(([message, info]) => {
23
+ const payloadType = getPayloadType(message);
24
+ return {
25
+ message,
26
+ info,
27
+ isRtpMessage: isRtpMessagePayloadType(payloadType),
28
+ payloadType,
29
+ };
30
+ }), takeUntil(this.onClose), share());
31
+ if (messageHandler) {
32
+ this.addMessageHandler(messageHandler);
33
+ }
34
+ merge(fromEvent(this.socket, 'close'), fromEvent(this.socket, 'error'))
35
+ .pipe(takeUntil(this.onClose))
36
+ .subscribe(() => {
37
+ this.cleanUp();
38
+ });
39
+ }
40
+ addMessageHandler(handler) {
41
+ this.onMessage?.subscribe((description) => {
42
+ const forwardingTarget = handler(description);
43
+ if (forwardingTarget) {
44
+ this.send(description.message, forwardingTarget);
45
+ }
46
+ });
47
+ }
48
+ send(message, sendTo) {
49
+ if (this.closed) {
50
+ // If we send a message on a closed socket, it will throw an ERR_SOCKET_DGRAM_NOT_RUNNING error
51
+ return;
52
+ }
53
+ this.socket?.send(message, sendTo.port, sendTo.address || '127.0.0.1');
54
+ }
55
+ cleanUp() {
56
+ this.closed = true;
57
+ if (this.cleanedUp) {
58
+ return;
59
+ }
60
+ this.cleanedUp = true;
61
+ this.onClose.next(null);
62
+ }
63
+ close() {
64
+ if (this.closed) {
65
+ return;
66
+ }
67
+ this.socket?.close();
68
+ this.cleanUp();
69
+ }
70
+ }
71
+ //# sourceMappingURL=rtp-splitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtp-splitter.js","sourceRoot":"","sources":["../../src/utils/rtp-splitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function getPayloadType(message: Buffer): number;
2
+ export declare function isRtpMessagePayloadType(payloadType: number): boolean;
3
+ export declare function getSsrc(message: Buffer): number | null;