12 July 2017

Quality Control

Quality Control(qc) is a feature that allows you to check your media quality while it processing.
Also you could check external media by adding 'qc_check_only' output format.

📘

Note:

For now QC feature available for advanced_hls format only!

Test NameAPI Param Name
Output Validation Tests
Check B-Frames Present<qc_b_frames_present>
Check B-Frames DTS grow<qc_bframe_dts_grow>
IDR interval is maintained<qc_idr_interval>
Closed Captions(608/708) are present and maintained<qc_captions_presented>
PCR interval is maintained<qc_pcr_interval>
PID interval is maintained<qc_pid_interval>
Each segment starts with IDR<qc_segments_start_with_idr>
No short segments<qc_short_segment>
Validate DTS<qc_validate_dts>
Validate PTS<qc_validate_pts>
Manifest Validation Tests
Master manifest has proper bitrate<qc_bitrate_declaration>
Master manifest has proper codec<qc_codec_declaration>
Discontinuity tags are proper placement<qc_discontinuity_tags>
Proper DRM URI<qc_drm_uri>
HLS version number<qc_hls_version_number>
CUE-OUT:0 proper placement<qc_match_breakpoints>
Check Sample AES Proper encryption<qc_proper_sample_aes_encryption_declared>
Target segment duration<qc_target_segment_duration>
Declared segment duration is correct<qc_validate_segment_duration>

Code Example:

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>AddMedia</action>
    <qc_notify>[QCNotifyURL]</qc_notify>
    <source>[SourceFile|SourcePlaylist]</source><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc>
            <!-- Format Validation Tests -->
            <qc_test_name_1>
                <!-- Tests Params -->
                <severity>[fatal|warning]</severity>
            </qc_test_name_1>
            <qc_test_name_2>
                <!-- Tests Params -->
            </qc_test_name_2>
            <!-- Multiple Tests -->
            <qc_test_name_N>
                <!-- Tests Params -->
            </qc_test_name_N>
        </qc>
        <stream>
            <qc>
                <!-- Stream Validation Tests -->
                <qc_test_name_1>
                    <!-- Tests Params -->
                    <severity>[fatal|warning]</severity>
                </qc_test_name_1>
                <qc_test_name_2>
                    <!-- Tests Params -->
                </qc_test_name_2>
                <!-- Multiple Tests -->
                <qc_test_name_N>
                    <!-- Tests Params -->
                </qc_test_name_N>
            </qc>
        </stream>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "AddMedia",
        "qc_notify": "[QCNotifyURL]",
        "source": "[SourceFile|SourcePlaylist]",
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_test_name_1": {
                    "severity": "[fatal|warning]"
                },
                "qc_test_name_2": {},
                "qc_test_name_n": {}
            },
            "stream": {
                "qc": {
                    "qc_test_name_1": {
                        "severity": "[fatal|warning]"
                    },
                    "qc_test_name_2": {},
                    "qc_test_name_n": {}
                }
            }
        }
    }
}

Common tests params:

FieldDescriptionAllowed ValuesDefault Value
severityTest severity Levelwarning – Tests with 'warning' severity generate messages in report but qc process will continue.
fatal – Tests with 'fatal' severity will stop QC process.
warning

<?xml version="1.0"?>
<query>
    <!-- Main fields -->
    <userid><<id>></userid>
    <userkey><<key>></userkey>
    <action>[Action]</action>
    <source>[SourceFile]</source>
    <notify_format>[xml|json]</notify_format>
    <qc_notify>[QCNotifyURL]</qc_notify>
    <format>
        <!-- Format fields -->
    </format> 
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[Action]",
        "source": "[SourceFile]",
        "notify_format": "[xml|json]",
        "qc_notify": "[QCNotifyURL]",
        "format": {}
    }
}

QC_Notify

Can be either an HTTP(S) URL for the script or a mailto: link with email address for which notification will be sent when QC processing finished for each output format.

Callback Format

