productLogo

Playout Profiles

Playout Profile Page

The Playout Profiles page is where you can view, create, edit, and delete Playout Profiles.

This section is split into five parts:

General Information

These Profiles can be assigned to Live Events on the system and provide instructions to the streaming server on certain characteristics of the stream, such as:

  • Type of DRM
  • DVR window,
  • Video formats
  • Streaming URL
  • Which bitrates to use

Each Event in VCH can have multiple Playout Profiles assigned to it. The Streaming URL page of an event will update to contain these profiles.

Playout Profiles can be updated on the fly and will immediately affect any Events with that Profile assigned to them.

Warning

When configuring mp4SplitOptions, ensure that settings that relate to the storing of video on disk match those on the original stream. e.g. do not have different values for: --archive_length, --archiving, --archive_segment_length

Add/Edit Playout Profiles

This section is displayed on the left side of the page.

By default, this is used to add new Playout Profiles. If you click on an existing Playout Profile in the Current Playout Profiles section, this will update to edit that Playout Profile. If you are editing an existing Playout Profile, there will be an orange “Cancel Editing” button displayed next to the save button. There will also be a large red warning section if the Profile is currently in use by a live event on the system.

The Configuration JSON contains information about the Playout Profile, for example, the stream protocols used in that profile along with MP4split configuration.

Configuration JSON

JSON Schema

