addMediaStoreOutputGroup()

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 */
  }