VUFLOWS

Vuflows are used to hook the VIS into a TaskEngine setup.


Vuflow Object

{
  "Id": "a5d067bd-cb45-4d7b-814c-e1caa0833304",
  "Name": "Example Vuflow",
  "ConfigurationJson": "{...}"
}

Configuration JSON

Example:

To be defined.

Schema:

{
    "vuflows": {
        "type": "array",
        "items": {
            "title": "vuflow",
            "type": "object",
            "properties": {
                "name": {
                    "type": "string"
                },
                "ismUrl": {
                    "type": "string"
                },
                "type": {
                    "type": "string",
                    "enum": [
                        "TaskEngine"
                    ]
                },
                "taskEngineSpecific": {
                    "type": "object",
                    "oneOf": [
                        {
                            "$ref": "#/definitions/taskEngines"
                        }
                    ]
                },
                "streamingServer": {
                    "title": "streaming Server",
                    "type": "object",
                    "properties": {
                        "type": {
                            "type": "string",
                            "enum": [
                                "USP"
                            ]
                        },
                        "streamingServerSpecific": {
                            "type": "object",
                            "oneOf": [
                                {
                                    "$ref": "#/definitions/uspVod"
                                },
                                {
                                    "$ref": "#/definitions/wowzaVod"
                                }
                            ]
                        }
                    }
                },
                "outputUrls": {
                    "type": "array",
                    "items": {
                        "title": "stream",
                        "type": "object",
                        "anyOf": [
                            {
                                "$ref": "#/definitions/hlsVod"
                            },
                            {
                                "$ref": "#/definitions/hlseVod"
                            },
                            {
                                "$ref": "#/definitions/hssVod"
                            },
                            {
                                "$ref": "#/definitions/dashVod"
                            },
                            {
                                "$ref": "#/definitions/hdsVod"
                            }
                        ]
                    }
                }
            },
            "required": [
                "name",
                "type",
                "ismUrl",
                "taskEngineSpecific",
                "streamingServer",
                "outputUrls"
            ]
        }
    },
    "definitions": {
    "taskEngines": {
      "properties": {
        "apiUrl": { "type": "string" },
        "vuflowGuiUrl": { "type": "string" },
        "callbackUrls": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [ "apiUrl", "vuflowGuiUrl" ],
      "additionalProperties": false
    },
    "uspVod": {
      "properties": {
        "primaryPublishingPoint": {
          "type": "object",
          "properties": {
            "uspAPI": { "type": "string" },
            "uspAPIKey": { "type": "string" }
          },
          "required": [ "uspAPI", "uspAPIKey" ]
        },
        "secondaryPublishingPoint": {
          "type": "object",
          "properties": {
            "uspAPI": { "type": "string" },
            "uspAPIKey": { "type": "string" }
          },
          "required": [ "uspAPI", "uspAPIKey" ]
        }
      },
      "required": [ "primaryPublishingPoint", "secondaryPublishingPoint" ],
      "additionalProperties": false
    },
    "wowzaVod": {
      "properties": {
        "not set": { "type": "string" }
      },
      "additionalProperties": false
    },
    "hlsVod": {
      "properties": {
        "streamProtocol": { "enum": [ "HLS" ] },
        "vodCdnPrimaryUrl": {
          "type": "string"
        },
        "vodCdnSecondaryUrl": {
          "type": "string"
        },
        "vodPrivateUrl": {
          "type": "string"
        },
        "vodOriginPrimaryUrl": {
          "type": "string"
        },
        "vodOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "vodCdnPrimaryUrl", "vodOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hlseVod": {
      "properties": {
        "streamProtocol": { "enum": [ "HLSe" ] },
        "vodCdnPrimaryUrl": {
          "type": "string"
        },
        "vodCdnSecondaryUrl": {
          "type": "string"
        },
        "vodPrivateUrl": {
          "type": "string"
        },
        "vodOriginPrimaryUrl": {
          "type": "string"
        },
        "vodOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "vodCdnPrimaryUrl", "vodOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hssVod": {
      "properties": {
        "streamProtocol": { "enum": [ "HSS" ] },
        "vodCdnPrimaryUrl": {
          "type": "string"
        },
        "vodCdnSecondaryUrl": {
          "type": "string"
        },
        "vodPrivateUrl": {
          "type": "string"
        },
        "vodOriginPrimaryUrl": {
          "type": "string"
        },
        "vodOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "vodCdnPrimaryUrl", "vodOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "dashVod": {
      "properties": {
        "streamProtocol": { "enum": [ "DASH" ] },
        "vodCdnPrimaryUrl": {
          "type": "string"
        },
        "vodCdnSecondaryUrl": {
          "type": "string"
        },
        "vodPrivateUrl": {
          "type": "string"
        },
        "vodOriginPrimaryUrl": {
          "type": "string"
        },
        "vodOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "vodCdnPrimaryUrl", "vodOriginPrimaryUrl" ],
      "additionalProperties": false
    },
    "hdsVod": {
      "properties": {
        "streamProtocol": { "enum": [ "HDS" ] },
        "vodCdnPrimaryUrl": {
          "type": "string"
        },
        "vodCdnSecondaryUrl": {
          "type": "string"
        },
        "vodPrivateUrl": {
          "type": "string"
        },
        "vodOriginPrimaryUrl": {
          "type": "string"
        },
        "vodOriginSecondaryUrl": {
          "type": "string"
        }
      },
      "required": [ "streamProtocol", "vodCdnPrimaryUrl", "vodOriginPrimaryUrl" ],
      "additionalProperties": false
    }
  }
}

Task Engine Object

A parsed Vuflow will be returned as a Task Engine object:

{
  "Name": "Task Engine Example",
  "VuflowType": 0,
  "VuflowDetails": {},
  "StreamingServerDetails": {},
  "OutputStreams": [
    {
      "StreamProtocol": 0,
      "VodCdnPrimaryUrl": "cdn-primary-url",
      "VodCdnSecondaryUrl": "cdn-secondary-url",
      "VodOriginPrimaryUrl": "origin-primary-url",
      "VodOriginSecondaryUrl": "origin-secondary-url",
      "VodPrivateUrl": "origin-private-url"
    }
  ],
  "CallbackUrls": [
    "url-one"
  ],
  "IsmUrl": "ism-url-here"
}

Vuflow Types:

TaskEngine = 0

Stream Protocols:

HLS = 0
HSS = 1
DASH = 2
HDS = 3
HLSe = 4

Supported Actions

POST /vuflow/

Add a Vuflow.

Request Body:

{
  "Name": "Example Vuflow",
  "ConfigurationJson": "{...}"
}

Response: 200 OK or 400 Bad Request if the JSON is rejected.


PUT /vuflow/{id}

Update a Vuflow by Id.

Request Body:

{
  "Name": "Example Vuflow",
  "ConfigurationJson": "{...}"
}

Response: 200 OK or 400 Bad Request if the JSON is rejected.


GET /vuflow/{id}

Get Vuflow by Id.

Response:

200 OK and JSON containing the Vuflow object.

or

204 No Content if no Vuflow was found.


GET /vuflow/

Get all Vuflows.

Response: 200 OK and a JSON array containing multiple Vuflow objects.


GET /vuflow/taskengines/{id}

Get the specified Vuflow as a parsed TaskEngine object.

Response: 200 OK and JSON containing the TaskEngine object.


DEL /vuflow/{id}

Delete a Vuflow by Id.

Response: 200 OK or 404 Not Found if the specified Vuflow is not found.