Skip to content

Releases

v0.3.1

Choose a tag to compare

@tobbee tobbee released this 28 Oct 06:28
Immutable release. Only release title and notes can be modified.

Highlights

  • dashcheck runs on Windows: a local MPD keeps its drive letter, and CI builds and tests on Windows
    as well as Linux and macOS.
  • The browser tool's examples are grouped as live, on demand and with errors. The errors now come
    from real test vectors: avc1 in @codecs for an avc3 sample entry (CTA WAVE), and on demand
    without @subsegmentAlignment (DASH-IF). The examples that gave misleading results are replaced.
  • A check without errors shows its 0 errors in green.
  • The clock line names the UTCTiming scheme of its time source, and CLOCK-LOCAL no longer adds an
    info to every live check when the local clock is only a few milliseconds off.

Changed

  • The browser tool's examples are grouped as live, on demand and with errors, with new examples from
    livesim2 (low latency) and the DASH-IF and CTA WAVE test vectors.
  • The browser tool shows 0 errors in green, in the result and in the history.
  • CLOCK-LOCAL (info) only when the local clock is more than 500ms off the reference clock. The clock
    line of the report still gives the offset.

Fixed

  • dashcheck keeps the drive letter of a local MPD on Windows, which it lost when the MPD was not on the
    current drive. Local paths with #, % or ? work on all platforms.
  • The clock line of the report and CLOCK-SKEW give the UTCTiming scheme of the time source (http-iso,
    direct, ...), or say that it is the reference clock. A direct source was named by its time.

v0.3.0

Choose a tag to compare

@tobbee tobbee released this 27 Oct 15:31
Immutable release. Only release title and notes can be modified.

Highlights

  • dashcheck has been run on all CTA WAVE and DASH-IF test vectors, and the false positives this
    found are fixed: self-initializing files, servers that answer byte ranges with 200, negative
    S@r, Periods after remote Periods, HE-AAC sampling rates, DTS audio and side-loaded subtitles.
  • tfdt and trun boxes are required only where the specifications require them. Fragments
    without tfdt are now checked instead of skipped.
  • Results follow the spec wording more closely, so an MPD that passed 0.2.1 can fail 0.3.0:
    MPD-MAXSEGDUR is now an error and checks whole Segment Sequences, while MPD-COMMON-BOTH is
    now information.
  • The browser tool keeps the latest 20 checks with their results, and its progress bar now
    covers the MPD update checks.

Added

  • HTTP-RANGE (warning), and HTTP-IOP-RANGE (error) for the IOP on-demand profile, when a server
    answers a byte range request with status 200. dashcheck then cuts the ranges from the whole resource.
  • The browser tool keeps the latest 20 checks with their results in localStorage, to show them
    again or to check a URL again with the same options.
  • MPD-XLINK-START (warning) instead of an ADDR-PERIOD error for a Period without @start after a
    remote Period without @duration. Its segments are checked if its duration is known.
  • INIT-UNSUPPORTED (info) for sample entries that dashcheck cannot decode, such as DTS (dtsc,
    dtse), instead of SEG-CMAF-INIT errors.

Changed

  • MPD-COMMON-BOTH is information instead of a warning: ISO/IEC 23009-1 5.3.7.1 allows it.
  • MPD-MAXSEGDUR is an error instead of a warning (5.3.9.6.2), and compares a whole Segment Sequence
    (@d with @k) with @maxSegmentDuration.
  • References to ISO/IEC 23009-1 follow the published 6th edition (2026); SEG-SIDX-SPAN cites 6.3.5.4.

Fixed

  • LIVE-NO-SEGMENTS no longer reports a live Period whose first segment is not complete yet, or
    whose last segment leaves the time-shift buffer within the live margin.
  • The browser tool's progress bar covers the MPD update checks; it fell back to 5% while they ran.
  • XCHK-SAMPLERATE accepts the sampling rate after SBR for HE-AAC (mp4a.40.5, mp4a.40.29).
  • SEG-DURATION lets the last segment of an S with a negative @r end at the Period end.
  • For a self-initializing file (SegmentBase without Initialization), only the bytes before
    @indexRange are fetched as its Initialization Segment, not the whole file.
  • A missing tfdt is a SEG-TFDT error only in CMAF, msdh segments and the first fragment with
    SegmentTimeline and $Time$ but no sidx. SEG-START-UNKNOWN (info) marks other segments starting without it.
  • A traf without trun is a SEG-CMAF-CHUNK error in CMAF tracks only, not a SEG-STRUCTURE error.
  • MPD-CODECS no longer warns about side-loaded subtitle files (application/ttml+xml, text/vtt).

