Channels


Channels represent a configuration between encoders, streaming servers, and the output URLs for the streaming. There is a large amount of configuration to these, and generally every client has a different setup.


Channel Object

A Channel object or response will contain the following:

{
    "id": "221529f1-965a-4197-b38a-ebcbe16103b0",
    "name": "Channel 01 (Example)",
    "referenceId": "channel01",
    "configurationJson": "{...}"
}

The configurationJson property contains all of the configuration, and is the essential part.

ConfigurationJson

Example:

{
    "encoders": [
        {
            "name": "FS CRW01 Channel01",
            "raiseOnError": true,
            "type": "MediaExcelHero",
            "encoderSpecific": {
                "heroApiUrlA": "http://10.196.50.49/hms/soapproxy.php",
                "heroApiUrlB": "http://10.196.50.49/hms/soapproxy.php",
                "heroChannelId": 830,
                "heroDeviceId": 5,
                "supportsContinousTimeStamp": true
            },
            "streamingServer": {
                "type": "USP",
                "streamingServerSpecific": {
                    "primaryPublishingPoint": {
                     "publishingpointUrl": "http://10.196.50.53:8080/live/fs/crw01
                     /ch01/channel1/live.isml",
                        "uspAPI": "http://80.169.3.216:9292",
                        "uspAPIKey": "dff32df7-59a3-49e1-ae02-976e342beb55",
                        "dvrWindowLength": 30,
                        "filePath": "/home/user/live/fs/crw01/ch01/channel1/"

                    },
                    "secondaryPublishingPoint": {
                        "publishingpointUrl": "",
                        "uspAPI": "",
                        "uspAPIKey": "",
                        "dvrWindowLength": 30,
                        "filePath": ""
                    }
                }
            },
            "outputUrls": [
                {
                    "streamProtocol": "HLS",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.m3u8",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.m3u8",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/live.isml/live.m3u8",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/vod.ism/vod.m3u8",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "DASH",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.mpd",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.mpd",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/live.isml/live.mpd",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/vod.ism/vod.mpd",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "HSS",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/Manifest",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/Manifest",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/live.isml/Manifest",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/vod.ism/Manifest",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "DASH",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.f4m",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.f4m",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/live.isml/live.f4m",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/crw01
                    /ch01/channel1/vod.ism/vod.f4m",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                }
            ]
        },
        {
            "name": "FS CHF01 Channel01",
            "type": "MediaExcelHero",
            "raiseOnError": false,
            "encoderSpecific": {
                "heroApiUrlA": "http://80.169.3.218:80/hms/soapproxy.php",
                "heroApiUrlB": "http://80.169.3.219:80/hms/soapproxy.php",
                "heroChannelId": 829,
                "heroDeviceId": 5,
                "supportsContinousTimeStamp": true
                 },
            "streamingServer": {
                "type": "USP",
                "streamingServerSpecific": {
                    "primaryPublishingPoint": {
                       "publishingpointUrl": "http://10.196.50.54:8080/live/fs/chf01
                       /ch01/channel1/live.isml",
                        "uspAPI": "http://80.169.3.217:9292",
                        "uspAPIKey": "dff32df7-59a3-49e1-ae02-976e342beb55",
                        "dvrWindowLength": 30,
                        "filePath": "/home/user/live/fs/chf01/ch01/channel1/"

                    },
                    "secondaryPublishingPoint": {
                        "publishingpointUrl": "",
                        "uspAPI": "",
                        "uspAPIKey": "",
                        "dvrWindowLength": 30,
                        "filePath": ""
                    }
                }
            },
            "outputUrls": [
               {
                    "streamProtocol": "HLS",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.m3u8",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.m3u8",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/live.isml/live.m3u8",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/vod.ism/vod.m3u8",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "DASH",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.mpd",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.mpd",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/live.isml/live.mpd",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/vod.ism/vod.mpd",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "HSS",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/Manifest",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/Manifest",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/live.isml/Manifest",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/vod.ism/Manifest",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                },
                {
                    "streamProtocol": "HDS",
                    "liveCdnUrl": "http://cdn.channel1.vis.org/live.isml/live.f4m",
                    "vodCdnUrl": "http://cdn.channel1.vis.org/vod.ism/vod.f4m",
                    "liveOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/live.isml/live.f4m",
                    "vodOriginPrimaryUrl": "http://cc.vualto.org/live/fs/chf01
                    /ch01/channel1/vod.ism/vod.f4m",
                    "liveOriginSecondaryUrl": "",
                    "vodOriginSecondaryUrl": ""
                }
            ]
        }
    ]
}

Schema:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Channel Schema",
  "description": "Channel Json",
  "type": "object",
  "properties": {
    "encoders": {
      "type": "array",
      "items": {
        "title": "encoder",
        "type": "object",
        "properties": {
          "name": { "type": "string" },
          "raiseOnError": { "type": "boolean" },
          "sendEndOfStream": { "type": [ "boolean", "null" ] },
          "type": {
            "type": "string",
            "enum": [
              "FFMPEGWindows",
              "FFMPEGLinux",
              "ExpressionEncoder",
              "MediaExcelHero",
              "MediaExcelHeroV4",
              "MediaExcelHeroV5",
              "FMLE",
              "CustomSource",
              "AwsElemental",
              "TitanLive",
              "TitanMux",
              "HarmonicNmx",
              "Ceeblue"
            ]
          },
          "encoderSpecific": {
            "type": "object",
            "oneOf": [
              { "$ref": "#/definitions/heroEncoders" },
              { "$ref": "#/definitions/customSource" },
              { "$ref": "#/definitions/awsElementalEncoders" },
              { "$ref": "#/definitions/titanLiveEncoders" },
              { "$ref": "#/definitions/titanMuxEncoders" },
              { "$ref": "#/definitions/harmonicNmxEncoders" },
              { "$ref": "#/definitions/ceeblueEncoders" }
            ]
          },
          "streamingServer": {
            "title": "Streaming Servers",
            "type": "object",
            "oneOf": [
              { "$ref": "#/definitions/streamingServers" }
            ]
          },
          "additionalStreamingServers": {
            "type": "array",
            "items": {
              "title": "Other streaming servers",
              "type": "object",
              "oneOf": [
                { "$ref": "#/definitions/streamingServers" }
              ]
            }
          },
          "fileServer": {
            "title": "file Server",
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "HERO"
                ]
              },
              "fileServerSpecific": {
                "type": "object",
                "oneOf": [
                  { "$ref": "#/definitions/heroFileServer" }
                ]
              }
            }
          },
          "otherOutputs": {
            "type": "array",
            "items": {
              "oneOf": [
                { "$ref": "#/definitions/outputs" }
              ]
            }
          },
          "outputUrls": {
            "type": "array",
            "items": {
              "title": "stream",
              "type": "object",
              "anyOf": [
                { "$ref": "#/definitions/outputStreamLiveV1" },
                { "$ref": "#/definitions/outputStreamLiveV2" }
              ]
            }
          }
        },
        "required": [ "name", "type", "raiseOnError", "encoderSpecific", "streamingServer", "outputUrls" ]
      }
    },
    "rampServers": {
      "type": "array",
      "items": {
        "title": "rampServer",
        "type": "object",
        "properties": {
          "serverAddress": { "type": "string" },
          "apiKey": { "type": "string" },
          "proxyPass": { "type": "string" },
          "proxyPassEmpty": { "type": "string" },
          "location": { "type": "string" },
          "playerAddress": { "type": "string" }
        },
        "required": [ "serverAddress", "apiKey", "proxyPass", "location", "playerAddress" ]
      }
    },
    "live2VodConfiguration": {
      "title": "Live 2 VOD",
      "type": "object",
      "properties": {
        "convertors": {
          "type": "array",
          "items": {
            "title": "Convertors",
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "contentId": { "type": "string" },
              "enabled": { "type": "boolean" },
              "outputFolder": { "type": "string" },
              "type": {
                "type": "string",
                "enum": [
                  "USP",
                  "Edgeware"
                ]
              },
              "convertorSpecific": {
                "type": "object",
                "anyOf": [
                  { "$ref": "#/definitions/uspLive2Vod" },
                  { "$ref": "#/definitions/edgewareLive2Vod" }
                ]
              }
            },
            "required": [ "name", "contentId", "enabled", "type", "outputFolder", "convertorSpecific" ],
            "additionalProperties": false
          }
        }
      }
    }
  },
  "required": [ "encoders" ],
  "additionalProperties": false,
  "definitions": {
    "streamingServers": {
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "USP",
            "Edgeware",
            "Wowza",
            "MediaPackage"
          ]
        },
        "streamingServerSpecific": {
          "type": "object",
          "anyOf": [
            { "$ref": "#/definitions/uspLiveSchemaV1" },
            { "$ref": "#/definitions/uspLiveSchemaV2" },
            { "$ref": "#/definitions/wowza" },
            { "$ref": "#/definitions/edgewareLive" },
            { "$ref": "#/definitions/mediaPackage" }
          ]
        }
      }
    },
    "awsElementalEncoders": {
      "properties": {
        "accessKey": { "type": "string" },
        "secretKey": { "type": "string" },
        "region": { "type": "string" },
        "channelId": { "type": [ "string", "null" ] },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "startTimeout": { "type:": "integer" },
        "replaceSourceMethod": {
          "type": [ "null", "string" ],
          "enum": [ null, "NONE", "OVERLAY", "INPUT_SWITCH", "BLACKOUT_SLATE" ]
        },
        "inputResolution": {
          "type": [ "null", "object" ],
          "oneOf": [ { "$ref": "#/definitions/videoResolution" } ]
        },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        },
        "imageOverlay": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/imageOverlay" }
          ]
        },
        "mediaConnectArns": {
          "type": [ "null", "array" ],
          "items": { "type": "string" }
        },
        "awsChannel": {
          "type": [ "object", "null" ],
          "properties": {
            "channelTemplate": { "type": [ "string", "null" ] },
            "inputSettings": {
              "type": [ "array", "null" ],
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "_mediaConnectFlows": {
                      "type": [ "array", "null" ],
                      "items": [
                        {
                          "type": "object",
                          "properties": {
                            "_tags": { "type": [ "object", "null" ] }
                          }
                        }
                      ]
                    },
                    "_securityGroups": { "type": [ "array", "null" ] }
                  }
                }
              ]
            },
            "channel": {
              "type": [ "object", "null" ],
              "properties": {
                "name": { "type": "string" },
                "channelClass": { "type": "string" }
              },
              "required": [ "name", "channelClass" ],
              "additionalProperties": true
            }
          },
          "required": [ "channel" ],
          "additionalProperties": true
        }
      },
      "required": [ "accessKey", "secretKey", "region", "supportsContinuousTimeStamp", "startTimeout" ],
      "additionalProperties": false
    },
    "heroEncoders": {
      "properties": {
        "heroApiUrlA": { "type": "string" },
        "heroApiUrlB": { "type": "string" },
        "heraApiUrl": { "type": "string" },
        "heroChannelId": { "type": [ "integer", "null" ] },
        "heroDeviceId": { "type": [ "integer", "null" ] },
        "heroDeviceName": { "type": [ "string", "null" ] },
        "heroRoleId": { "type": [ "integer", "null" ] },
        "startSleepDuration": { "type": "integer" },
        "preStartSleepDuration": { "type": "integer" },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "audioChannelLimit": { "type:": "integer" },
        "inputFormat1": { "type": "string" },
        "inputFormat2": { "type": "string" },
        "replaceSourceImage": { "type": [ "string", "null" ] },
        "clipcastReloadPolicy": { "type": [ "integer", "null" ] },
        "clipcastApiUrl": { "type": [ "string", "null" ] },
        "clipcastDirectory": { "type": [ "string", "null" ] },
        "heroChannel": { "type": [ "object", "null" ] },
        "videoRouter": {
          "type": "object",
          "properties": {
            "groupId": { "type": "integer" },
            "inputPort": { "type": [ "integer", "string" ] },
            "outputPort": { "type": [ "integer", "string" ] }
          },
          "required": [ "groupId", "inputPort", "outputPort" ],
          "additionalProperties": false
        },
        "imageOverlay": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/imageOverlay" }
          ]
        },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        }
      },
      "required": [ "heroApiUrlA", "heroApiUrlB", "heroChannelId", "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "titanLiveEncoders": {
      "properties": {
        "apiUrl": { "type": "string" },
        "apiPassword": { "type": "string" },
        "serviceName": { "type": "string" },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "startSleepDuration": { "type": "integer" },
        "preStartSleepDuration": { "type": "integer" },
        "muxes": {
          "type": "array",
          "items": {
            "title": "mux",
            "type": "object",
            "properties": {
              "name": { "type": "string" },
              "raiseOnError": { "type": "boolean" },
              "sendEndOfStream": { "type": [ "boolean", "null" ] },
              "type": {
                "type": "string",
                "enum": [
                  "TitanMux"
                ]
              },
              "encoderSpecific": {
                "type": "object",
                "oneOf": [
                  { "$ref": "#/definitions/titanMuxEncoders" }
                ]
              }
            },
            "required": [ "name", "type", "raiseOnError", "encoderSpecific" ]
          }
        },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        }
      },
      "required": [ "apiUrl", "apiPassword", "serviceName", "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "titanMuxEncoders": {
      "properties": {
        "apiUrl": { "type": "string" },
        "apiPassword": { "type": "string" },
        "serviceName": { "type": "string" },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "startSleepDuration": { "type": "integer" },
        "preStartSleepDuration": { "type": "integer" },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        }
      },
      "required": [ "apiUrl", "apiPassword", "serviceName", "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "harmonicNmxEncoders": {
      "properties": {
        "apiUrl": { "type": "string" },
        "apiUsername": { "type": "string" },
        "apiPassword": { "type": "string" },
        "servicePlanId": { "type": "string" },
        "outputTransportId": { "type": "string" },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "startSleepDuration": { "type": "integer" },
        "preStartSleepDuration": { "type": "integer" },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        }
      },
      "required": [ "apiUrl", "apiUsername", "apiPassword", "servicePlanId", "outputTransportId", "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "ceeblueEncoders": {
      "properties": {
        "apiUrl": { "type": "string" },
        "apiUsername": { "type": "string" },
        "apiPassword": { "type": "string" },
        "locationIp": { "type": "string" },
        "streamId": { "type": "string" },
        "transcodeTracks": { "type": "array" },
        "supportsContinuousTimeStamp": { "type": "boolean" },
        "startSleepDuration": { "type": "integer" },
        "preStartSleepDuration": { "type": "integer" },
        "inputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/inputs" }
            ]
          }
        },
        "outputs": {
          "type": "array",
          "items": {
            "oneOf": [
              { "$ref": "#/definitions/outputs" }
            ]
          }
        }
      },
      "required": [ "apiUrl", "apiUsername", "apiPassword", "locationIp", "streamId", "transcodeTracks", "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "customSource": {
      "properties": {
        "supportsContinuousTimeStamp": { "type": "boolean" }
      },
      "required": [ "supportsContinuousTimeStamp" ],
      "additionalProperties": false
    },
    "imageOverlay": {
      "properties": {
        "opacity": { "type": "integer" },
        "heightMultiplier": { "type": [ "integer", "null" ] },
        "height": { "type": [ "integer", "null" ] },
        "yOffset": { "type": "integer" },
        "xOffset": { "type": "integer" },
        "widthMultiplier": { "type": [ "integer", "null" ] },
        "width": { "type": [ "integer", "null" ] },
        "overlayImage": { "type": [ "string", "null" ] },
        "insertAtStart": { "type": "boolean" },
        "insertAtStartProfile": { "type": [ "string", "null" ] },
        "fadeInMs": { "type": [ "integer", "null" ] },
        "durationMs": { "type": [ "integer", "null" ] },
        "fadeOutMs": { "type": [ "integer", "null" ] }
      },
      "required": [ "opacity", "yOffset", "xOffset", "overlayImage", "insertAtStart" ],
      "additionalProperties": false
    },
    "heroFileServer": {
      "properties": {
        "fileName": { "type": "string" },
        "fileSuffix": { "type": "string" },
        "fileType": { "type": "integer" },
        "fileSaveControl": { "type": "integer" },
        "fileNaming": { "type": "integer" },
        "fileSizeUnit": { "type": "integer" },
        "fileSize": { "type": "integer" }
      },
      "required": [ "fileName" ],
      "additionalProperties": false
    },
    "uspLiveSchemaV1": {
      "properties": {
        "primaryPublishingPoint": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/uspLivePublishingPoint" }
          ]
        },
        "secondaryPublishingPoint": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/uspLivePublishingPoint" }
          ]
        },
        "tertiaryPublishingPoint": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/uspLivePublishingPoint" }
          ]
        }
      },
      "required": [ "primaryPublishingPoint", "secondaryPublishingPoint" ],
      "additionalProperties": false
    },
    "uspLiveSchemaV2": {
      "properties": {
        "publishingPoints": {
          "type": "array",
          "items": {
            "title": "publishingPoints",
            "type": "object",
            "oneOf": [
              { "$ref": "#/definitions/uspLivePublishingPoint" }
            ]
          },
          "required": [ "publishingPoints" ]
        }
      },
      "additionalProperties": false
    },
    "uspLivePublishingPoint": {
      "type": "object",
      "properties": {
        "publishingpointUrl": { "type": "string" },
        "archiverCapturePublishingpointUrl": { "type": "string" },
        "uspAPI": { "type": "string" },
        "uspAPIKey": { "type": "string" },
        "filePath": { "type": "string" },
        "create": { "type": "boolean" },
        "liveName": { "type": "string" },
        "liveVuDrmName": { "type": "string" },
        "id": { "type": "string" },
        "name": { "type": "string" },
        "statusCheckStrategy": {
          "type": "string",
          "enum": [ "ALL", "USP_ARCHIVE", "USP_API", "STATUS_PHP", "NONE" ]
        },
        "outputConfiguration": {
          "type": "object",
          "properties": {
            "outputIndexMinimum": { "type": "integer" },
            "outputIndexMaximum": { "type": "integer" },
            "isPrimary": { "type": "boolean" }
          }
        }
      },
      "required": [ "publishingpointUrl", "uspAPI", "uspAPIKey", "filePath" ]
    },
    "edgewareLive": {
      "type": "object",
      "properties": {
        "publishingPoints": {
          "type": "array",
          "items": {
            "title": "publishingPoints",
            "type": "object",
            "properties": {
              "configApiUrl": { "type": "string" },
              "statsApiUrl": { "type": "string" },
              "create": { "type": "boolean" },
              "name": { "type": "string" },
              "defaultConfig": { "type": "object" },
              "statusCheckStrategy": {
                "type": "string",
                "enum": [ "ALL", "EDGEWARE_TIMESTAMP", "NONE" ]
              }
            },
            "required": [ "defaultConfig", "configApiUrl", "statsApiUrl" ],
            "additionalProperties": false
          },
          "required": [ "publishingPoints" ]
        }
      },
      "additionalProperties": false
    },
    "mediaPackage": {
      "type": "object",
      "properties": {
        "publishingPoints": {
          "type": "array",
          "items": {
            "title": "publishingPoints",
            "type": "object",
            "properties": {
              "create": { "type": "boolean" },
              "id": { "type": "string" },
              "name": { "type": "string" },
              "manifestName": { "type": "string" },
              "statusCheckStrategy": {
                "type": "string",
                "enum": [ "ALL", "NONE", "MEDIA_PACKAGE" ]
              }
            },
            "required": [ "id" ],
            "additionalProperties": false
          },
          "required": [ "publishingPoints" ]
        }
      },
      "additionalProperties": false
    },
    "wowza": {
      "properties": {
        "primary": { "type": "boolean" },
        "address": { "type": "string" },
        "username": { "type": "string" },
        "password": { "type": "string" },
        "dynamicTargets": {
          "type": "object",
          "properties": {
            "targetNameSuffix": { "type": "string" },
            "sourceStreamPrefix": { "type": "string" },
            "sourceAudioStartPid": { "type": "integer" },
            "vhost": { "type": "string" },
            "profile": { "type": "string" },
            "serverName": { "type": "string" },
            "mediaCasterType": { "type": "string" }
          },
          "required": [ "targetNameSuffix", "sourceStreamPrefix", "sourceAudioStartPid" ],
          "additionalProperties": false
        }
      },
      "required": [ "primary", "address", "username", "password" ],
      "additionalProperties": true
    },
    "outputStreamLiveV1": {
      "$comment": "Generic representation of OutputStreams with 'live' prefix.",
      "properties": {
        "streamProtocol": { "enum": [ "HLS", "HLSe", "HSS", "DASH", "HDS" ] },
        "liveCdnPrimaryUrl": { "type": "string" },
        "liveCdnSecondaryUrl": { "type": [ "string", "null" ] },
        "liveOriginPrimaryUrl": { "type": "string" },
        "liveOriginSecondaryUrl": { "type": [ "string", "null" ] },
        "vudrmLiveCdnPrimaryUrl": { "type": [ "string", "null" ] }
      },
      "required": [ "streamProtocol", "liveCdnPrimaryUrl", "liveOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "outputStreamLiveV2": {
      "$comment": "Generic representation of OutputStreams wihtout 'live' prefix.",
      "properties": {
        "streamProtocol": { "enum": [ "HLS", "HLSe", "HSS", "DASH", "HDS" ] },
        "cdnPrimaryUrl": { "type": "string" },
        "cdnSecondaryUrl": { "type": [ "string", "null" ] },
        "originPrimaryUrl": { "type": "string" },
        "originSecondaryUrl": { "type": [ "string", "null" ] },
        "vudrmLiveCdnPrimaryUrl": { "type": [ "string", "null" ] }
      },
      "required": [ "streamProtocol", "cdnPrimaryUrl", "originPrimaryUrl" ],
      "additionalProperties": false
    },
    "inputs": {
      "title": "Inputs",
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "type": {
          "type": "string",
          "enum": [
            "UDP_RTP",
            "RTP_PULL",
            "RTMP",
            "RTMP_PULL",
            "SDI",
            "FILE",
            "SRT"
          ]
        },
        "inputSpecific": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/inputDefault" }
          ]
        }
      },
      "required": [ "type", "inputSpecific" ],
      "additionalProperties": false
    },
    "inputDefault": {
      "properties": {
        "address": { "type": "string" },
        "displayAddress": { "type": "string" },
        "id": { "type": "string" },
        "additonalAddresses": {
          "type": "array",
          "items": {
            "oneOf": [
              { "type": "string" }
            ]
          }
        }
      },
      "required": [ "address" ],
      "additionalProperties": false
    },
    "outputs": {
      "title": "Outputs",
      "type": "object",
      "properties": {
        "name": { "type": "string" },
        "type": {
          "type": "string",
          "enum": [
            "TS_UDP_HLS",
            "UDP_RTP",
            "HTTP_MSS",
            "HTTP_CMAF",
            "RTMP",
            "MEDIA_PACKAGE"
          ]
        },
        "outputSpecific": {
          "type": "object",
          "anyOf": [
            { "$ref": "#/definitions/outputDefault" }
          ]
        }
      },
      "required": [ "type", "outputSpecific" ],
      "additionalProperties": false
    },
    "outputDefault": {
      "properties": {
        "address": { "type": "string" },
        "id": { "type": "string" },
        "outputFormat": { "type": [ "string", "object" ] },
        "outputConfiguration": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/outputConfiguration" }
          ]
        }
      },
      "required": [ "address" ],
      "additionalProperties": false
    },
    "outputHttpCmaf": {
      "properties": {
        "address": { "type": "string" },
        "id": { "type": "string" },
        "outputFormat": { "type": "string" },
        "outputConfiguration": {
          "type": "object",
          "oneOf": [
            { "$ref": "#/definitions/outputConfiguration" }
          ]
        }
      },
      "required": [ "address" ],
      "additionalProperties": false
    },
    "outputConfiguration": {
      "properties": {
        "outputIndexMinimum": { "type": "integer" },
        "outputIndexMaximum": { "type": "integer" },
        "isPrimary": { "type": "boolean" },
        "audioOutputLimit": { "type": "integer" },
        "audioStartPid": { "type": "integer" }
      }
    },
    "uspLive2Vod": {
      "title": "Live 2 VOD Configuration for USP",
      "type": "object",
      "properties": {
        "frameAccurate": { "type": [ "boolean", "null" ] },
        "copyTimestamps": { "type": [ "boolean", "null" ] },
        "generateMp4": { "type": [ "boolean", "null" ] },
        "mezzanine": { "type": [ "boolean", "null" ] },
        "priority": { "type": [ "integer", "null" ] },
        "thumbnailTime": { "type": [ "string", "null" ] },
        "previewThumbnailsInterval": { "type": [ "integer", "null" ] },
        "transDrmType": {
          "type": "string",
          "enum": [
            "PASS_THROUGH",
            "CLEAR",
            "NEW_KEYS"
          ]
        },
        "filter": { "type": [ "string", "null" ] },
        "sources": {
          "type": "array",
          "items": {
            "title": "Sources",
            "type": "string"
          }
        },
        "previewThumbnailsBoundaries": {
          "type": [ "null", "array" ],
          "items": [
            {
              "type": "object",
              "properties": {
                "minimum": { "type": [ "null", "string" ] },
                "maximum": { "type": [ "null", "string" ] },
                "interval": { "type": "integer" }
              },
              "required": [ "interval" ]
            }
          ]
        }
      },
      "required": [ "frameAccurate", "copyTimestamps", "sources", "transDrmType" ],
      "additionalProperties": false
    },
    "edgewareLive2Vod": {
      "title": "Live 2 VOD Configuration for Edgeware",
      "type": "object",
      "properties": {
        "sourceRateLimit": { "type": "integer" },
        "channel": { "type": "string" },
        "ingest": { "type": "string" }
      },
      "required": [ "sourceRateLimit", "channel", "ingest" ],
      "additionalProperties": false
    },
    "videoResolution": {
      "title": "Video Resolution",
      "type": "object",
      "properties": {
        "width": { "type": "integer" },
        "height": { "type": "integer" }
      },
      "required": [ "width", "height" ]
    }
  }
}


