System Configuration

Options and parameters for configuring Nomad Media's subsystems

The primary config file for the application is found in the system bucket in the /configuration folder. It's used by all lambdas as the source of configuration.

{
"application/brightCoveSettings": {
		"brightCoveSecretKey": "demo3/brightcove",
		"tokenUrl": "https://oauth.brightcove.com/v4/access_token",
		"cmsBaseUrl": "https://cms.api.brightcove.com/v1/accounts/",
		"pageSize": 10,
		"MaxNumberOfPages": 1,
		"baseImportPath": "BrightCove"
	},  
  "application/BatchActionSettings": {
    "isQueueAction": true,
    "actionArguments": {}
  },
  "application/assetBatchActionSettings": {
    "isQueueAction": true,
    "actionArguments": {}
  },
  "application/screenshotSettings": {
    // These are the max dimensions of a generated thumbnail
    "thumbnailMaxDimensions": {
      "maxHeight": 180,
      "maxWidth": 180
    },

    // These are the max dimensions of a generated preview
    "previewMaxDimensions": {
      "maxHeight": 600,
      "maxWidth": 600
    },

    // This is the interval in seconds that we take screenshots if ScreenshotsOnInterval processor is turned on
    "screenshotIntervalFrequency": 3.0
  },
  "application/rekognitionSettings": {
    // Minimum automatch confidence for similar faces to be automatched
    "automatchSimilarityThreshold": 95.0,
    
    // Minimum confidence for all other rekognition settings (textitems, labels, celebrities, etc)
    "minConfidence": 80.0,
    
    // Setting for custom labels (unused currently)
    "customLabelMinInferenceUnits": 1,
    
    // Name of the rekognition image face index on the AWS side
    "collection": "demo3-rekognition-collection"
  },
  
  // Settings for TranscribeMedical
  "application/transcribeMedical": {
    // This us from a list of strings defined in the TranscribeService
    // PRIMARYCARE is the only string in the list currently
    "specialty": "PRIMARYCARE",
    
    // This must be either DICTATION or CONVERSATION
    "transcriptionType": "DICTATION"
  },
  
  // List of processors that we run and whether they are turned on or off
  "application/assetProcessors": {
    // Extra audio into an mp3
    "AudioExtraction": true,
    
    // Segment video into smaller chunks to handle manifests easier.  Either this or RekognitionVideoSegmentDetection MUST be turned on.  The segment length is defined in application/NomadSettings -> intervalSegmentLengthInSeconds
    "IntervalSegments": true,
    
    // Detect celebrities in images and screenshots
    "RekognitionImageCelebrityRecognition": false,
    
    // Detect text in images and screenshots
    "RekognitionImageDetectText": false,
    
    // Detect faces in images and screenshots
    "RekognitionImageIndexFaces": true,
    
    // Detect labels in images and screenshots
    "RekognitionImageLabels": false,
    
    // Currently unused
    "RekognitionImageSearchFaces": false,
    
    // Detect ContentModeration in images and screenshots
    "RekognitionImageUnsafeContent": false,
    
    // Run RekognitionVideoSegments to detect shot changes in a video.  Either this or IntervalSegments MUST be turned on
    "RekognitionVideoSegmentDetection": false,
    
    // Takes a single screenshot at 0 seconds
    "ScreenshotAtZero": false,
    
    // Takes a screenshot at every shot change.  This will be the first second of each segment, whether that segment is RekognitionVideoSegmentDetection or IntervalSegments
    "ScreenshotsAtShotChange": false,
    
    // Take a screenshot on an interval.  ScreenshotInterval is defined in application/screenshotSettings under the field screenshotIntervalFrequency
    "ScreenshotsOnInterval": true,
    
    // Transcodes the file if it is outside the limits defined in application/mediaconvertSettings -> skipTranscodeDimensions
    "Transcode": true,
    
    // Transcription and VTTs generated
    "Transcribe": true,
    
    // TranscribeMedical transcriptions and VTTs generated
    // Transcribe will take precedence over TranscribeMedical if both
    // are enabled
    "TranscribeMedical": true,
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "Translate": true
  },
  "application/glacierSettings": {
    // The number of days we restore an object from Glacier for
    "restoreTimeInDays": 7,
    
    // The StorageClass tier we restore to
    "restoreTier": "Bulk"
  },
  "application/liveoperatorSettings": {
    // Folder to store saved videos (optional)
    "archiveFolderAssetId": "39b1fbdd-b31c-45c7-b546-a1ed0ed2697d",

    // Default Pre Roll Asset to load (optional)
    "defaultPreRollAssetId": "71995fe7-adae-47fd-ae75-ba2313e3f884",

    // Default Post Roll Asset to load (optional)
    "defaultPostRollAssetId": "39d58aed-57ad-4a99-8685-be95fdb6f377",
      
    // Archive directory/file formats (optional) 
    // Names between braces match content definition title or the live operator
    // related content title configurations. Any C# date format is allowed.
    "archivePrefixFormat": "{date:yyyy}/{date:MM}/{date:dd}/{aircraft registration}-{location}-{tasking}-{date:HHmmss}",
  
    // Whether or not to use secure outputs for any live channels that are created
    // using live operator. Default is false (optional)
    "useSecureOutput": "false"
  },
  "application/mediaLiveSettings": {
    // Delete Media store files after channel delete  (optional/default = true)
    "deleteMediaStoreFilesAfterChannelDelete": "true",

    // Check to see if we have any orphaned media live channels in AWS or Nomad
    // If so clean them up. (optional/default = false)
		"cleanupOrphanMediaLiveChannels": "false", 
    
    // TODO: Ask Adam
    "mediaLiveOutputVod": false,
      
    // TODO: Not sure if this is needed anymore? Check with Adam
    "mediaLiveBlackLoopVideoAssetId": "00000000-0000-0000-0000-000000000333",

    // How long each archive output file/segmentation should be
    // in seconds. (optional/default = 3600)
    "archiveOutputSegmentDuration": 180,
    
    // TODO: TBD if this is being used
    "mediaLiveOnAirTimeDelayMs": 0,
      
    // Video output settings for archive files (optional)
    "archiveOutputProfile": {
        "videoBitRate": 5000000,
        "name": "UHD output",
        "width": 1920,
        "audioBitRate": 96000,
        "enabled": true,
        "height": 1080
      },
    
    // Video output settings 
    "outputProfiles": [
      {
        "videoBitRate": 5000000,
        "name": "UHD output",
        "width": 1920,
        "audioBitRate": 96000,
        "enabled": true,
        "height": 1080
      },
      {
        "videoBitRate": 3000000,
        "name": "HD output",
        "width": 1280,
        "audioBitRate": 64000,
        "enabled": true,
        "height": 720
      }
    ],
      
    // This is a parameter media live requires that defaults to 
    // 30000 internally if not set. It must be greater than zero.
    // (optional/default = 30000)
    "failoverInputErrorClearTimeMsec": 30000,

    // Value not required but must be greater than 100 if specified.
    // (optional/default = 100)
    "failoverInputLossThresholdMsec": 100 ,
     
    // If fixed on-air time for scheduled event is min minutes or 
    // less close to current utc time then the schedule action for event 
    // will be scheduled as an immediate action. (optional)
    "minMinutesBeforeNowUntilOnAirTimeImmediate":
  },
  // Guest User Share Settings (See deployment guide for specifics on config)
  "application/userShareSettings": {
    "userShareProfiles": [
      {
        // The name of the user share profile (i.e. Guest)
        "name": "Nomad Guest",

        // Content Security Attribute for profile (i.e. Guest, Demo, External)
        // Guest is only supported at this time
        "contentSecurityAttribute": "Guest",

        // The number of hours the user will have to access shared content
        // This is optional, defaults to 8 hours
        "defaultExpirationInHours": 8,

        // Name of the email template to use. 
        // This name must be configured in emailSettings/Templates
        "defaultEmailTemplate": "userInvite",

        // Full url to the application's register route
        "defaultSiteRegistrationUrl": "https://live.dev-05.demos.media/account/register",

        // The allowed applications this share profile can log into
        "allowedApplications": ["a3be3566-a27f-4bae-a9c2-f9e067d66367"],

        //  The guid id of the security group that correlates to the ContentSecurityAttribute
        "securityGroup": {
          // Matches the contentSecurityAttribute config
          "description": "Guest",

          // Guid from the new Guest Security Group that was created
          "id": "8354ce06-deeb-4da9-a190-af0eca8d9f56"
        },

        // List of User Share Profile Definitions (i.e. LiveChannels, AssetGroups)
        "userShareProfileDefinitions": [
          {
            // Name of the content definition
            "name": "Live Channels",

            // Guid of the content definition id
            "contentDefinitionId": "bf8ac754-5b8b-4330-b1aa-76f15fb7f673",

            // Optional Expiration in hours, if you want to override default
            "expirationInHours": 8,

            // Optional Email template for invitation, if you want to override default 
            "emailTemplate": "userInvite",

            // Optional Site Registration Url for invitation, if you want to override default
            "siteRegistrationUrl": "https://live.dev-05.demos.media/account/register"       
          }
        ]
      }
    ]
	}, 
  "application/mediaconvertSettings": {
    // We skip transcoding if the dimensions are smaller than this and the format is mp4
    "skipTranscodeDimensions": {
      "maxHeight": 1080,
      "format": ".mp4",
      "maxWidth": 1920
    },
    
    // This is the default AWS mediaconvert profile we use
    "defaultProfile": "default"
  },
  "application/nomadSettings": {
    // Used to kick off users if they are sharing logins across IP addresses
    "enablePing": true,
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "videoExtensions": [
      ".mp4",
      ".mov",
      ".m4v",
      ".mxf",
      ".mpg",
      ".mkv",
      ".avi",
      ".mts",
      ".m2ts",
      ".ts",
      ".asf",
      ".m4p",
      ".mp2",
      ".mpeg",
      ".mpe",
      ".mpv",
      ".m2v",
      ".flv"
    ],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "imageExtensions": [
      ".jpg",
      ".jpe",
      ".bmp",
      ".gif",
      ".png",
      ".svg",
      ".jpeg",
      ".tiff",
      ".imf",
      ".webp",
      ".raw",
      ".iiq",
      ".tif",
      ".jfif",
      ".j2k",
      ".j2c",
      ".jpc",
      ".jls",
      ".cr2",
      ".nef",
      ".x3f",
      ".sr2"
    ],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "documentExtensions": [".pdf", ".docx", ".doc"],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "audioExtensions": [
      ".mp3",
      ".wav",
      ".flac",
      ".aac",
      ".aiff",
      ".aif",
      ".m4a",
      ".ogg"
    ],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "manifestExtensions": [".hls", ".mpd"],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "badCodecs": ["cinepak"],
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "renamingLambda": "",
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "intervalSegmentLengthInSeconds": 60.0,
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "defaultLanguageCode": "c66131cd-27fc-4f83-9b89-b57575ac0ed8",
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "outputLanguageList": "en, es",
    
    // Transcription and VTTs are translated to the languages listed in application/nomadSettings -> outputLanguageList
    "s3CopyObjectPartSize": 1073741824,
    
    // Intelligent Programming Public Content Folder Asset Id
    "publicContentId": "564c5a08-74dd-4197-b1ef-3453a929c9f8",

    // The full URL to the image used in the top left corner for branding. Note it
    // works best as a wider image
    "logoImageUrl": "https://example.demos.media/config/guid/logo.svg",
  },
  "cloudFrontMappings": [
    {
      "bucketName": "nomad-demo3-system-metadata-1f9amk911utnz",
      "prefix": "pmc",
      "restrict": false,
      "url": "https://content.demo3.demos.media"
    },
    {
      "bucketName": "nomad-demo3-system-content-1csq36t2m3luu",
      "prefix": "content/public",
      "restrict": false,
      "url": "https://content.demo3.demos.media"
    },
    {
      "bucketName": "nomad-demo3-system-metadataarchive-1xauex028sgwt",
      "prefix": "ma",
      "restrict": true,
      "url": "https://content.demo3.demos.media"
    },
    {
      "bucketName": "nomad-demo3-system-metadata-1f9amk911utnz",
      "prefix": "mc",
      "restrict": true,
      "url": "https://content.demo3.demos.media"
    },
    {
      "bucketName": "nomad-demo3-system-content-1csq36t2m3luu",
      "prefix": "content",
      "useCidrSecurity": true,
      "restrict": true,
      "url": "https://content.demo3.demos.media"
    }
  ]
}

BrightCove Notes

PropertyTypeDefaultRequiredDescription
applicationstring—YesThe application name identifier
customerstring—YesThe customer/project prefix
siteNamestring—YesDisplay name shown in portal title and login screen
logoImageUrlURL string—NoFull URL to branding logo image (works best as a wide image)
loginLogoImageUrlURL string—NoFull URL to the logo shown on the login screen
lookupsUrlURL string—NoURL to the lookups.json config file
configBasePathURL string—NoBase path for configuration resources

Note: The system configuration file contains many additional properties. Refer to your environment's {projectPrefix}.config.json in the S3 system bucket for the full list of current settings.

{
		"AccountId": "2800497287112",
		"ClientId": "32dba9fa-1687-4e31-8cb7-0d8f2bd352ed",
		"ClientSecret": "o4oX/9TDbZSaR+jqsDuMX7vRMAmsLO3pDEDnsXJagmhSwb4lYzBGpZ9fFFlARX8/CU+9WBWG6ukUew1/dUClig=="
}