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 NameParameterSupported 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 NameFormats Available
### QC General Tests
Durationadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
File Sizemp4
Bitrateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Validate Closed Captionsadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
No Short Segmentsadvanced_hls, fmp4_hls
### QC Video Tests
Video Codecadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Video Bitrateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Frame Rateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Video Durationadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Video Codec Profileadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Video Leveladvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Frame Sizeadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Aspect Ratioadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Video Streams Countadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Validate DTSadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Validate PTSadvanced_hls, fmp4_hls
PCR Intervaladvanced_hls
PID Intervaladvanced_hls
Validate B-Framesadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Validate B-Frames DTS Increaseadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Validate IDR Intervaladvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Segment Starts with IDRadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls
### QC Audio Tests
Audio Codecadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Bitrateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Durationadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Bit Depthadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Sample Rateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Channelsadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
Audio Channel Layoutmp4
Audio Stream Validationadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls, mp4
### QC Manifest Tests
Master Manifest Bitrateadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls
Master Manifest Codecadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls
Validate Discontinuity Tagsadvanced_hls, fmp4_hls
Validate DRM URIadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls
Validate HLS Versionadvanced_hls, fmp4_hls
Validate CUE-OUT:0 Placementadvanced_hls, fmp4_hls
Validate Sample AES Encryptionadvanced_hls
Validate Segment Durationadvanced_hls, fmp4_hls
Validate Declared Segment Durationadvanced_hls, advanced_dash, advanced_fmp4, fmp4_hls