14 October 2019 - QC Workflow Update

Changed QC workflow.

  • Added support of advanced_fmp4 and fmp4_hls output formats.
  • QC Auto/All merged to QC Auto.
  • Added qc_check format to validate your own medias.
  • QC processing moved to separate job to minimize it influence on transcoding process.

Available Tests

Test Name

Parameter

Supported Formats

GENERAL VALIDATION TESTS

Duration

<qc_duration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

File size

<qc_file_size>

qc_check, mp4

Bitrate

<qc_bitrate>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Bitrate mode

<qc_bitrate_mode>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Closed Captions(608/708) are present and maintained

<qc_captions_presented>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

No short segments

<qc_short_segment>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

VIDEO VALIDATION TESTS

Video codec

<qc_video_codec>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video bitrate

<qc_video_bitrate>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Frame rate

<qc_frame_rate>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video duration

<qc_video_duration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video codec profile

<qc_video_codec_profile>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video level

<qc_video_level>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Frame size

<qc_frame_size>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Aspect ratio

<qc_aspect_ratio>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video streams count

<qc_video_streams_number>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate DTS

<qc_validate_dts>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate PTS

<qc_validate_pts>

qc_check, advanced_hls, advanced_fmp4, fmp4_hls

PCR Interval is maintained

<qc_pcr_interval>

qc_check, advanced_hls

PID Interval is maintained

<qc_pid_interval>

qc_check, advanced_hls

Check b-frames present

<qc_b_frames_present>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Check b-frames DTS grow

<qc_bframe_dts_grow>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

IDR interval is maintained

<qc_idr_interval>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Each segment starts with IDR

<qc_segments_start_with_idr>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

AUDIO VALIDATION TESTS

Audio codec

<qc_audio_codec>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio bitrate

<qc_audio_bitrate>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio duration

<qc_audio_duration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio bit depth

<qc_audio_bit_depth>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio sample rate

<qc_audio_sample_rate>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio channels

<qc_audio_channels>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio channel layout

<qc_audio_channel_layout>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio streams number

<qc_audio_streams_number>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

MANIFEST VALIDATION TESTS

Master manifest has proper bitrate

<qc_bitrate_declaration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Master manifest has proper codec

<qc_codec_declaration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Discontinuity tags are in proper placement

<qc_discontinuity_tags>

qc_check, advanced_hls, advanced_fmp4, fmp4_hls

Proper DRM URI

<qc_drm_uri>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

HLS version number

<qc_hls_version_number>

qc_check, advanced_hls, advanced_fmp4, fmp4_hls

CUE-OUT:0 proper placement

<qc_match_breakpoints>

qc_check, advanced_hls, advanced_fmp4, fmp4_hls

Check Sample AES proper encryption

<qc_proper_sample_aes_encryption_declared>

qc_check, advanced_hls

Target segment duration

<qc_target_segment_duration>

qc_check, advanced_hls, advanced_fmp4, fmp4_hls

Declared segment duration is correct

<qc_validate_segment_duration>

qc_check, advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Request Template

Auto

<?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|advanced_dash|advanced_fmp4|fmp4_hls|mp4]</output><!-- REQUIRED -->
        <!-- Format fields -->
        <qc>auto</qc>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "AddMedia",
        "qc_notify": "[QCNotifyURL]",
        "source": "[SourceFile|SourcePlaylist]",
        "format": {
            "output": "[advanced_hls|advanced_dash|advanced_fmp4|fmp4_hls|mp4]",
            "qc": "auto"
        }
    }
}

Custom Tests

<?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|advanced_dash|advanced_fmp4|fmp4_hls|mp4|qc_check]</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 /> params available only for advanced_hls output format -->
        <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 -->
                <severity>[fatal|warning]</severity>
                </qc_test_name_2>
                <!-- Multiple Tests -->
                <qc_test_name_N>
                    <!-- Tests Params -->
                <severity>[fatal|warning]</severity>
                </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|advanced_dash|advanced_fmp4|fmp4_hls|mp4|qc_check]",
            "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": {
                        "severity": "[fatal|warning]"
                    },
                    "qc_test_name_N": {
                        "severity": "[fatal|warning]"
                    }
                }
            }
        }
    }
}

QC Check

