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/>.

ParameterDescriptionAllowed ValuesDefault Values
marker_type (ad_break)Break Marker Typecue-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
idMarker ID attributeValid stringNone
startPlace 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
endPlace 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
durationSpecify 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

ParameterValue
id103038
start1322
duration195
drop_segmentsyes
#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]"
        }
    }
}
ParameterDescriptionAvailable ValuesDefault Value
fragment_durationfMP4 fragment duration in secondsPositive integer numberequals to <segment_duration />

🚧

For fragment_duration parameter

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