webrtc: fix typing and variable scope

This commit is contained in:
Koushik Dutta
2025-09-02 12:03:42 -07:00
parent 40a1221f11
commit ea6d404f12
5 changed files with 24 additions and 17 deletions

View File

@@ -52,7 +52,12 @@ export function createZygote<T>(options?: ForkOptions): Zygote<T> {
}
const gen = next();
return () => gen.next().value as PluginFork<T>;
return () => {
const ret = gen.next();
if (ret.done || !ret.value)
throw new Error('Zygote exhausted');
return ret.value;
};
}

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/webrtc",
"version": "0.2.83",
"version": "0.2.85",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/webrtc",
"version": "0.2.83",
"version": "0.2.85",
"dependencies": {
"@scrypted/common": "file:../../common",
"@scrypted/sdk": "file:../../sdk",

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/webrtc",
"version": "0.2.83",
"version": "0.2.85",
"scripts": {
"scrypted-setup-project": "scrypted-setup-project",
"prescrypted-setup-project": "scrypted-package-json",

View File

@@ -97,17 +97,18 @@ export async function createTrackForwarder(options: {
if (!mo)
return;
let mediaStreamFeedback: MediaStreamFeedback;
let hasMediaStreamFeedback = false;
try {
mediaStreamFeedback = await sdk.mediaManager.convertMediaObject(mo, ScryptedMimeTypes.MediaStreamFeedback);
const mediaStreamFeedback = await sdk.connectRPCObject(await sdk.mediaManager.convertMediaObject<MediaStreamFeedback>(mo, ScryptedMimeTypes.MediaStreamFeedback));
if (mediaStreamFeedback) {
videoTransceiver.sender.onRtcp.subscribe(rtcp => {
mediaStreamFeedback.onRtcp(rtcp.serialize());
});
hasMediaStreamFeedback = true;
}
}
catch (e) {
}
if (mediaStreamFeedback) {
videoTransceiver.sender.onRtcp.subscribe(rtcp => {
mediaStreamFeedback.onRtcp(rtcp.serialize());
});
}
const console = sdk.deviceManager.getMixinConsole(mo.sourceId);
const ffmpegInput = await sdk.mediaManager.convertMediaObjectToJSON<FFmpegInput>(mo, ScryptedMimeTypes.FFmpegInput);
@@ -253,7 +254,7 @@ export async function createTrackForwarder(options: {
}
}
if (mediaStreamFeedback)
if (hasMediaStreamFeedback)
needPacketization = false;
let opusRepacketizer: OpusRepacketizer;
@@ -580,9 +581,10 @@ export class WebRTCConnectionManagement implements RTCConnectionManagement {
let requestMediaStream: RequestMediaStream;
try {
requestMediaStream = await sdk.mediaManager.convertMediaObject(mediaObject, ScryptedMimeTypes.RequestMediaStream);
requestMediaStream = await sdk.connectRPCObject(await sdk.mediaManager.convertMediaObject(mediaObject, ScryptedMimeTypes.RequestMediaStream));
}
catch (e) {
mediaObject = await sdk.connectRPCObject(mediaObject);
requestMediaStream = async () => mediaObject;
}

View File

@@ -4,7 +4,7 @@ import { timeoutPromise } from '@scrypted/common/src/promise-utils';
import { legacyGetSignalingSessionOptions } from '@scrypted/common/src/rtc-signaling';
import { SettingsMixinDeviceBase, SettingsMixinDeviceOptions } from '@scrypted/common/src/settings-mixin';
import { createZygote } from '@scrypted/common/src/zygote';
import sdk, { DeviceCreator, DeviceCreatorSettings, DeviceProvider, FFmpegInput, Intercom, MediaConverter, MediaObject, MediaObjectOptions, MixinProvider, PluginFork, RTCSessionControl, RTCSignalingChannel, RTCSignalingClient, RTCSignalingOptions, RTCSignalingSession, RequestMediaStream, RequestMediaStreamOptions, ResponseMediaStreamOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, ScryptedNativeId, Setting, SettingValue, Settings, VideoCamera, WritableDeviceState } from '@scrypted/sdk';
import sdk, { DeviceCreator, DeviceCreatorSettings, DeviceProvider, FFmpegInput, Intercom, MediaConverter, MediaObject, MediaObjectOptions, MixinProvider, RTCSessionControl, RTCSignalingChannel, RTCSignalingClient, RTCSignalingOptions, RTCSignalingSession, RequestMediaStream, RequestMediaStreamOptions, ResponseMediaStreamOptions, ScryptedDeviceType, ScryptedInterface, ScryptedMimeTypes, ScryptedNativeId, Setting, SettingValue, Settings, VideoCamera, WritableDeviceState } from '@scrypted/sdk';
import { StorageSettings } from '@scrypted/sdk/storage-settings';
import { RpcPeer } from '@scrypted/server/src/rpc';
import { createDataChannelSerializer } from '@scrypted/server/src/rpc-serializer';
@@ -27,9 +27,9 @@ defaultPeerConfig.headerExtensions = {
audio: [],
};
function delayWorkerExit(f: PluginFork<ReturnType<typeof fork>>) {
function delayWorkerExit(f: ReturnType<WebRTCPlugin['createTrackedFork']>) {
setTimeout(() => {
f.result.then(r => r.then(rr => rr.exit())).catch(() => { });
f.result.then(rr => rr.exit()).catch(() => { });
}, 1000);
setTimeout(() => {
f.worker.terminate();
@@ -272,7 +272,7 @@ export class WebRTCPlugin extends AutoenableMixinProvider implements DeviceCreat
},
});
activeConnections = 0;
zygote = createZygote<ReturnType<typeof fork>>();
zygote = createZygote<Awaited<ReturnType<typeof fork>>>();
constructor() {
super();