19 September 2019

Ad_break enhancement

Added different marker types for <ad_break /> parameter for advanced_hls, fmp4_hls, and advanced_fmp4 (HLS manifest) output formats.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>[Action]</action> <!-- required-->
    <format>
        <output>[advanced_hls|fmp4_hls|advanced_fmp4]</output>
        <!-- multiple ad_breaks may be included -->
        <ad_break>
           <start>[StartTime]</start>
           <end>[EndTime]</end>
           <duration>[BreakDuration]</duration>
           <drop_segments>[yes|no]</drop_segments>
           <marker_type>[MarkerType]</marker_type>
           <id>[BreakID]</id>
        </ad_break>
        <ad_break>
           <!-- ad_break params -->
        </ad_break>
        <!-- multiple cue_inserts may be included -->
        <cue_insert>
           <start>[StartTime]</start>
           <end>[EndTime]</end>
           <duration>[BreakDuration]</duration>
           <drop_segments>[yes|no]</drop_segments>
           <marker_type>[MarkerType]</marker_type>
           <id>[BreakID]</id>
        </cue_insert>
        <cue_insert>
           <!-- cue_insert params -->
        </cue_insert>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[Action]",
        "format": {
            "output": "[advanced_hls|fmp4_hls|advanced_fmp4]",
            "ad_break": [
                {
                    "start": "[StartTime]",
                    "end": "[EndTime]",
                    "duration": "[BreakDuration]",
                    "drop_segments": "[yes|no]",
                    "marker_type": "[MarkerType]",
                    "id": "[BreakID]"
                }
            ],
            "cue_insert": [
                {
                    "start": "[StartTime]",
                    "end": "[EndTime]",
                    "duration": "[BreakDuration]",
                    "drop_segments": "[yes|no]",
                    "marker_type": "[MarkerType]",
                    "id": "[BreakID]"
                }
            ]
        }
    }
}
👍

SCTE35 credits

For SCTE35 opening and closing credits, you can use <cue_insert /> parameter block. It has the same sub-parameters as <ad_break /> except <marker_type/>.

Parameter

Description

Allowed Values

Default Values

  • *marker_type** (ad_break)

Break Marker Type

  • cue-out-in** — adds#EXT-X-CUE-OUT/EXT-X-CUE-IN* tag.
  • scte-35** — adds#EXT-X-SCTE35* tag.
  • cue** — adds#EXT-X-CUE tag*.
  • daterange** — adds#EXT-X-DATERANGE* tag.

cue-out-in

  • *marker_type** (cue_insert)
  • scte35-opening-credit** — adds#EXT-X-SCTE35* opening credits tag.
  • scte35-closing-credit** — adds#EXT-X-SCTE35* closing credits tag.

scte35-opening-credit

id

Marker ID attribute

Valid string

None

start

Place cue IN marker in it's value position of HLS manifest

  • positive float number in seconds
  • timecode in format HH:MM:SS[:;]FF
    HH – hours
    MM – minutes
    SS – seconds
    FF – frames
    [:;] – : – non drop-frame, ; – drop-frame;

None

end

Place cue OUT marker in it's value position of HLS manifest

  • positive float number in seconds
  • timecode in format HH:MM:SS[:;]FF
    HH – hours
    MM – minutes
    SS – seconds
    FF – frames
    [:;] – : – non drop-frame, ; – drop-frame;

None

duration

Specify the break duration in seconds.

  • positive integer number in seconds
  • timecode in format HH:MM:SS[:;]FF
    HH – hours
    MM – minutes
    SS – seconds
    FF – frames
    [:;] – : – non drop-frame, ; – drop-frame;

None

🚧

For duration and end parameters

If parameter is specified will be ignored.

Manifest examples

Parameter

Value

id

103038

start

1322

duration

195

drop_segments

yes

#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
...
#EXT-X-DISCONTINUITY
#EXT-X-CUE-OUT:DURATION=195.000,BREAKID=103038
...
#EXT-X-CUE-OUT-CONT:6.008/195.000
...
#EXT-X-CUE-IN
...
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
...
#EXT-X-DISCONTINUITY
#EXT-X-SCTE35:CUE="/DAlAAAAAAAAAP/wFAUAAZJ+f+/+AAAAAH4BC8qwAAAAAAAAYX3uzw==",ID="103038"
...
#EXT-X-SCTE35:CUE="/DAgAAAAAAAAAP/wDwUAAZJ+f0/+AAAAAAAAAAAAAI6soYY=",ID="103038"
...
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
...
#EXT-X-DISCONTINUITY
#EXT-X-CUE:TYPE="SpliceOut",ID=103038,TIME=887853233700,DURATION=195.000
...
#EXT-X-CUE:TYPE="SpliceOut",ID=103038,TIME=887853233700,DURATION=195.000,ELAPSED=6.008,CAID=eyJjdWVUeXBlIjoic3RhbmRhcmQiLCJrZXkiOiIiLCJ2YWx1ZSI6IiJ9
...
#EXT-X-ENDLIST
#EXTM3U
#EXT-X-TARGETDURATION:6
#EXT-X-VERSION:7
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
...
#EXT-X-DISCONTINUITY
#EXT-X-DATERANGE:ID="103038",START-DATE="2019-01T00:15:00Z\",DURATION=195.000,SCTE35-OUT=0xfc302500000000000000fff014050001927e7feffe000000007e010bcab0000000000000617dee
...
#EXT-X-DATERANGE:ID="103038",START-DATE="2019-01T00:15:00Z\",SCTE35-IN=0xfc302000000000000000fff00f050001927e7f4ffe000000000000000000008eaca186
...
#EXT-X-ENDLIST