Supported Actions

POST /channel/

Add a Channel.

{
  "id": "90b3e9c7-b304-479a-92c1-09ff4af001d5",
  "name": "channel-name",
  "referenceId": "reference-id-here",
  "configurationJson": "{...}"
}

Response: 200 OK


PUT /channel/{id}

Update a Channel by Id.

This request is the same as the above, but with the Id in the route instead of the body.

Response: 200 OK


GET /channel/

Get all Channels.

Query Parameters:

Name Type Required Description
noCache bool No Whether or not to skip cache. Defaults to False.

Response: 200 OK and JSON array containing multiple Channel objects.


GET /channel/{id}

Get Channel by Id.

Query Parameters:

Name Type Required Description
noCache bool No Whether or not to skip cache. Defaults to False.

Response:

200 OK and JSON containing Channel object.

or

204 No Content if no Channel exists with the given Id.



GET /channel/reference

Get Channel by Reference Id.

Query Parameters:

Name Type Required Description
id string Yes The reference ID. Must be percent-encoded.
noCache bool No Whether or not to skip cache. Defaults to False.

Response:

200 OK and JSON containing Channel object.

or

204 No Content if no Channel exists with the given Id.


GET /channel/statistics/{id}

Get statistics for the Channel by Id. This can be used to get the ingest stream, check the encoder locks, and the encoding state.

