Skip to content

Releases: emarsden/dash-mpd-cli

v0.2.32

07 Mar 13:15

Choose a tag to compare

Fix a bug in the progress reporting which led to an incorrect percent value being reported.

Update the version of the aws-lc-rs crate used for TLS handling (via rustls). The previous version had a security-relevant bug in certificate verification.

Migrate from the unmaintained rustls-pemfile crate to the rustls-pki-types crate.

Migrate from the unmaintained json crate to the jzon crate.

The application can be built without the rustls crate, using only native-tls functionality for HTTPS via the reqwest crate. Build with --no-default-features and the native-tls feature. In this configuration, the --client-identity-certificate commandline option only accepts passwordless client identities. When built with the rustls feature (default), the client identity can be specified as a PEM-encoded file containing both the client certificate and the client key.

MacOS universal binaries are not available currently, due to a cross-compilation toolchain issue. An "Apple Silicon" MacOS build is available.

v0.2.31

01 Mar 11:21

Choose a tag to compare

New commandline option --progress which accepts options bar (the default), none and json. If option json is selected, machine-readable progress information is printed to stderr as newline-delimited JSON of the form

{"type": "progress", "percent": 75, "bandwidth": 2266856, "message": "Fetching video segments)"}

When the json option is selected, logging is modified also to use NDJSON format, of the form

{"timestamp":"2026-02-25T21:34:31.417298Z","level":"INFO","message":"Fetching the DASH manifest"}

New commandline options --prefer-audio-language and --prefer-subtitle-language. These function in the same way as the existing --prefer-language option, but only specify a preference for audio streams and for subtitle tracks, respectively. A different preference can be expressed concerning the audio language and the subtitle language. The --prefer-language commandline option sets a preference for both audio language and subtitle language.

v0.2.30

25 Jan 17:03

Choose a tag to compare

Add the ability to decrypt media content with the shaka-packager helper application running in its official Docker/Podman container (instead of installed locally on the host), and with the MP4Box helper application from the official GPAC Docker/Podman container. These rely on a container runtime (Podman or Docker) being installed. The container runtime to use can be specified using the DOCKER environment variable (defaults to podman; it will only work with Docker if it is configured for rootless operation, or you will encounter file ownership problems).

Improve support for dynamic manifests that use SegmentTemplate+SegmentTimeline addressing.

Improve handling of manifests without a MPD.mediaPresentationDuration attribute and without a Period.duration attribute.

Clean up the temporary file used to invoke the decryption helper mp4box.

Use human-readable formatting when displaying per-Period duration information.

Replace the unmaintained backoff crate by the backon crate.

Replace the unmaintained dev dependency json by the jzon crate.

v0.2.29

27 Dec 10:38

Choose a tag to compare

Preliminary support for security sandboxing our application code and our helper applications on Linux, using the Landlock loadable security module. If the sandbox feature is enabled at build time (only available on Linux) and the functionality is enabled using the new --sandbox commandline option, restrict access to the filesystem, limit write access to directories that we will need to write to, limit exec access to directories where our helper applications and their runtime libraries are located, and limit read access to directories that the application or helper applications may need to read. This feature also somewhat restricts network access, preventing binding to a TCP port.

The release builds for Linux include this feature, as does the prebuilt Docker container.

v0.2.28

23 Nov 15:22

Choose a tag to compare

  • Following changes in the tracing crate that disable ANSI terminal escape sequences for security
    reasons, colors, bold and italics are no longer used in warning and error messages.

  • Decryption using MP4Box: delete the temporary file used to pass decryption information to MP4Box
    once the file has been decrypted.

  • The dash-mpd-cli tool is now distributed in Homebrew, thanks to Jonathan Helgert.

  • Updated versions of crates used for HTTP support, browser cookie support, and parsing commandline
    options.

v0.2.27

22 Jun 14:40

Choose a tag to compare

  • The support for downloading certain dynamic streams (“live” manifests) has been improved. More specifically, for $Number$-based dynamic streams the calculation of segment numbers now accounts for the difference between @availabilityStartTime and the current time, so will download content starting from when the download is started.

  • New support for decrypting streams with ContentProtection using the MP4Box commandline application from GPAC. This provides an alternative to using mp4decrypt and Shaka packager. The MP4Box application does not support decryption of content in WebM containers, and sometimes rejects content which is accepted by mp4decrypt and Shaka packager, but may sometimes be more convenient for users if it’s already installed.

v0.2.26

30 Mar 20:00

Choose a tag to compare

  • New commandline option --base-url that allows you to specify a Base URL to be used for all segment downloads. This overrides any BaseURL element provided in the DASH MPD. This option may be useful when downloading from a manifest specified as a file:// URL, which does not contain a BaseURL element.

  • The reported download bandwidth, and the updating of the progress bar, should be more reliable for
    streams that are composed of a large number of very small segments.

v0.2.25

16 Mar 14:42

Choose a tag to compare

  • HTTP requests will now try to establish HTTP/2 connections if the functionality is advertised by an HTTP server, using the Upgrade header. Disable this by building without the http2 feature on our dash-mpd-rs dependency.
  • ffmpeg muxing support supports the use of the DASHMPD_PERSIST_FILES environment variable to retain the temporary files created during muxing.
  • The ffmpeg demuxer concat helper uses absolute paths in the ffconcat file, rather than relative paths, because ffmpeg interprets relative paths with respect to the location of the ffconcat file, rather than with respect to CWD. Reported by @Cocalus.

v0.2.24

12 Jan 14:06

Choose a tag to compare

This release only includes updates to our crate dependencies. It should not lead to any user-visible changes in behaviour.

Cargo.lock file committed to our GitHub repository for packages, as requested by @al3xtjames.

v0.2.23

08 Sep 19:47

Choose a tag to compare

  • Add the ability to download from file:// URLs. This requires the MPD manifest to specify an absolute BaseURL element at the MPD, Period or Representation level, or to use absolute URLS for all media segments.

  • Add support for the ffmpeg “concat demuxer” as a concatenation helper for multiperiod manifests, as an alternative to the existing ffmpeg “concat filter” support. To use this concatenation helper, all Periods must use the same encoding (same codecs, same time base, etc.), though they may be wrapped in different container formats. This concatenation helper is very fast because it copies the media streams, rather than reencoding them.

    In a typical use case of a multi-period DASH manifest with DAI (where Periods containing advertising have been intermixed with Periods of content), for which it is possible to drop the advertising segments by using --minimum_period_duration or using an XSLT/XPath filter on Period elements, the content segments are likely to all use the same codecs and encoding parameters, so this concat helper should work well.

    Use it with --concat-preference mp4:ffmpegdemuxer for example.

  • Fix an additional possible off-by-one error in calculating the segment count for $Time$-based SegmentTemplate manifests.

  • Fix duplicated merge of BaseURLS for video segments. Patch from @jonasgrosch.

  • Log additional diagnostics information when the verbosity level is greater than 0 or 1 for external commands run for muxing, concatenating, subtitle extraction/merging, and decrypting. The logged information includes the full commandline.

  • Fixed: the concatenation of multiperiod manifests using the ffmpeg concat filter was erroneously adding an empty audio track when none of the input Periods contained audio.