As shown in the section above, Playout Profiles are defined by entering JSON into the Configuration JSON text field. The Schema is defined here:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Playout Profile Json Schema",
  "description": "Playout Profile Json",
  "type": "object",
  "properties": {
    "manifestFile": { "type": "string" },
    "drm": {
      "type": "object",
      "$ref": "../../DrmJson/Schema/DrmSchema.json"
    },
    "mp4splitOptions": { "type": "string" },
    "tracks": {
      "type": "array",
      "items": {
        "type": "object",
        "$ref": "#/definitions/track"
      }
    },
    "outputUrls": {
      "type": "array",
      "items": {
        "title": "stream",
        "type": "object",
        "anyOf": [
          { "$ref": "#/definitions/hlsLive" },
          { "$ref": "#/definitions/hlseLive" },
          { "$ref": "#/definitions/hssLive" },
          { "$ref": "#/definitions/dashLive" },
          { "$ref": "#/definitions/hdsLive" }
        ]
      }
    }
  },
  "required": [ "manifestFile", "outputUrls" ],
  "definitions": {
    "track": {
      "properties": {
        "kind": {
          "enum": [ "video", "audio", "textstream" ]
        },
        "criteria": {
          "type": "object",
          "properties": {
            "trackID": { "type": "number" },
            "trackName": { "type": "string" },
            "systemBitrate": { "type": "number" },
            "src": { "type": "string" },
            "FourCC": { "type": "string" },
            // Specific to Video
            "MaxWidth": { "type": "number" },
            "MaxHeight": { "type": "number" },
            // Specific to Audio
            "SamplingRate": { "type": "number" },
            "Channels": { "type": "number" },
            "BitsPerSample": { "type": "number" }
          },
          "additionalProperties": true
        }
      },
      "required": [ "kind" ],
      "additionalProperties": false
    },
    "hlsLive": {
      "properties": {
        "streamProtocol": { "enum": [ "HLS" ] },
        "liveCdnPrimaryUrl": {
          "type": "string"
        },
        "liveCdnSecondaryUrl": {
          "type": "string"
        },
        "liveOriginPrimaryUrl": {
          "type": "string"
        },
        "liveOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hlseLive": {
      "properties": {
        "streamProtocol": { "enum": [ "HLSe" ] },
        "liveCdnPrimaryUrl": {
          "type": "string"
        },
        "liveCdnSecondaryUrl": {
          "type": "string"
        },
        "liveOriginPrimaryUrl": {
          "type": "string"
        },
        "liveOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hssLive": {
      "properties": {
        "streamProtocol": { "enum": [ "HSS" ] },
        "liveCdnPrimaryUrl": {
          "type": "string"
        },
        "liveCdnSecondaryUrl": {
          "type": "string"
        },
        "liveOriginPrimaryUrl": {
          "type": "string"
        },
        "liveOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "dashLive": {
      "properties": {
        "streamProtocol": { "enum": [ "DASH" ] },
        "liveCdnPrimaryUrl": {
          "type": "string"
        },
        "liveCdnSecondaryUrl": {
          "type": "string"
        },
        "liveOriginPrimaryUrl": {
          "type": "string"
        },
        "liveOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hdsLive": {
      "properties": {
        "streamProtocol": { "enum": [ "HDS" ] },
        "liveCdnPrimaryUrl": {
          "type": "string"
        },
        "liveCdnSecondaryUrl": {
          "type": "string"
        },
        "liveOriginPrimaryUrl": {
          "type": "string"
        },
        "liveOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    }
  }
}

Here is an example Configuration JSON which limits the stream to 360p:

{
  "manifestFile": "360p.isml",
  "mp4splitOptions": "--archive_segment_length=600 --archiving=0 --dvr_window_length=30 --restart_on_encoder_reconnect",
  "tracks": [
    {
      "kind": "video",
      "criteria": {
        "maxWidth": 640,
        "maxHeight": 360
      }
    }
  ],
  "outputUrls": [
    {
      "streamProtocol": "HLS",
      "liveCdnPrimaryUrl": "https://*****.cloudfront.net/live/{0}/360p.isml/.m3u8",
      "liveCdnSecondaryUrl": "",
      "liveOriginPrimaryUrl": "http://ingest.vualto.controlhub.vualto.com/live/{0}/360p.isml/.m3u8",
      "liveOriginSecondaryUrl": "http://*****/live/{0}/360p.isml/.m3u8"
    },
    {
      "streamProtocol": "DASH",
      "liveCdnPrimaryUrl": "https://*****.cloudfront.net/live/{0}/360p.isml/.mpd",
      "liveCdnSecondaryUrl": "",
      "liveOriginPrimaryUrl": "http://ingest.vualto.controlhub.vualto.com/live/{0}/360p.isml/.mpd",
      "liveOriginSecondaryUrl": "http://*****/live/{0}/360p.isml/.mpd"
    },
    {
      "streamProtocol": "HSS",
      "liveCdnPrimaryUrl": "https://*****.cloudfront.net/live/{0}/360p.isml/Manifest",
      "liveCdnSecondaryUrl": "",
      "liveOriginPrimaryUrl": "http://ingest.vualto.controlhub.vualto.com/live/{0}/360p.isml/Manifest",
      "liveOriginSecondaryUrl": "http://*****/live/{0}/360p.isml/Manifest"
    },
    {
      "streamProtocol": "HDS",
      "liveCdnPrimaryUrl": "https://*****.cloudfront.net/live/{0}/360p.isml/.f4m",
      "liveCdnSecondaryUrl": "",
      "liveOriginPrimaryUrl": "http://ingest.vualto.controlhub.vualto.com/live/{0}/360p.isml/.f4m",
      "liveOriginSecondaryUrl": "http://*****/live/{0}/360p.isml/.f4m"
    }
  ]
}

Current Playout Profiles

This section is displayed on the right side of the page.

In this section you will see a list of all the current Playout Profiles on the system. From this list you can see:

  • Name
  • Actions

In the Actions column, you will see a red X button to delete the Playout Profile.

Assigning Profiles to Events

Applying Playout Profiles to Events is done through the Edit Event UI. Profiles can only be applied to Live Events, and is done by clicking on an Event to edit it, then going to the Live section, then to the Playout Profiles subsection. (See image below) This page lists the Playout Profiles set up in the Playout Profiles page. From here you can click on the profiles you want to apply to the current Event, pressing Save will update the Event immediately to have these Profiles attached.

Assigning Profile to Live Events