v0.2.1

Choose a tag to compare

@tobbee tobbee released this 23 Oct 21:22

Highlights

  • Every livesim2 feature has been checked, and the false positives this found are fixed. Valid
    streams no longer get errors or warnings for utc:direct timing, thumbnails, audio priming in
    edit lists, multi-Period live, low-latency subtitles, Content Steering, or
    @availabilityTimeOffset without low latency.
  • Remote (XLink) Periods and Annex I URL parameters, which dashcheck does not support, are now
    reported as info instead of failing with MPD-SEGINFO-NONE or HTTP-INIT errors.

Added

  • MPD-XLINK-UNRESOLVED (info) for remote Periods, which dashcheck does not resolve. They are
    no longer MPD-SEGINFO-NONE errors.
  • ADDR-UNSUPPORTED (info) for Representations that need Annex I URL parameters
    (urn:mpeg:dash:urlparam:2014 or 2016). Their segments are no longer fetched.

Fixed

  • MPD-UPDATE-PUBLISHTIME ignores the time in a urn:mpeg:dash:utc:direct:2014 UTCTiming,
    which changes with each response.
  • CLOCK-SKEW allows for whole seconds from utc:direct, http-iso and http-xsdate time sources.
  • MPD-CODECS no longer warns about images such as thumbnail tiles, which have no codecs parameter.
  • SEG-EPT and SEG-DURATION leave out media that the edit list cuts, such as audio priming. With an
    edit list, an S@t equal to the tfdt is SEG-EPT, not SEG-EPT-CTO.
  • LIVE-STALE measures a Period that has ended at its end. Earlier Periods of a multi-Period live
    MPD are no longer reported as stale.
  • MPD-LL-MIMETYPE accepts application/mp4 for text, the media type of CMAF text tracks.
  • MPD-XSD accepts a space-separated list in ContentSteering@defaultServiceLocation, as
    ISO/IEC 23009-1 and ETSI TS 103 998 define it.
  • @availabilityTimeOffset alone no longer turns on the low-latency rules. Without the
    low-latency profile, @availabilityTimeComplete false does.

v0.2.0

Choose a tag to compare

@tobbee tobbee released this 21 Oct 08:32

Added

  • SEG-CONTINUITY-FRAGMENT: each chunk or fragment in a segment must start at the previous one's
    tfdt plus its sample durations (ISO/IEC 23000-19 7.3.2.2, 7.3.2.3).
  • CMAF brand rules: SEG-CMAF-MINORVERSION, and for the cmf2 brand SEG-CMF2-ELST, SEG-CMF2-TRUN
    and SEG-CMF2-DEFAULTS (each chunk sets sample durations, sizes and flags, not only trex).
  • -sequence-numbers, also in the browser tool's options: checks the convention of one mfhd
    sequence_number per segment, shared by its chunks and increasing (SEG-SEQUENCE-NUMBER).
  • MPD-DVB-SCTE-BINARY: an SCTE-35 event must carry a base64 splice_info_section in its
    Signal/Binary element.
  • SEG-CMAF-CHUNK (one traf with one trun per moof) and SEG-CMAF-SAP (video CMAF fragments start
    with a sync sample). The CMAF rules now also apply to low-latency chunked Representations.
  • XCHK-CMAF-SIZE: in the DASH profile for CMAF content, @maxWidth and @maxHeight (or @width
    and @height) must be the tkhd size of the largest track.
  • SEG-SIDX-SPAN: the sidx box of a SegmentBase Representation must index every movie fragment of
    its file.
  • Segment Sequence MPD rules: MPD-SSR-SIGNAL (a profile that allows them or the
    urn:mpeg:dash:ssr:2023 EssentialProperty), MPD-SSR-TIMELINE, MPD-SSR-ATTRIBUTES and
    MPD-SSR-PROPERTIES.
  • SEG-SSR-SAP: the Partial Segments that SegmentSequenceProperties@cadence selects must start with
    a sync sample when @sapType is 1 or 2.
  • SEG-CMAF-SINF: every sample entry of an encrypted CMAF track must be protected (no clear sample
    entry for a clear lead), with tenc default_isProtected 1.
  • ContentProtection rules: XCHK-CP-MISSING, XCHK-CP-SCHEME and XCHK-CP-KID against the init segment,
    MPD-CP-CENC, MPD-CP-ROBUSTNESS, MPD-CP-REF, MPD-CP-CLEARKEY and MPD-CP-DEFAULTKID, and per profile
    SEG-AS-KID, SEG-IOP-PSSH, SEG-IOP-PSSH-INIT, MPD-IOP-CP-DRM and MPD-DVB-CP-DRM.
  • docs/rules.md documents all rules with the DASH-IF checks each covers, and marks the rules that
    the DASH-IF Conformance tool does not have.