<?xml version="1.0"?>
<report>
     <mediaID>[MediaID]</mediaID>
     <queueID>[QueueID]</queueID>
     <status>[QCStatus]</status>
     <passed>
         <test>
             <name>[QCTestName]</name>
             <filesProcessed>[FilesCount]</filesProcessed>
         </test>
         <test>
             <!-- Test params -->
         </test>
     </passed>
     <warnings>
         <!-- Failed Tests with severity set to 'warning' -->
         <warning>
             <streamID>[StreamID]</streamID>
             <testName>[QCTestName]</testName>
             <fileName>[FileName]</fileName>
             <message>[Message]</message>
         </warning>
         <warning>
             <!-- Test warning params -->
         </warning>
     </warnings>
     <errors>
         <!-- Failed Tests with severity set to 'failed' -->
         <error>
             <streamID>[StreamID]</streamID>
             <testName>[QCTestName]</testName>
             <fileName>[FileName]</fileName>
             <message>[Message]</message>
         </error>
         <error>
             <!-- Test failed params -->
         </error>
     </errors>
</report>
{
    "report": {
        "mediaid": "[MediaID]",
        "queueid": "[QueueID]",
        "status": "[QCStatus]",
        "passed": {
            "test": [
                {
                    "name": "[QCTestName]",
                    "filesprocessed": "[FilesCount]"
                }
            ]
        },
        "warnings": {
            "warning": [
                {
                    "streamid": "[StreamID]",
                    "testname": "[QCTestName]",
                    "filename": "[FileName]",
                    "message": "[Message]"
                }
            ]
        },
        "errors": {
            "error": [
                {
                    "streamid": "[StreamID]",
                    "testname": "[QCTestName]",
                    "filename": "[FileName]",
                    "message": "[Message]"
                }
            ]
        }
    }
}

Request:

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <queueid>[QueueID]</queueid><!-- OPTIONAL -->
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": "[MediaID]",
        "queueid": "[QueueID]"
    }
}
Field NameDescriptionAllowed ValuesDefault Values
mediaidMedia IDPositive Number
queueidFormat IDPositive Number

Response:

Possible QC Statuses:

NameDescription
TranscodingQC not started since transcoding job is not finished
ValidatingQC is in progress
PassedQC sucessfully finished. All tests passed.
QuarantinedSome QC Tests failed and output was sent to quarantine destination
FailedCritical QC Tests failed
StoppedQC process was suddenly stopped due to error
<?xml version="1.0"?>
<response>
    <format>
        <QueueID>[QueueID]</QueueID>
        <report>
            <mediaID>[MediaID]</mediaID>
            <queueID>[QueueID]</queueID>
            <status>[QCStatus]</status>
            <passed>
                <test>
                    <name>[QCTestName]</name>
                    <filesProcessed>[FilesCount]</filesProcessed>
                </test>
                <test>
                    <!-- Test params -->
                </test>
            </passed>
            <warnings>
                <!-- Failed Tests with severity set to 'warning' -->
                <warning>
                    <streamID>[StreamID]</streamID>
                    <testName>[QCTestName]</testName>
                    <fileName>[FileName]</fileName>
                    <message>[Message]</message>
                </warning>
                <warning>
                    <!-- Test warning params -->
                </warning>
            </warnings>
            <errors>
                <!-- Failed Tests with severity set to 'failed' -->
                <error>
                    <streamID>[StreamID]</streamID>
                    <testName>[QCTestName]</testName>
                    <fileName>[FileName]</fileName>
                    <message>[Message]</message>
                </error>
                <error>
                    <!-- Test failed params -->
                </error>
            </errors>
        </report>
    </format>
    <format>
        <!-- Format QC Tests report -->
    </format>
</response>
{
    "response": {
        "format": [
            {
                "queueid": "[QueueID]",
                "report": {
                    "mediaid": "[MediaID]",
                    "queueid": "[QueueID]",
                    "status": "[QCStatus]",
                    "passed": {
                        "test": [
                            {
                                "name": "[QCTestName]",
                                "filesprocessed": "[FilesCount]"
                            }
                        ]
                    },
                    "warnings": {
                        "warning": [
                            {
                                "streamid": "[StreamID]",
                                "testname": "[QCTestName]",
                                "filename": "[FileName]",
                                "message": "[Message]"
                            }
                        ]
                    },
                    "errors": {
                        "error": [
                            {
                                "streamid": "[StreamID]",
                                "testname": "[QCTestName]",
                                "filename": "[FileName]",
                                "message": "[Message]"
                            }
                        ]
                    }
                }
            }
        ]
    }
}

