From 3280fec6cdc691378ef49854553e61dffae85ca9 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sun, 13 Feb 2022 21:20:21 -0800 Subject: [PATCH] homekit: opus tests --- plugins/homekit/src/types/camera.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/homekit/src/types/camera.ts b/plugins/homekit/src/types/camera.ts index 7373bea6d..010e8564f 100644 --- a/plugins/homekit/src/types/camera.ts +++ b/plugins/homekit/src/types/camera.ts @@ -320,6 +320,7 @@ addSupportedType({ // homekit live streaming seems extremely picky about aac output. // so currently always transcode audio. + let hasAudio = true; if (false && !transcodeStreaming) { args.push( "-acodec", "copy", @@ -329,7 +330,8 @@ addSupportedType({ args.push( '-acodec', ...(audioCodec === AudioStreamingCodecType.OPUS ? [ - 'libopus', '-application', 'lowdelay', + 'libopus', + '-application', 'lowdelay', '-frame_duration', (request as StartStreamRequest).audio.packet_time.toString(), ] : ['libfdk_aac', '-profile:a', 'aac_eld']), @@ -338,6 +340,14 @@ addSupportedType({ '-b:a', `${(request as StartStreamRequest).audio.max_bit_rate}k`, "-bufsize", `${(request as StartStreamRequest).audio.max_bit_rate * 4}k`, '-ac', `${(request as StartStreamRequest).audio.channel}`, + ) + } + else { + hasAudio = false; + console.warn(device.name, 'unknown audio codec, audio will not be streamed.', request); + } + if (hasAudio) { + args.push( "-payload_type", (request as StartStreamRequest).audio.pt.toString(), "-ssrc", session.audiossrc.toString(), @@ -350,9 +360,6 @@ addSupportedType({ `srtp://${session.prepareRequest.targetAddress}:${session.prepareRequest.audio.port}?rtcpport=${session.prepareRequest.audio.port}&pkt_size=${audiomtu}` ) } - else { - console.warn(device.name, 'unknown audio codec, audio will not be streamed.', request); - } } if (!sessions.has(request.sessionID)) { @@ -610,7 +617,7 @@ addSupportedType({ bindCharacteristic(device, ScryptedInterface.OnOff, controller.cameraOperatingModeService, Characteristic.CameraOperatingModeIndicator, () => { if (!linkStatusIndicator) return storage.getItem(property) === 'true' ? 1 : 0; - + return device.on ? 1 : 0; }); indicator.on(CharacteristicEventTypes.SET, (value, callback) => {