Media request metadata

Added new parameter for AddMedia requests.

To pass custom data from AddMedia request to GetStatus response or Notifications you can add parameter to the level. This parameter accepts may be string, single xml node (JSON object) or multiple XML nodes (JSON array).

Request

<?xml version="1.0"?>
<query>
    <userid><<id>></userid>
    <userkey><<key>></userkey>
    <action>[AddMedia|AddMediaBenchmark]</action>
    <meta>Some random data</meta>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[AddMedia|AddMediaBenchmark]",
        "meta": "Some random data"
    }
}
<?xml version="1.0"?>
<query>
    <userid><<id>></userid>
    <userkey><<key>></userkey>
    <action>[AddMedia|AddMediaBenchmark]</action>
    <meta>
        <a>1</a>
        <b>2</b>
    </meta>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[AddMedia|AddMediaBenchmark]",
        "meta": {
            "a": "1"
            "b": "2"
        }
    }
}
<?xml version="1.0"?>
<query>
    <userid><<id>></userid>
    <userkey><<key>></userkey>
    <action>[AddMedia|AddMediaBenchmark]</action>
    <meta>foo</meta>
    <meta>
        <bar>baz</bar>
    </meta>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[AddMedia|AddMediaBenchmark]",
        "meta": [
            "foo",
            {"bar": "baz"}
        ]
    }
}

GetStatus Response

<?xml version="1.0"?>
<response>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>Some random data</meta>
</response>
{
    "response": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": "Some random data"
    }
}
<?xml version="1.0"?>
<response>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>
        <a>1</a>
        <b>2</b>
    </meta>
</response>
{
    "response": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": {
            "a": "1"
            "b": "2"
        }
    }
}
<?xml version="1.0"?>
<response>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>foo</meta>
    <meta>
        <bar>baz</bar>
    </meta>
</response>
{
    "response": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": [
            "foo",
            {"bar": "baz"}
        ]
    }
}

HTTP Notification Body

<?xml version="1.0"?>
<result>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>Some random data</meta>
</result>
{
    "result": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": "Some random data"
    }
}
<?xml version="1.0"?>
<result>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>
        <a>1</a>
        <b>2</b>
    </meta>
</result>
{
    "result": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": {
            "a": "1"
            "b": "2"
        }
    }
}
<?xml version="1.0"?>
<result>
    <id>[MediaID]</id>
    <userid><<id>></userid>
    <sourcefile>[SourceFile]</sourcefile>
    <status>[MediaStatus]</status>
    <!-- ... -->
    <meta>foo</meta>
    <meta>
        <bar>baz</bar>
    </meta>
</result>
{
    "result": {
        "id": "[MediaID]",
        "userid": "<<id>>",
        "sourcefile": "[SourceFile]",
        "status": "[MediaStatus]",
        "meta": [
            "foo",
            {"bar": "baz"}
        ]
    }
}

Email Notification Body

...
Media ID: [MediaID]
Source file: [SourceFile]
Status: [MediaStatus]
Meta: Some random data
...
Media ID: [MediaID]
Source file: [SourceFile]
Status: [MediaStatus]
Meta: {
    "a": "1"
    "b": "2"
}
...
Media ID: [MediaID]
Source file: [SourceFile]
Status: [MediaStatus]
Meta: [
    "foo",
    {"bar": "baz"}
]

Advanced_fmp4 fragment duration

Added option to customize fragment duration for advanced_fmp4 output format.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>[Action]</action> <!-- required-->
    <format>
        <output>advanced_fmp4</output>
        <fragment_duration>[Duration]</fragment_duration>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[Action]",
        "format": {
            "output": "advanced_fmp4",
            "fragment_duration": "[Duration]"
        }
    }
}

Parameter

Description

Available Values

Default Value

fragment_duration

fMP4 fragment duration in seconds

Positive integer number

equals to <segment_duration />

🚧

For fragment_duration parameter

<fragment_duration /> parameter available only for advanced_fmp4 output format.