<?xml version="1.0"?>
<query>
    <userid><<id>></userid> <!-- required-->
    <userkey><<key>></userkey> <!-- required-->
    <action>AddMedia</action>
    <qc_notify_format>[xml|json]</qc_notify_format>
    <qc_notify>[QCNotifyURL]</qc_notify>
    <source>[SourceFile1|SourcePlaylist1]</source><!-- required -->
    <source>[SourceFile2|SourcePlaylist2]</source>
    <!-- Multiple source files -->
    <source>[SourceFileN|SourcePlaylistN]</source>
    <format>
        <output>qc_check</output><!-- required -->
        <source_options>
            <qc>
                <qc_test_name_1>
                    <!-- Tests Params -->
                    <severity>[fatal|warning]</severity>
                </qc_test_name_1>
                <qc_test_name_2>
                    <!-- Tests Params -->
                    <severity>[fatal|warning]</severity>
                </qc_test_name_2>
                <!-- Multiple Tests -->
                <qc_test_name_N>
                    <!-- Tests Params -->
                    <severity>[fatal|warning]</severity>
                </qc_test_name_N>
            </qc>
            <stream>
                <qc>
                    <qc_test_name_1>
                        <!-- Tests Params -->
                        <severity>[fatal|warning]</severity>
                    </qc_test_name_1>
                    <qc_test_name_2>
                        <!-- Tests Params -->
                        <severity>[fatal|warning]</severity>
                    </qc_test_name_2>
                    <!-- Multiple Tests -->
                    <qc_test_name_N>
                        <!-- Tests Params -->
                        <severity>[fatal|warning]</severity>
                    </qc_test_name_N>
                </qc>
            </stream>
        </source_options>
    </format>
</query>
{
    "query": {
        "userid": "<<id>>",
        "userkey": "<<key>>",
        "action": "AddMedia",
        "qc_notify_format": "[xml|json]",
        "qc_notify": "[QCNotifyURL",
        "source": [
            "[SourceFile1|SourcePlaylist1]",
            "[SourceFile2|SourcePlaylist2]",
            "[SourceFileN|SourcePlaylistN]"
        ],
        "format": {
            "output": "qc_check",
            "source_options": {
                "qc": {
                    "qc_test_name_1": {
                        "severity": "[fatal|warning]"
                    },
                    "qc_test_name_2": {
                        "severity": "[fatal|warning]"
                    },
                    "qc_test_name_N": {
                        "severity": "[fatal|warning]"
                    }
                },
                "stream": [
                    {
                        "qc": {
                            "qc_test_name_1": {
                                "severity": "[fatal|warning]"
                            },
                            "qc_test_name_2": {
                                "severity": "[fatal|warning]"
                            },
                            "qc_test_name_N": {
                                "severity": "[fatal|warning]"
                            }
                        }
                    }
                ]
            }
        }
    }
}

QC Auto

Auto Tests List:

Test Name

Formats Available

QC General Tests

Duration

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

File Size

mp4

Bitrate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate Closed Captions

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

No Short Segments

advanced_hls, fmp4_hls

QC Video Tests

Video Codec

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video Bitrate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Frame Rate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video Duration

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video Codec Profile

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video Level

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Frame Size

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Aspect Ratio

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Video Streams Count

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate DTS

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate PTS

advanced_hls, fmp4_hls

PCR Interval

advanced_hls

PID Interval

advanced_hls

Validate B-Frames

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate B-Frames DTS Increase

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Validate IDR Interval

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Segment Starts with IDR

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

QC Audio Tests

Audio Codec

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Bitrate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Duration

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Bit Depth

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Sample Rate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Channels

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

Audio Channel Layout

mp4

Audio Stream Validation

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4

QC Manifest Tests

Master Manifest Bitrate

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Master Manifest Codec

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Validate Discontinuity Tags

advanced_hls, fmp4_hls

Validate DRM URI

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls

Validate HLS Version

advanced_hls, fmp4_hls

Validate CUE-OUT:0 Placement

advanced_hls, fmp4_hls

Validate Sample AES Encryption

advanced_hls

Validate Segment Duration

advanced_hls, fmp4_hls

Validate Declared Segment Duration

advanced_hls, advanced_dash, advanced_fmp4, fmp4_hls