Response:

200 OK and JSON containing statistic information:

[
    {
        "stats": "{\r\n  \"isRemoteRecording\": 0,\r\n  \"start_time\": 1618917585,\r\n  \"postProcessing\": \"yes\",\r\n  \"isRecording\": 0,\r\n  \"isRunning\": 2,\r\n  \"name\": \"Channel-01\",\r\n  \"id\": 139,\r\n  \"state\": 2,\r\n  \"inputstate\": \"1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\"\r\n}",
        "isRunning": true,
        "encodingState": 3,
        "name": "Channel 01",
        "inputs": [
            {
                "inputType": 1,
                "addresses": [
                    "rtmp://127.0.0.1:1935/live/{stream-key}"
                ],
                "name": "Primary",
                "id": null,
                "displayAddress": "rtmp://0.1.88.171/live/{stream-key}"
            }
        ],
        "lockSummary": {
          "eventId": "26a0228e-f1b2-497d-9cb2-246ffc4d3224",
          "lockedAt": "1970-01-01T09:00:00Z"
        }
    }
]

Encoding States:

  • None = 0 - this means no status was available.
  • Idle = 1 - this means the encoder is not currently running but could be locked.
  • Starting = 2
  • Started = 3
  • Stopping = 4
  • Unreachable = 5 - this means the system failed to reach the encoder.