Checks that b-frames present in main profile encodes and not present in baseline profiles

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_b_frames_present>
                <value>[yes|no]</value>
                <severity>[fatal|warning]</severity>
            </qc_b_frames_present>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_b_frames_present": {
                    "value": "[yes|no]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueCheck if b-frames present or notyes, no
severitywarning, fatalwarning

Checks growing of the B frames pkt_dts value.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_bframe_dts_grow>
                <severity>[fatal|warning]</severity>
            </qc_bframe_dts_grow>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_bframe_dts_grow": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalwarning

Checks that IDR interval is maintained with presented deviation

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_idr_interval>
                <deviation>[Number]</deviation>
                <severity>[fatal|warning]</severity>
            </qc_idr_interval>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_idr_interval": {
                    "deviation": "[Number]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
deviationIDR interval deviationNumber
severitywarning, fatalwarning

Checks that Closed Captions(608/708) are present and maintained

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_captions_presented>
                <type>[CaptionType]</type>
                <!-- Multiple Caption Types -->
                <severity>[fatal|warning]</severity>
            </qc_captions_presented>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_captions_presented": {
                    "type": "[CaptionType]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
typeClosed Captions Type608, 708
severitywarning, fatalwarning

Checks PCR interval

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_pcr_interval>
                <value>[Number]</value>
                <severity>[fatal|warning]</severity>
            </qc_pcr_interval>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_pcr_interval": {
                    "value": "[Number]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valuePCR interval valuePositive integer40
severitywarning, fatalwarning

Check that PID interval is maintained

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_pid_interval>
                <value>[Number]</value>
                <severity>[fatal|warning]</severity>
            </qc_pid_interval>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_pid_interval": {
                    "value": "[Number]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valuePID interval valuePositive integer700
severitywarning, fatalwarning

Analyzes GOP structure. Checks that each segment starts with IDR.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_segments_start_with_idr>
                <severity>[fatal|warning]</severity>
            </qc_segments_start_with_idr>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_segments_start_with_idr": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalwarning

Checks that there no segments(.ts files) with duration shorter than N seconds.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_short_segment>
                <value>[Number]</value>
                <severity>[fatal|warning]</severity>
            </qc_short_segment>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_short_segment": {
                    "value": "[Number]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueminimum segment duration in secondsPositive integer1
severitywarning, fatalwarning

Check that DTS values grow up and DTS greater than PCR

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_validate_dts>
                <severity>[fatal|warning]</severity>
            </qc_validate_dts>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_validate_dts": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalfatal

Checks if Presentation Time Stamp(PTS) repetition is less than 700ms

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_validate_pts>
                <severity>[fatal|warning]</severity>
            </qc_validate_pts>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_validate_pts": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalfatal

Checks that proper bitrate information declared in master manifest

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_bitrate_declaration>
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_bitrate_declaration>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_bitrate_declaration": {
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
allowed_deviationDuration deviation in percent0 to 100 integer20
severitywarning, fatalwarning

Checks that proper codec information declared in master manifest

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_codec_declaration>
                <severity>[fatal|warning]</severity>
            </qc_codec_declaration>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_codec_declaration": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalwarning

Checks that discontinuity tags are placed at program segment boundaries

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_discontinuity_tags>
                <value>[ProgramSegmentStart1-ProgramSegmentEnd1]</value>
                <value>[ProgramSegment2Start2-ProgramSegmentEnd2]</value>
                <!-- Multiple value tags -->
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_discontinuity_tags>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_discontinuity_tags": {
                    "value": [
                        "[ProgramSegmentStart1-ProgramSegmentEnd1]",
                        "[ProgramSegment2Start2-ProgramSegmentEnd2]"
                    ],
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueProgram Segment Boudaries2 positive integers in fromat 'start-end'
allowed_deviationDuration deviation in percent0 to 100 integer10
severitywarning, fatalwarning

