in provider-utils/awscloudformation/cloudformation-templates/livestream-helpers/LambdaFunctions/psdemo-js-live-workflow_v0.4.0/lib/flagfish.js [334:410]
addMediaStoreOutputGroup(payload) {
if (!this.hasMediaStore) {
return;
}
/* eslint-disable no-param-reassign */
const prefix = 'ms-';
const {
Destinations,
EncoderSettings: {
AudioDescriptions, CaptionDescriptions, VideoDescriptions, OutputGroups,
},
} = payload;
/* adding mediatstore destination */
Destinations.push({
Id: `${prefix}destination-${this.channelId}`,
Settings: [
this.primaryMediaStoreIngestUrl, this.backupMediaStoreIngestUrl,
].map(Url => ({ Url })),
});
/**
* ATTENTION:
* The logic below assumes the job json only contains HLS output group. It it contains
* other output group such as archive, we need to selectively clone the outputs!
*/
/* clone all audio, caption, video descriptions */
[
AudioDescriptions,
CaptionDescriptions,
VideoDescriptions,
].forEach((descriptions) => {
Flagfish.deepCopy(descriptions).forEach((x) => {
x.Name = `${prefix}${x.Name}`;
descriptions.push(x);
if (!this.hasMediaPackage) {
descriptions.shift();
}
});
});
/* clone HLS output group and modify to mediastore */
const clonedOG = Flagfish.deepCopy(OutputGroups.find(x => !!(x.OutputGroupSettings.HlsGroupSettings)));
clonedOG.Name = `${prefix}${clonedOG.Name}`;
const {
OutputGroupSettings: { HlsGroupSettings },
Outputs,
} = clonedOG;
HlsGroupSettings.HlsCdnSettings = {
HlsMediaStoreSettings: {
NumRetries: 10,
ConnectionRetryInterval: 1,
RestartDelay: 15,
FilecacheDuration: 300,
MediaStoreStorageClass: 'TEMPORAL',
},
};
HlsGroupSettings.Destination.DestinationRefId = `${prefix}destination-${this.channelId}`;
Outputs.forEach((x) => {
if (x.VideoDescriptionName) {
x.VideoDescriptionName = `${prefix}${x.VideoDescriptionName}`;
}
if (x.AudioDescriptionNames) {
x.AudioDescriptionNames = x.AudioDescriptionNames.map(a => `${prefix}${a}`);
}
if (x.CaptionDescriptionNames) {
x.CaptionDescriptionNames = x.CaptionDescriptionNames.map(a => `${prefix}${a}`);
}
});
OutputGroups.push(clonedOG);
if (!this.hasMediaPackage) {
OutputGroups.shift();
}
console.log(util.inspect(payload, { showHidden: false, depth: null }));
/* eslint-enable no-param-reassign */
}