Changed

  • Segment Sequences (ISO/IEC 23009-1 5.3.9.7, @k and $SubNumber$) are now addressed and their
    Partial Segments checked, with @startWithSAP on the first of each sequence. Only SegmentTimeline
    duration patterns (S@p, S@ssp) remain ADDR-UNSUPPORTED.
  • XCHK-CP-MISSING replaces SEG-LL-PROTECTION and checks all encrypted tracks, not only low latency.
  • SEG-HLS-BITRATE (-hls-interop) also checks SegmentTemplate and SegmentList content when every
    segment is checked, and live streams whose checked segments cover an hour (at most 110%).

Fixed

  • ContentProtection@ref is resolved, so MPD-CP-VALUE, MPD-IOP-CP and SEG-DVB-PSSH see the @value,
    cenc:default_KID and cenc:pssh that a descriptor inherits from its source.
  • MPD-CP-VALUE accepts a version (cenc:1) and a percent-encoded 4CC in the mp4protection @value.
  • SEG-CMAF-SENC no longer reports clear-lead fragments, or audio with constant IVs, which has no
    sample auxiliary information. A track's protection comes from its first protected sample entry.
  • file: URLs: a byte range that ends after the file is cut at its end, as over HTTP.
  • MPD-XSD checks the XLink attributes against xlink.xsd (such as the xlink:actuate values), and its
    messages give the invalid value and what was expected (jacoelho/xsd v0.6.7).

v0.1.2

Choose a tag to compare

@tobbee tobbee released this 19 Oct 16:00

Fixed

  • The dot of LIVE TIMING in the logo no longer touches the text.

v0.1.1

Choose a tag to compare

@tobbee tobbee released this 19 Oct 16:00

Added

  • The browser tool shows the dashcheck logo, has a favicon, and an image for link previews.

v0.1.0

Choose a tag to compare

@tobbee tobbee released this 19 Oct 14:34

The first release of dashcheck:

Added

  • dashcheck command and browser tool (WebAssembly) that check an MPEG-DASH MPD, its segments
    and, for live streams, the segment availability against a synchronized clock.
  • MPD checks: the 6th edition XML schema and semantic rules for DASH, DASH-IF IOP, CMAF,
    low latency, DVB-DASH, HbbTV, CTA WAVE and Dolby, selected by @profiles.
  • -profiles, and "Check against" in the browser tool: choose the profiles to check (DASH-IF IOP,
    CMAF, low latency, DVB-DASH 2014/2017, HbbTV, CTA WAVE), with or without those in MPD@profiles.
  • Segment checks with mp4ff, cross-checked against the MPD timeline and attributes.
  • -updates: refetches a dynamic MPD and checks the update against the version before.
  • -hls-interop: the DASH-HLS interoperability rules of CTA-5005.
  • 380 of the 408 checks of the DASH-IF Conformance tool, and 6 in part; see docs/dashif-coverage.md.
  • -short: a FAIL, WARN or OK line per MPD instead of the report, also for several MPDs such as
    dashcheck -short streams/*.mpd, checked -parallel at a time.
  • -json: the report, or with -short an array of reports, with error, warning and info counts.
  • -version, and the version in the footer of the browser tool.
  • The browser tool, published on GitHub Pages for each release, counts visits and checks with
    GoatCounter, without cookies or MPD URLs.