Checks that proper DRM URI set for each DRM system

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_drm_uri>
                <severity>[fatal|warning]</severity>
            </qc_drm_uri>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_drm_uri": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalwarning

Checks HLS version

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_hls_version_number>
                <value>[Number]</value>
                <severity>[fatal|warning]</severity>
            </qc_hls_version_number>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_hls_version_number": {
                    "value": "[Number]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueHLS Version1 to 7 integer
severitywarning, fatalwarning

Checks that CUE-OUT:0 tag is placed at program segment boundaries – matches declared breakpoints in the input.json

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_match_breakpoints>
                <value>[ProgramSegmentStart1-ProgramSegmentEnd1]</value>
                <value>[ProgramSegment2Start2-ProgramSegmentEnd2]</value>
                <!-- Multiple value tags -->
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_match_breakpoints>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_match_breakpoints": {
                    "value": [
                        "[ProgramSegmentStart1-ProgramSegmentEnd1]",
                        "[ProgramSegment2Start2-ProgramSegmentEnd2]"
                    ],
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueProgram Segment Boudaries2 positive integers in fromat 'start-end'
allowed_deviationDuration deviation in percent0 to 100 integer10
severitywarning, fatalwarning

Checks that sum of EXT_INF data from each profile for each program segment in the manifest exactly matches the durations declared in the output.json

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_match_durations>
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_match_durations>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_match_durations": {
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
allowed_deviationDuration deviation in percent0 to 100 integer10
severitywarning, fatalwarning

Checks that proper Sample AES encryption is declared

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_proper_sample_aes_encryption_declared>
                <severity>[fatal|warning]</severity>
            </qc_proper_sample_aes_encryption_declared>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_proper_sample_aes_encryption_declared": {
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
severitywarning, fatalwarning

Checks segment duration.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- required -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- required -->
        <!-- Format fields -->
        <qc> 
            <qc_target_segment_duration>
                <value>[Number]</value>
                <minimum_duration>[Number]</minimum_duration>
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_target_segment_duration>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": "[MediaID]",
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_target_segment_duration": {
                    "value": "[Number]",
                    "minimum_duration": "[Number]",
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
valueSegment Duartion in secondsPositive integer
minimum_durationMinimum segment duration in seconds. Shorter segments should be merged with previous segment.Positive integer1
allowed_deviationDuration deviation in percent0 to 100 integer10
severitywarning, fatalwarning

Checks that segment duration declared in manifests is actual.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>GetQCStatus</action>
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <mediaid>[MediaID]</mediaid><!-- REQUIRED -->
    <format>
        <output>[advanced_hls|qc_check_only]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc> 
            <qc_validate_segment_duration>
                <allowed_deviation>[Percent]</allowed_deviation>
                <severity>[fatal|warning]</severity>
            </qc_validate_segment_duration>
        </qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "GetQCStatus",
        "mediaid": [
            "[MediaID]",
            "[MediaID]"
        ],
        "format": {
            "output": "[advanced_hls|qc_check_only]",
            "qc": {
                "qc_validate_segment_duration": {
                    "allowed_deviation": "[Percent]",
                    "severity": "[fatal|warning]"
                }
            }
        }
    }
}
FieldDescriptionAllowed ValuesDefault Value
allowed_deviationDuration deviation in percent0 to 100 integer10
severitywarning, fatalwarning

fMP4 HLS

