Compose Playlists
Compose Playlists are playlists of content which should be played out in order. Each Playlist Item can be sourced in multiple ways, for example, it could reference an Event in the system, or it could be a direct URL to the content. Support for a given Playlist Item Type is defined in more detail below.
There are two mechanisms for Composing a Playlist, either via a Workflow or via an Encoder. For this API reference, use of a Workflow is referred to a “Standard Composition” and use of an Encoder is “Encoder Composition”. Standard Composition will require a generation stage before the content is available for streaming, whereas Encoder Composition produces a Live Event and must follow normal Live Event operations. Crucially, Encoder Composition behaves differently and produces a different Event type, therefore separate endpoints and settings are available.
Note: The following API supports a “DateOrTime” concept, which indicates the value can be either a full DateTime (ISO8601) or just a Time (hh:mm:ss.fff).
Compose Playlist Object
{
"id": "3a582b0c-1632-4afc-978b-d19c8cae1cc2",
"name": "My Playlist",
"items": [
{
"type": 0,
"value": "a7945075-a400-497d-896e-ce2163f60305",
"properties": {},
"markers": null
}
],
"looped": false,
"liveStreamStart": null
}
Note: Playlist structure is generic, and therefore includes properties that may be specific to a type of Composition.
Playlist Item Type
The system supports different sources for a Playlist Item:
0 = EVENT
1 = DIRECT_FULL_MP4
2 = DIRECT_DREF_MP4
The support for using each type does vary though, with currently standard Compose only supporting EVENT
Playlist Items, and Composing via an Encoder supporting both DIRECT_FULL_MP4
and EVENT
Playlist Items. Currently support for DIRECT_DREF_MP4
is not available.
Playlist Item Properties
Playlist Items can support a Properties
object, which can be used to provide additional settings, and information on each item. Any properties that are not “supported” are simply returned from the API as-is.
Standard Composition Properties:
Property | Supported By | Value Type | Notes |
---|---|---|---|
start | EVENT | DateOrTime | Optional. Allows trimming of content. |
end | EVENT | DateOrTime | Optional. Allows trimming of content. |
frameAccurate | EVENT | bool | Optional. Specifies to use FrameAccuracy or not. The default is client specific. |
outputDescription | EVENT | bool | Optional. |
Note: No specific Property support for Encoder Composition, although custom properties are supported.
Playlist Item Markers
Playlist Items can support a markers
array, which can be used to insert SCTE-35 markers where supported.
{
"startAt": "DateOrTime",
"duration": "00:00:30",
"frameAccurate": null,
"type": 0
}
Where Type
can be:
0 = INSERTION
- marker indicates insertion of content.1 = REPLACEMENT
- marker indicates replacement of content.
Additionally, frameAccurate
as in the Properties section, will match the client-specific default if not provided.
Note: Not supported by Encoder Composition.
Supported Actions
POST /compose/
Adds a standard Composition Event + Playlist.
Request Body:
{
"event": {
"id": null,
"workflowId": null,
"roomId": null,
"eventTypeId": null,
"categoryIds": [],
"title": "Compose Event",
"description": null,
"refId": null,
"externalId": null,
"setPrivateAFterGeneration": false,
"vodDrm": false
},
"playlist": {
"name": "My Playlist",
"liveStreamStart": null,
"items": [
{
"type": 0,
"value": "a7945075-a400-497d-896e-ce2163f60305",
"properties": {},
"markers: []
}
]
}
}
Notes:
id
is optional but can be provided if you have a desired GUID for the Event.- Supported Playlist Item Types:
EVENT
only. - Providing a
liveStreamStart
time in the future will have the Event enter aCOMPOSE_WAITING
state until the stream is available. liveStreamStart
is something your underlying license needs to support, and if not licensed then generation will fail.
Response: 201 Created
and the created Event’s GUID.
POST /compose/encoder/
Adds an Encoder Composition Event + Playlist.
Request Body:
{
"event": {
"id": null,
"channelId": "54a40084-9c01-44c0-a28d-9785815e761b",
"roomId": null,
"eventTypeId": null,
"categoryIds": [],
"infrastructureProfileId": null,
"title": "Compose Event w/ Encoder",
"description": null,
"refId": null,
"externalId": null,
"scheduledStart": null,
"scheduledEnd": null,
"scheduledChannelStart": null,
"scheduledChannelEnd": null,
"scheduledProvisionAt": null,
"scheduledTerminateAt": null,
"autoStart": false,
"autoEnd": false,
"autoPublish": false,
"autoStartPublications": false,
"autoProvision": false,
"autoTerminate": false,
"drmJson": null
},
"playlist": {
"name": "My Playlist",
"looped": false,
"items": [
{
"type": 0,
"value": "a7945075-a400-497d-896e-ce2163f60305",
"properties": {},
"markers: []
}
]
}
}
Notes:
id
is optional but can be provided if you have a desired GUID for the Event.channelId
is required in order to validate the playlist, and that the chosen Encoder supports Composition.- Supported Playlist Item Types:
EVENT
andDIRECT_FULL_MP4
.
Response: 201 Created
and the created Event’s GUID.
PUT /compose/event/{eventId}
Updates a standard Composition Playlist for a Compose Event.
Request Body:
{
"name": "My Playlist",
"looped": false,
"items": [
{
"type": 0,
"value": "a7945075-a400-497d-896e-ce2163f60305",
"properties": {},
"markers: []
}
]
}
Notes:
- Supported Playlist Item Types:
EVENT
only.
Response: 200 OK
and the JSON containing the Compose Playlist.
PUT /compose/encoder/event/{eventId}
Adds or Updates an Encoder Composition Playlist for a Live Event.
Request Body:
{
"name": "My Playlist",
"looped": false,
"items": [
{
"type": 0,
"value": "a7945075-a400-497d-896e-ce2163f60305",
"properties": {},
"markers: []
}
]
}
Notes:
- Supported Playlist Item Types:
EVENT
andDIRECT_FULL_MP4
.
Response: 200 OK
and the JSON containing the Compose Playlist.
PUT /compose/event/{eventId}/drm/
Set’s the DRM for the standard Compose Event.
Notes:
- DRM for Encoder Composition is not supported here.
Response: 200 OK
GET /compose/{eventId}
Gets a Compose Playlist by Event ID.
Response: 200 OK
and JSON containing the Compose Playlist object
GET /compose/clone/{sourceEventId}
Clones a Compose Playlist from a source Event to a target Event.
Query Parameters:
Name | Type | Required | Description |
---|---|---|---|
targetEventId | Guid | Yes | The target Event’s ID. |
Response: 201 Created
and JSON containing the Compose Playlist object
DEL /compose/{eventId}
Remove a Live Compose Playlist by Event ID.
Response: 200 OK
or 400 Bad Request
if the Playlist or Event does not exist.