
Playout Profiles¶

The Playout Profiles page is where you can view
, create
, edit
, and delete
Playout Profiles.
This section is split into five parts:
- General Information
- Add/Edit Playout Profiles
- JSON Schema
- Current Playout Profiles
- Assigning Profiles to Events
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.

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.