Added new advanced multibitrate output format fmp4_hls.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>[Action]</action> <!-- required-->
    <format>
        <output>fmp4_hls</output>
        <stream>
            <!-- [Video settings params](ref:VideoSettings) -->
            <profile>[high|main|baseline]</profile>
            <!-- [Audio settings params](ref:AudioSettings) -->
            <!-- [Other format params](ref:OtherFormatOptions) -->
            <!-- [Closed Captions params](ref:ClosedCaptions) -->
            <!-- [Editing features params](ref:EditingFeatures) -->
            <still_image>[no|each_segment|first_segment]</still_image>
            <still_image_time>[Time]</still_image_time>
            <still_image_size>[Size]</still_image_size>
            <byte_range>[yes|no]</byte_range>
            <add_iframe_stream>[yes|no]</add_iframe_stream>
            <audio_only>[yes|no]</audio_only>
            <video_only>[yes|no]</video_only>
            <group_id>[GroupID]</group_id>
            <use_group_id>[CommaSeparatedList]</use_group_id>
            <playlist_version>[Valid EXT-X-VERSION]</playlist_version>
            <sub_path>[Playlist sub path]</sub_path>
            <media_path>[Playlist sub path]</media_path>
            <!-- Manifests fields -->
            <manifest>
                <basename>[BaseName]</basename> <!-- required-->
                <add_to_manifest>[ManifestName]:[Position],[ManifestName]:[Position]</add_to_manifest>
                <destination>[ManifestDestination]</destination>
            </manifest>
            <!-- Multiple manifests may be included -->
            <manifest>
               <!-- manifest params -->
            </manifest>
        </stream>
        <!-- Multiple stream params may be included in output format -->
        <!-- Maximum number of available streams is 15 -->
        <stream>
           <!-- stream params -->
        </stream>
        <!-- Manifests fields -->
        <manifest>
            <basename>[BaseName]</basename> <!-- required-->
            <destination>[ManifestDestination]</destination>
            <add_audio_only>[yes|no]</add_audio_only>
        </manifest>
        <!-- Multiple manifests may be included -->
        <manifest>
           <!-- manifest params -->
        </manifest>
        <!-- Main/alternate source fields -->
        <main_source>
            <type>[video_audio|video|audio]</type>
            <video_name>[Name]</video_name>
            <audio_name>[Name]</audio_name>
            <use_stream_id>[CommaSeparatedList]</use_stream_id>
            <language>[Language]</language>

        </main_source>
        <!-- multiple alternate_sources may be included -->
        <alternate_source>
            <source>[FileURL]</source>
            <type>[video_audio|video|audio]</type>
            <video_name>[Name]</video_name>
            <audio_name>[Name]</audio_name>
            <use_stream_id>[CommaSeparatedList]</use_stream_id>
            <language>[Language]</language>
            <auto>[yes|no]</auto>
            <alternate_default>[yes|no|auto]</alternate_default>
            <alternate_autoselect>[yes|no]</alternate_autoselect>
        </alternate_source>
        <alternate_source>
           <!-- alternate_source params -->
        </alternate_source>
        <!-- multiple ad_breaks may be included -->
        <ad_break>
           <start>[StartTime]</start>
           <duration>[BreakDuration]</duration>
           <drop_segments>[yes|no]</drop_segments>
        </ad_break>
        <ad_break>
           <!-- ad_break params -->
        </ad_break>
        <!-- Format fields -->
        <duration_precision>[Number]</duration_precision>
        <segment_duration>[Duration]</segment_duration>
        <pack_files>[yes|no]</pack_files>
        <pack_type>[tar|zip]</pack_type>
        <pack_each_stream>[yes|no]</pack_each_stream>
        <encryption>[yes|no]</encryption>
        <encryption_method>[aes-128-cbc|sample-aes]</encryption_method>
        <encryption_key>[128bit-key]</encryption_key>
        <encryption_key_file>[SourceURL]</encryption_key_file>
        <encryption_iv>[Hexidecimal string]</encryption_iv>
        <segmenter>[v1|v2|v3|dolby_segmenter]</segmenter>
        <playlist_version>[Valid EXT-X-VERSION]</playlist_version>
        <merge_small_segments>[yes|no]</merge_small_segments>
        <destination>[DestFile]</destination> <!-- required-->
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[Action]",
        "format": {
            "output": "fmp4_hls",
            "stream": [
                {
                    "profile": "[high|main|baseline]",
                    "still_image": "[no|each_segment|first_segment]",
                    "still_image_time": "[Time]",
                    "still_image_size": "[Size]",
                    "byte_range": "[yes|no]",
                    "add_iframe_stream": "[yes|no]",
                    "audio_only": "[yes|no]",
                    "video_only": "[yes|no]",
                    "group_id": "[GroupID]",
                    "use_group_id": "[CommaSeparatedList]",
                    "playlist_version": "[Valid EXT-X-VERSION]",
                    "sub_path": "[Playlist sub path]",
                    "media_path": "[Playlist sub path]",
                    "manifest": [
                        {
                            "basename": "[BaseName]",
                            "add_to_manifest": "[ManifestName]:[Position],[ManifestName]:[Position]",
                            "destination": "[ManifestDestination]"
                        }
                    ]
                }
            ],
            "manifest": [
                {
                    "basename": "[BaseName]",
                    "destination": "[ManifestDestination]",
                    "add_audio_only": "[yes|no]"
                }
            ],
            "main_source": {
                "type": "[video_audio|video|audio]",
                "video_name": "[Name]",
                "audio_name": "[Name]",
                "use_stream_id": "[CommaSeparatedList]",
                "language": "[Language]"
            },
            "alternate_source": [
                {
                    "source": "[FileURL]",
                    "type": "[video_audio|video|audio]",
                    "video_name": "[Name]",
                    "audio_name": "[Name]",
                    "use_stream_id": "[CommaSeparatedList]",
                    "language": "[Language]",
                    "auto": "[yes|no]",
                    "alternate_default": "[yes|no|auto]",
                    "alternate_autoselect": "[yes|no]"
                }
            ],
            "ad_break": [
                {
                    "start": "[StartTime]",
                    "duration": "[BreakDuration]",
                    "drop_segments": "[yes|no]"
                }
            ],
            "duration_precision": "[Number]",
            "segment_duration": "[Duration]",
            "pack_files": "[yes|no]",
            "pack_type": "[tar|zip]",
            "pack_each_stream": "[yes|no]",
            "encryption": "[yes|no]",
            "encryption_method": "[aes-128-cbc|sample-aes]",
            "encryption_key": "[128bit-key]",
            "encryption_key_file": "[SourceURL]",
            "encryption_iv": "[Hexidecimal string]",
            "segmenter": "[v1|v2|v3|dolby_segmenter]",
            "playlist_version": "[Valid EXT-X-VERSION]",
            "merge_small_segments": "[yes|no]",
            "destination": "[DestFile]"
        }
    }
}

