Dash-Industry-Forum / DASH-IF-Conformance

This repository provides the source code for MPEG-DASH/DASH-IF Conformance Software/Validator. It has been extended according to further standards, such as CMAF, DVB-DASH, HbbTV, and CTA WAVE.
https://conformance.dashif.org/
Other
67 stars 28 forks source link

Segment Validation Health Check failing unexpectedly: Atominfo has invalid xml #623

Closed nicholas-fr closed 1 year ago

nicholas-fr commented 1 year ago

When running the validation tool from the dev branch (https://github.com/Dash-Industry-Forum/DASH-IF-Conformance/commit/3c7e9de159a84724e99f7a597c9f1eeeef5f54c7), the following unexpected error occurs:

php Process_cli.php --cmaf --ctawave --segments http://dash.akamaized.net/WAVE/vectors/cfhd_sets/15_30_60/t1/2022-10-17/stream.mpd

Relevant warning/error:

Ignoring atomfile for /var/www/html/Utils/sessions/1670315717/Period0/Adaptation0/Representation0
[...]
{
"messages":
[
"Atominfo for /var/www/html/Utils/sessions/1670315717/Period0/Adaptation0/Representation0 has invalid xml"
],
"section": "Segment Validation",
"spec": "Health Checks",
"state": "FAIL",
"test": "AtomInfo contains valid xml"
}
[...]

If AtomInfo is referring to a file, it is not present (not created?):

/var/www/html/Utils/sessions/1670315717/Period0/Adaptation0/Representation0# ls
0.m4s       153600.m4s  215040.m4s  276480.m4s  307200.m4s  368640.m4s  430080.m4s  92160.m4s      init.mp4                    sizes.txt
122880.m4s  184320.m4s  245760.m4s  30720.m4s   337920.m4s  399360.m4s  61440.m4s   assembled.mp4  segmentValidatorConfig.txt

Full output:

Ignoring atomfile for /var/www/html/Utils/sessions/1670315717/Period0/Adaptation0/Representation0
{"parse_segments":true,"source":"http:\/\/dash.akamaized.net\/WAVE\/vectors\/cfhd_sets\/15_30_60\/t1\/2022-10-17\/stream.mpd","entries":{"MPEG-DASH Common":{"verdict":"PASS","BeforeMPD":{"verdict":"PASS"},"MPD":{"verdict":"PASS","info":["Schematron output: 0XLink resolving successful\n\n\nMPD validation successful - DASH is valid!\n\n\nSchematron validation successful - DASH is valid!\n\n\n"],"test":[{"spec":"MPEG-DASH","section":"Commmon","test":"Schematron Validation","messages":["XLink resolving succesful","MPD validation succesful","Schematron validation succesful"],"state":"PASS"}]},"BeforeRepresentation":{"verdict":"PASS"},"Period":{"verdict":"PASS"}},"Stats":{"LastWritten":"2022-12-06 08:35:20"},"CMAF":{"verdict":"PASS","BeforeMPD":{"verdict":"PASS"},"MPD":{"verdict":"PASS"},"BeforeRepresentation":{"verdict":"PASS"},"Period":{"verdict":"PASS"}},"CTA-WAVE":{"verdict":"PASS","BeforeMPD":{"verdict":"PASS"},"MPD":{"verdict":"PASS"},"BeforeRepresentation":{"verdict":"PASS"},"Period":{"verdict":"PASS"}},"verdict":"FAIL","HEALTH":{"":{"test":[{"spec":"Health Checks","section":"Segment Validation","test":"ISOSegmentValidator runs successful","messages":["Ran succesful on \/var\/www\/html\/Utils\/sessions\/1670315717\/Period0\/Adaptation0\/Representation0\/segmentValidatorConfig.txt; took 0seconds"],"state":"PASS"},{"spec":"Health Checks","section":"Segment Validation","test":"AtomInfo written","messages":["Atominfo for \/var\/www\/html\/Utils\/sessions\/1670315717\/Period0\/Adaptation0\/Representation0 exists"],"state":"PASS"},{"spec":"Health Checks","section":"Segment Validation","test":"AtomInfo contains valid xml","messages":["Atominfo for \/var\/www\/html\/Utils\/sessions\/1670315717\/Period0\/Adaptation0\/Representation0 has invalid xml"],"state":"FAIL"},{"spec":"Health Checks","section":"Segment Validation","test":"AtomInfo < 100Mb","messages":["Atominfo for \/var\/www\/html\/Utils\/sessions\/1670315717\/Period0\/Adaptation0\/Representation0 < 100Mb"],"state":"PASS"}],"verdict":"FAIL"},"verdict":"FAIL"}},"verdict":"FAIL","enabled_modules":[{"name":"MPEG-DASH Common"},{"name":"CMAF"},{"name":"CTA-WAVE"}]}

Related to discussion in https://github.com/cta-wave/Test-Content-Generation/issues/55

dsilhavy commented 1 year ago

@nicholas-fr Thanks for reporting, we are aware of this issue, it is caused by an unclosed XML tag in atominfo.xml created by the segment validator. We will merge a fix for this in the next days.

nicholas-fr commented 1 year ago

Thanks for the confirmation @dsilhavy

dsilhavy commented 1 year ago

Issue is fixed in the development branch, output based on #631

{
  "parse_segments": true,
  "source": "http:\/\/dash.akamaized.net\/WAVE\/vectors\/cfhd_sets\/15_30_60\/t1\/2022-10-17\/stream.mpd",
  "entries": {
    "Schematron": {
      "verdict": "PASS",
      "MPD": {
        "verdict": "PASS",
        "info": [
          "MPDValidator output: 0XLink resolving successful\n\n\nMPD validation successful - DASH is valid!\n\n\nSchematron validation successful - DASH is valid!\n\n\n",
          "Schematron output: 0XLink resolving successful\n\n\nMPD validation successful - DASH is valid!\n\n\nSchematron validation successful - DASH is valid!\n\n\n"
        ],
        "test": [
          {
            "spec": "MPEG-DASH",
            "section": "Commmon",
            "test": "Schematron Validation",
            "messages": [
              "XLink resolving succesful",
              "MPD validation succesful",
              "Schematron validation succesful"
            ],
            "state": "PASS"
          }
        ]
      }
    },
    "Stats": {
      "LastWritten": "2023-01-25 04:33:06"
    },
    "verdict": "FAIL",
    "MPEG-DASH Common": {
      "verdict": "PASS",
      "BeforeMPD": {
        "verdict": "PASS"
      },
      "MPD": {
        "verdict": "PASS"
      },
      "BeforeRepresentation": {
        "verdict": "PASS"
      },
      "Representation": {
        "verdict": "PASS"
      },
      "BeforeAdaptationSet": {
        "verdict": "PASS"
      },
      "AdaptationSet": {
        "verdict": "PASS"
      },
      "Period": {
        "verdict": "PASS"
      }
    },
    "CMAF": {
      "verdict": "FAIL",
      "BeforeMPD": {
        "verdict": "PASS"
      },
      "MPD": {
        "verdict": "PASS"
      },
      "BeforeRepresentation": {
        "verdict": "PASS"
      },
      "Representation": {
        "verdict": "FAIL",
        "test": [
          {
            "spec": "CMAF",
            "section": "Section 7.7.3 - check 'cmf2'",
            "test": "For video CMAF tracks not contained in Track Files, Version 1 SHALL be used",
            "messages": [
              "Representation 1, track 0 valid",
              "Representation 1, track 1 valid",
              "Representation 1, track 2 valid",
              "Representation 1, track 3 valid",
              "Representation 1, track 4 valid",
              "Representation 1, track 5 valid",
              "Representation 1, track 6 valid",
              "Representation 1, track 7 valid",
              "Representation 1, track 8 valid",
              "Representation 1, track 9 valid",
              "Representation 1, track 10 valid",
              "Representation 1, track 11 valid",
              "Representation 1, track 12 valid",
              "Representation 1, track 13 valid",
              "Representation 1, track 14 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.7.2 - check 'cmf2'",
            "test": "For video CMAF tracks, the EditListBox SHALL NOT be present",
            "messages": [
              "Representation 1 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.2.2",
            "test": "Each CMAF Fragment in a CMAF Track SHALL have baseMediaDecodeTime equal to the sum of all prior Fragment durations added to the first Fragment's baseMediaDecodeTime",
            "messages": [
              "Representation 1 Fragment 1 valid",
              "Representation 1 Fragment 2 valid",
              "Representation 1 Fragment 3 valid",
              "Representation 1 Fragment 4 valid",
              "Representation 1 Fragment 5 valid",
              "Representation 1 Fragment 6 valid",
              "Representation 1 Fragment 7 valid",
              "Representation 1 Fragment 8 valid",
              "Representation 1 Fragment 9 valid",
              "Representation 1 Fragment 10 valid",
              "Representation 1 Fragment 11 valid",
              "Representation 1 Fragment 12 valid",
              "Representation 1 Fragment 13 valid",
              "Representation 1 Fragment 14 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.2.3",
            "test": "CMAF Chunks in a CMAF Track SHALL NOT overlap or have gaps in decode time",
            "messages": [
              "Representation 1 Fragment 1 valid",
              "Representation 1 Fragment 2 valid",
              "Representation 1 Fragment 3 valid",
              "Representation 1 Fragment 4 valid",
              "Representation 1 Fragment 5 valid",
              "Representation 1 Fragment 6 valid",
              "Representation 1 Fragment 7 valid",
              "Representation 1 Fragment 8 valid",
              "Representation 1 Fragment 9 valid",
              "Representation 1 Fragment 10 valid",
              "Representation 1 Fragment 11 valid",
              "Representation 1 Fragment 12 valid",
              "Representation 1 Fragment 13 valid",
              "Representation 1 Fragment 14 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.5.17",
            "test": "For 'trun' version 1, the composition time of 1st presented sample in a CMAF Segment SHALL be same as first Sample decode time",
            "messages": [
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid",
              "Representation 1 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.2.2",
            "test": "The concatenation of a CMAF Header and all CMAF Fragments in the CMAF Track in consecutive decode order SHALL be a valid fragmented ISOBMFF file",
            "messages": [
              "Representation 1 not valid"
            ],
            "state": "FAIL"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.5.2",
            "test": "When Metadata carried in MetaBox is present, it SHALL NOT occur at the file level",
            "messages": [
              "Representation 1 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.5.2",
            "test": "When Metadata carried in UserDataBox is present, it SHALL NOT occur at the file level",
            "messages": [
              "Representation 1 valid"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.2.4",
            "test": "Each CMAF Fragment in combination with its associated Header SHALL contain sufficient metadata to be decoded and displayed when independently accessed",
            "messages": [
              "Width found for representation \/ track 1",
              "Height found for representation \/ track 1",
              "'profile_idc' found for representation \/ track 1",
              "'level_idc' found for representation \/ track 1",
              "FPS info not found for representation \/ track 1"
            ],
            "state": "FAIL"
          },
          {
            "spec": "CMAF",
            "section": "Section A.2",
            "test": "For a CMAF Track to comply with one of the media profiles in Table A.1, it SHALL not exceed the profile or level listed in the table",
            "messages": [
              "Valid profile found"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section A.2",
            "test": "For a CMAF Track to comply with one of the media profiles in Table A.1, it SHALL conform to the colour_primaries, transfer_characteristics and matrix_coefficients values from the options listed in the table",
            "messages": [
              "Valid color primaries found",
              "Valid transfer characteristics found",
              "FAIL"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section A.2",
            "test": "For a CMAF Track to comply with one of the media profiles in Table A.1, it SHALL not exceed the width, height or frame rate listed in the table, even if the AVC Level would permit higher values",
            "messages": [
              "Valid height value found",
              "Valid width value found",
              "Valid framerate value found"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.2.2",
            "test": "A CMAF Track SHALL conform to at least one structural brand",
            "messages": [
              "Valid for representation \/ track 1, segment "
            ],
            "state": "PASS"
          }
        ]
      },
      "BeforeAdaptationSet": {
        "verdict": "PASS"
      },
      "AdaptationSet": {
        "verdict": "WARN",
        "test": [
          {
            "spec": "CMAF",
            "section": "Presentation Checks",
            "test": "Attempting to open switching sets for adaptationSet 0",
            "messages": [
              "Files exist",
              "Files exist"
            ],
            "state": "PASS"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.6",
            "test": "Presentation duration needs to be known for validation",
            "messages": [
              "Presentation duration is not known, skipping further duration checks"
            ],
            "state": "WARN"
          },
          {
            "spec": "CMAF",
            "section": "Section 7.3.5",
            "test": "A CMAF Selection Set SHALL contain one or more CMAF Switching Sets",
            "messages": [
              "Found 1 CMAF Switching Sets"
            ],
            "state": "PASS"
          }
        ]
      },
      "Period": {
        "verdict": "PASS"
      }
    },
    "CTA-WAVE": {
      "verdict": "FAIL",
      "BeforeMPD": {
        "verdict": "PASS"
      },
      "MPD": {
        "verdict": "PASS"
      },
      "BeforeRepresentation": {
        "verdict": "PASS",
        "test": [
          {
            "spec": "Segment Validations",
            "section": "analyze_results()",
            "test": "stderr filled??",
            "messages": [
              "Contents in stderr.txt found"
            ],
            "state": "PASS"
          }
        ]
      },
      "Representation": {
        "verdict": "PASS"
      },
      "BeforeAdaptationSet": {
        "verdict": "FAIL",
        "test": [
          {
            "spec": "CTAWAVE",
            "section": "Presentation Checks",
            "test": "Attempting to open switching sets for adaptationSet ",
            "messages": [
              "Files exist",
              "Files exist"
            ],
            "state": "PASS"
          },
          {
            "spec": "CTAWAVE",
            "section": "WAVE Content Spec 2018Ed-Section 4.2.1",
            "test": "Each WAVE video Media Profile SHALL conform to normative ref. listed in Table 1",
            "messages": [
              "NAL Units found for track 0 of switching set 0",
              "Valid profile for track 0 of switching set 0",
              "Valid color primaries for track 0 of switching set 0",
              "Valid transfer characteristics for track 0 of switching set 0",
              "Valid matrix coefficients for track 0 of switching set 0",
              "Valid height for track 0 of switching set 0",
              "Valid width for track 0 of switching set 0",
              "Valid framerate for track 0 of switching set 0",
              "NAL Units found for track 0 of switching set 0",
              "Valid profile for track 0 of switching set 0",
              "Valid color primaries for track 0 of switching set 0",
              "Valid transfer characteristics for track 0 of switching set 0",
              "Valid matrix coefficients for track 0 of switching set 0",
              "Valid height for track 0 of switching set 0",
              "Valid width for track 0 of switching set 0",
              "Valid framerate for track 0 of switching set 0"
            ],
            "state": "PASS"
          },
          {
            "spec": "CTAWAVE",
            "section": "WAVE Content Spec 2018Ed-Section 4.1",
            "test": "WAVE content SHALL include one or more Switching Sets conforming to at least one WAVE approved CMAF Media Profile",
            "messages": [
              "Switching Set 0 found with only tracks conforming to Media Profile H",
              "Video track found, but WAVE video track missing"
            ],
            "state": "FAIL"
          },
          {
            "spec": "CTAWAVE",
            "section": "WAVE Content Spec 2018Ed-Section 5",
            "test": "If a video track is included, then conforming Presentation will at least include that video in a CMAF SwSet conforming to required AVC (HD) Media Profile",
            "messages": [
              "Switching set not found"
            ],
            "state": "FAIL"
          }
        ],
        "info": [
          "Stream found to conform to a CMAF Presentation Profile: "
        ]
      },
      "AdaptationSet": {
        "verdict": "PASS"
      },
      "Period": {
        "verdict": "FAIL",
        "info": [
          "Stream found to conform to a CMAF Presentation Profile: "
        ],
        "test": [
          {
            "spec": "WAVE Content Spec 2018Ed",
            "section": "Section 6.2",
            "test": "WAVE CMFHD Baseline Program Shall contain a sequence of one or more CMAF Presentations conforming to CMAF CMFHD profile",
            "messages": [
              "Not all CMAF Switching sets are CMFHD conformant"
            ],
            "state": "FAIL"
          }
        ]
      }
    },
    "HEALTH": {
      "": {
        "test": [
          {
            "spec": "Health Checks",
            "section": "Segment Validation",
            "test": "ISOSegmentValidator runs successful",
            "messages": [
              "Ran succesful on \/home\/dsi\/DASH-IF-Conformance\/Utils\/sessions\/1674660715\/Period0\/Adaptation0\/Representation0\/segmentValidatorConfig.txt; took 0seconds"
            ],
            "state": "PASS"
          },
          {
            "spec": "Health Checks",
            "section": "Segment Validation",
            "test": "AtomInfo written",
            "messages": [
              "Atominfo for \/home\/dsi\/DASH-IF-Conformance\/Utils\/sessions\/1674660715\/Period0\/Adaptation0\/Representation0 exists"
            ],
            "state": "PASS"
          },
          {
            "spec": "Health Checks",
            "section": "Segment Validation",
            "test": "AtomInfo contains valid xml",
            "messages": [
              "Atominfo for \/home\/dsi\/DASH-IF-Conformance\/Utils\/sessions\/1674660715\/Period0\/Adaptation0\/Representation0 has valid xml"
            ],
            "state": "PASS"
          },
          {
            "spec": "Health Checks",
            "section": "Segment Validation",
            "test": "AtomInfo < 100Mb",
            "messages": [
              "Atominfo for \/home\/dsi\/DASH-IF-Conformance\/Utils\/sessions\/1674660715\/Period0\/Adaptation0\/Representation0 < 100Mb"
            ],
            "state": "PASS"
          }
        ],
        "verdict": "PASS"
      },
      "verdict": "PASS"
    },
    "SEGMENT_VALIDATION": {
      "": {
        "test": [
          {
            "spec": "Segment Validation",
            "section": "Segment Validation",
            "test": "std error output",
            "messages": [
              "..\/src\/ValidateAtoms.cpp : 3999 : colr atom of type nclx found, the software does not handle colr atoms of this type. \n..\/src\/ValidateAtomList.cpp : 2339 : WARNING: In moov-1:udta-1 - unknown\/unexpected atom 'meta'\nAccording to DASH-IF IOP Section 3.2.8 @bandwidth of the Representation (5100000 bps) is set too high given the @minimumBufferTime (2 s), the minimum @bandwidth value required to conform is 4830860 bps.\n"
            ],
            "state": "FAIL"
          }
        ],
        "verdict": "FAIL"
      },
      "verdict": "FAIL"
    }
  },
  "verdict": "FAIL",
  "enabled_modules": [
    {
      "useLatestXSD": false,
      "name": "MPEG-DASH Common",
      "detected": false
    },
    {
      "name": "CMAF",
      "detected": false
    },
    {
      "name": "CTA-WAVE",
      "detected": false
    }
  ]
}