Notes:

  • The stats value varies from encoder vendor and is not guarunteed to be a JSON object.
  • The isRunning property is deprecated and instead favour checking the encodingState is “Started”.
  • The lockSummary object will be null for any channel not in use by the system.
  • Multiple statistic models are returned if the Channel contains multiple encoders and your integration should reflect this.

GET /channel/statistics/event/{id}

Get statistics for the Channel by Event ID. This can be used to get the ingest stream.

Response:

200 OK and JSON containing statistic information*

or

204 No Content if none are available.

*An example is shown below, but this varies between Encoder types.

[
    {
        "stats": "{\r\n  \"isRemoteRecording\": 0,\r\n  \"start_time\": 1618917585,\r\n  \"postProcessing\": \"yes\",\r\n  \"isRecording\": 0,\r\n  \"isRunning\": 2,\r\n  \"name\": \"Channel-01\",\r\n  \"id\": 139,\r\n  \"state\": 2,\r\n  \"inputstate\": \"1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\"\r\n}",
        "isRunning": true,
        "name": "Channel 01",
        "inputs": [
            {
                "inputType": 1,
                "addresses": [
                    "rtmp://127.0.0.1:1935/live/{stream-key}"
                ],
                "name": "Primary",
                "id": null,
                "displayAddress": "rtmp://0.1.88.171/live/{stream-key}"
            }
        ]
    }
]

GET /channel/{id}/events/

Get any Event(s) which have the given Channel set.

Query Parameters:

Name Type Required Description
pageSize int No Number of results to fetch per Page.
pageNumber int No Number of the page to fetch.
order QueryOrder No The order to sort by, either ASC or DESC. Defaults to ASC.
noCache bool No Whether or not to skip cache. Defaults to False.

Response: 200 OK and the following JSON structure, where results contains multiple Event objects.

{
  "results": [],
  "totalCount": 4,
  "pageSize": 4
}

DELETE /channel/{id}

Delete a Channel by Id.

Response: 200 OK or 204 No Content if the ID was not found.