📘

Note

cea-608 mux type isn't available for fmp4_hls output format

Atlas DRM

Available for advanced multibitrate output formats: advanced_hls, fmp4_hls, advanced_dash, advanced_mss.

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>[Action]</action> <!-- required-->
    <format>
        <output>[advanced_hls|fmp4_hls|advanced_dash|advanced_mss]</output>
        <atlas_drm>yes</atlas_drm>
        <atlas_company_id>[AtlasCompanyID]</atlas_company_id>
        <atlas_asset_id>[AtlasAssetID]</atlas_asset_id>
        <atlas_widevine_drm>[yes|no]</atlas_widevine_drm> 
        <atlas_playready_drm>[yes|no]</atlas_playready_drm> 
        <!-- <atlas_widevine_drm /> and  <atlas_playready_drm /> services not available for advanced_hls and fmp4_hls output formats -->
        <atlas_env>[live|stage]</atlas_env>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "[Action]",
        "format": {
            "output": "[advanced_hls|fmp4_hls|advanced_dash|advanced_mss]",
            "atlas_drm": "yes",
            "atlas_company_id": "[AtlasCompanyID]",
            "atlas_asset_id": "[AtlasAssetID]",
            "atlas_widevine_drm": "[yes|no]",
            "atlas_playready_drm": "[yes|no]",
            "atlas_env": "[live|stage]"
        }
    }
}
Field NameDescriptionAllowed ValuesDefault Values
atlas_drmuse Atlas DRMyes, nono
atlas_company_idAtlas DRM Company IDValid Company IDno
atlas_asset_idAtlas DRM Asset IDValid Asset ID
atlas_widevine_drmUse Atlas Widevine DRMyes, no
atlas_playready_drmUse Atlas Playready DRMyes, no
Note: Atlas Widevine and Atlas Playready DRM services not available for advanced_hls and fmp4_hls output formats
atlas_envAtlas DRM Environmentlive, stagelive