Skip to content

Commit

Permalink
fix: multiview-arr does individual fetch for all mvs and creates uniq…
Browse files Browse the repository at this point in the history
…ue ids for each
  • Loading branch information
malmen237 committed Sep 4, 2024
1 parent b1b3e79 commit 59dc4a2
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 71 deletions.
130 changes: 71 additions & 59 deletions src/api/agileLive/pipelines/multiviews/multiviews.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export async function getMultiviewsForPipeline(
export async function createMultiviewForPipeline(
productionSettings: ProductionSettings,
sourceRefs: SourceReference[]
): Promise<ResourcesPipelineMultiviewResponse> {
): Promise<ResourcesPipelineMultiviewResponse[]> {
// const multiviewPresets = await getMultiviewPresets();

const pipeline = productionSettings.pipelines.find((p) =>
Expand All @@ -53,7 +53,10 @@ export async function createMultiviewForPipeline(
Log().error(`Did not find a specified pipeline in multiview settings`);
throw `Did not find a specified pipeline in multiview settings`;
}
if (!productionSettings.pipelines[multiviewIndex].multiview) {
if (
!productionSettings.pipelines[multiviewIndex].multiview ||
productionSettings.pipelines[multiviewIndex].multiview.length === 0
) {
Log().error(
`Did not find any multiview settings in pipeline settings for: ${productionSettings.pipelines[multiviewIndex]}`
);
Expand All @@ -76,70 +79,79 @@ export async function createMultiviewForPipeline(
});
Log().info(`Creating a multiview for pipeline '${pipelineUUID}' from preset`);

const multiviewSettings: MultiviewSettings[] =
const multiviewsSettings: MultiviewSettings[] =
productionSettings.pipelines[multiviewIndex].multiview ?? [];
const multiview = createMultiview(sourceRefsWithLabels, ...multiviewSettings);

let payload = {};

if (multiview.output.srt_mode === 'listener') {
payload = {
...multiview,
output: {
format: multiview.output.format,
frame_rate_d: multiview.output.frame_rate_d,
frame_rate_n: multiview.output.frame_rate_n,
local_ip: multiview.output.local_ip,
local_port: multiview.output.local_port,
srt_mode: multiview.output.srt_mode,
srt_latency_ms: multiview.output.srt_latency_ms,
srt_passphrase: multiview.output.srt_passphrase,
video_format: multiview.output.video_format,
video_kilobit_rate: multiview.output.video_kilobit_rate

const createEachMultiviewer = multiviewsSettings.map(
async (singleMultiviewSettings) => {
const multiview = createMultiview(
sourceRefsWithLabels,
singleMultiviewSettings
);

let payload = {};

if (multiview.output.srt_mode === 'listener') {
payload = {
...multiview,
output: {
format: multiview.output.format,
frame_rate_d: multiview.output.frame_rate_d,
frame_rate_n: multiview.output.frame_rate_n,
local_ip: multiview.output.local_ip,
local_port: multiview.output.local_port,
srt_mode: multiview.output.srt_mode,
srt_latency_ms: multiview.output.srt_latency_ms,
srt_passphrase: multiview.output.srt_passphrase,
video_format: multiview.output.video_format,
video_kilobit_rate: multiview.output.video_kilobit_rate
}
};
}
};
}
if (multiview.output.srt_mode === 'caller') {
payload = {
...multiview,
output: {
format: multiview.output.format,
frame_rate_d: multiview.output.frame_rate_d,
frame_rate_n: multiview.output.frame_rate_n,
local_ip: '0.0.0.0',
local_port: 0,
remote_ip: multiview.output.remote_ip,
remote_port: multiview.output.remote_port,
srt_mode: multiview.output.srt_mode,
srt_latency_ms: multiview.output.srt_latency_ms,
srt_passphrase: multiview.output.srt_passphrase,
video_format: multiview.output.video_format,
video_kilobit_rate: multiview.output.video_kilobit_rate
if (multiview.output.srt_mode === 'caller') {
payload = {
...multiview,
output: {
format: multiview.output.format,
frame_rate_d: multiview.output.frame_rate_d,
frame_rate_n: multiview.output.frame_rate_n,
local_ip: '0.0.0.0',
local_port: 0,
remote_ip: multiview.output.remote_ip,
remote_port: multiview.output.remote_port,
srt_mode: multiview.output.srt_mode,
srt_latency_ms: multiview.output.srt_latency_ms,
srt_passphrase: multiview.output.srt_passphrase,
video_format: multiview.output.video_format,
video_kilobit_rate: multiview.output.video_kilobit_rate
}
};
}
};
}
const response = await fetch(
new URL(
AGILE_BASE_API_PATH + `/pipelines/${pipelineUUID}/multiviews`,
process.env.AGILE_URL
),
{
method: 'POST',
headers: {
authorization: getAuthorizationHeader()
},
next: {
revalidate: 0
},
body: JSON.stringify(payload)
}
);

const response = await fetch(
new URL(
AGILE_BASE_API_PATH + `/pipelines/${pipelineUUID}/multiviews`,
process.env.AGILE_URL
),
{
method: 'POST',
headers: {
authorization: getAuthorizationHeader()
},
next: {
revalidate: 0
},
body: JSON.stringify(payload)
if (response.ok) {
return await response.json();
}
throw await response.text();
}
);

if (response.ok) {
return await response.json();
}
throw await response.text();
return Promise.all(createEachMultiviewer);
}

export async function deleteMultiviewFromPipeline(
Expand Down
21 changes: 9 additions & 12 deletions src/api/manager/workflow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ export async function stopProduction(
]
};
}

export async function startProduction(
production: Production
): Promise<Result<StartProductionStep[]>> {
Expand Down Expand Up @@ -650,15 +651,14 @@ export async function startProduction(

// Try to setup multiviews start
try {
let multiviewId = 0;
if (!production.production_settings.pipelines[0].multiview) {
Log().error(
`No multiview settings specified for production: ${production.name}`
);
throw `No multiview settings specified for production: ${production.name}`;
}

const multiview = await createMultiviewForPipeline(
const runtimeMultiviews = await createMultiviewForPipeline(
production_settings,
production.sources
).catch(async (error) => {
Expand All @@ -674,20 +674,17 @@ export async function startProduction(
});
throw `Failed to create multiview for pipeline '${production_settings.pipelines[0].pipeline_name}/${production_settings.pipelines[0].pipeline_id}': ${error}`;
});
multiviewId = multiview.id;

runtimeMultiviews.flatMap((runtimeMultiview, index) => {
const multiview = production.production_settings.pipelines[0].multiview;
if (multiview && multiview[index]) {
return (multiview[index].multiview_id = runtimeMultiview.id);
}
});

Log().info(
`Production '${production.name}' with preset '${production_settings.name}' started`
);
// ! What is the consequence of this? Cannot see the effect ->
// production.production_settings.pipelines[0].multiview.multiview_id =
// multiviewId;
production.production_settings.pipelines[0].multiview.map(
(singleMultiview) => {
return (singleMultiview.multiview_id = multiviewId);
}
);
// ! <-
} catch (e) {
Log().error('Could not start multiviews');
Log().error(e);
Expand Down

0 comments on commit 59dc4a2

Please sign in to comment.