diff --git a/overlay/src/views/Edit/index.js b/overlay/src/views/Edit/index.js index 02de4ed..dddda46 100644 --- a/overlay/src/views/Edit/index.js +++ b/overlay/src/views/Edit/index.js @@ -36,6 +36,7 @@ import RTMPControl from '../../misc/controls/RTMP'; import SnapshotControl from '../../misc/controls/Snapshot'; import SRTControl from '../../misc/controls/SRT'; import WHEPControl from '../../misc/controls/WHEP'; +import WHIPControl from '../../misc/controls/WHIP'; import TabPanel from '../../misc/TabPanel'; import TabsVerticalGrid from '../../misc/TabsVerticalGrid'; @@ -304,8 +305,29 @@ export default function Edit(props) { return false; } - // Create/update the ingest - let [, err] = await props.restreamer.UpsertIngest(_channelid, global, inputs, outputs, control); + // Monkey-patch _upsertProcess so that whip_ingest.enabled is injected + // into the main ingest process config before it reaches the Core API. + // The SDK's UpsertIngest does not forward control.whip_ingest, so we + // intercept here. The snapshot process is excluded from patching. + const origUpsertProcess = props.restreamer._upsertProcess.bind(props.restreamer); + props.restreamer._upsertProcess = async function whipPatchedUpsert(id, config) { + if (!id.endsWith('_snapshot') && !id.endsWith('_probe')) { + config.whip_ingest = { + enabled: !!(control.whip_ingest && control.whip_ingest.enable), + }; + } + return origUpsertProcess(id, config); + }; + + // Create/update the ingest (patch is active during this call) + let upsertResult; + try { + upsertResult = await props.restreamer.UpsertIngest(_channelid, global, inputs, outputs, control); + } finally { + props.restreamer._upsertProcess = origUpsertProcess; + } + + const [, err] = upsertResult; if (err !== null) { notify.Dispatch('error', 'save:ingest', i18n._(t`Failed to update ingest process (${err.message})`)); return false; @@ -318,9 +340,9 @@ export default function Edit(props) { } // Create/update the ingest snapshot process - [, err] = await props.restreamer.UpsertIngestSnapshot(_channelid, control); - if (err !== null) { - notify.Dispatch('error', 'save:ingest', i18n._(t`Failed to update ingest snapshot process (${err.message})`)); + const [, snapErr] = await props.restreamer.UpsertIngestSnapshot(_channelid, control); + if (snapErr !== null) { + notify.Dispatch('error', 'save:ingest', i18n._(t`Failed to update ingest snapshot process (${snapErr.message})`)); } // Create/update the player @@ -539,6 +561,20 @@ export default function Edit(props) { + + + WebRTC ingest (WHIP) + + + + + + + + WebRTC output (WHEP)