Releases: emarsden/dash-mpd-cli
Release list
v0.2.33
New commandline option --prefer-video-codecs which accepts a comma-separated list of the form avc1,hev1,vvc1. Each codec is specified in FourCC format. For a multi-codec manifest (one which offers multiple Representation streams with the same resolution and different video encoding formats), this option allows you to choose which Representation to download. You can see the video codecs which are available for a manifest by using the --simulate commandline option. If full family.subfamily codec names of the form avc1.64001E are specified, you can use only the family part of the name.
New commandline option --want-video-id which accepts a single argument which is interpreted as a substring. When multiple video streams are offered in a manifest, this allows you to specify which video Representation to download by referring to its id. The provided substring is used as a filter on available video Representations: if the full id is provided this selects the specified Representation, and if only a substring of the id is specified, this preference will be combined with other preferences such as the quality level and codec preference to select a single preferred video stream. Use the --simulate commandline option to see the ids available in a manifest.
This release improves the way in which video stream selection is implemented, to allow selection based on both video width/height and codec and quality, in situations where multiple Representations are available with the same resolution but different codecs or quality settings. If there are multiple Representations with the same “score” with respect to a user-specified parameter (for example, several Representations with the same video resolution but with different codecs), all identical score Representations will now be passed on to the next filtering stage, whereas previously only one Representation (the first listed in the manifest) would be selected. Filtering of video Representations takes place in the following order:
- @id substring
- video width
- video height
- video codec
- quality/bandwidth (defaulting to the lowest quality and file size)
Migrate from the unmaintained number_prefix crate to the unit-prefix crate.
v0.2.32
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
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
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
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
-
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
-
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@availabilityStartTimeand 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
-
New commandline option
--base-urlthat allows you to specify a Base URL to be used for all segment downloads. This overrides anyBaseURLelement provided in the DASH MPD. This option may be useful when downloading from a manifest specified as a file:// URL, which does not contain aBaseURLelement. -
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
- HTTP requests will now try to establish HTTP/2 connections if the functionality is advertised by an HTTP server, using the
Upgradeheader. Disable this by building without thehttp2feature on ourdash-mpd-rsdependency. - ffmpeg muxing support supports the use of the
DASHMPD_PERSIST_FILESenvironment 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
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.