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.
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.
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.
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.
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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_durationor 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:ffmpegdemuxerfor 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.
Improvements to the handling of subtitles: we make additional efforts to extract STPP subtitles from
a sequence of fMP4 segments, as a .ttml file. ffmpeg does not currently seem to be able to extract
this in the more commonly supported SRT format. When saving to a Matroska container (.mkv or
.webm output files), we attempt to embed subtitle tracks with mkvmerge instead of with MP4Box
(which fails).
Fix off-by-one bug in the calculation of the number of media fragments to download when using
SegmentTemplate addressing with $Number$. The initialiation segment was being counted towards the
number of segments, but should not be. Bug reported by @vidasi.
When the audio and video tracks are unsynchronized due to a difference in their startTime attribute,
we attempt to fix this desynchronization during muxing. This is a rare problem in the wild and has
not been heavily tested. The fix is currently only implemented when using ffmpeg as a muxer
application (uses the -itsoffset commandline option).
-
The progress bar will be updated more frequently, and more reliably when segment sizes are small and network speeds are high (suggestion from @filiptibell).
-
Move from the unmaintained
bench_scrapercrate to thedecrypt-cookiescrate for access to cookies from your web browser. This crate also supports a wider range of web browsers. -
Move to v0.23 of the rustls crate for various performance and security improvements to TLS connection handling.
-
Update the
protobuf-srccrate which was causing builds to fail, and move to current versions of crates in the axum ecosystem used for tests.
-
Add support for concatenating streams in multi-period manifests using mkvmerge, as an alternative to the existing support for concatenation using ffmpeg. The preference ordering for concatenation helpers is specified by commandline argument
--concat-preference, which works similarly to the existing--muxer-preferencecommandline argument.Concatenation using mkvmerge works at least with MP4 and with Matroska (.mkv) containers. It tends to be much faster than using ffmpeg but also less robust (less tolerant of the variety of media encoding specificities found in the wild). You can specify multiple concatenation helpers, in which case they will be called sequentially until one of them returns a success code.
-
Allow the user to specify a preference for streams based on the value of the
Roleelement in anAdaptationSet. Streaming services sometimes publish various additional streams marked with roles such asalternateorsupplementaryordescription, in addition to the main stream which is generally labelled with a role ofmain. The user can specify a preference order for these role annotations, which is applied after the language preference and before the width/height/quality preference. -
Fix a bug in concatenation for multiperiod manifests that occurred when one of the Periods does not contain any audio.
-
Accomodate manifests which declare that a Representation has
mimeType="video/mp4"andcodecs="mp4a"(or some other audio codec). These Representations are now detected as audio streams rather than as video streams.
-
A new commandline argument
--minimum_period_durationwhose argument is a number of seconds. Periods in the manifest whose duration is less than this value will not be downloaded. This may be useful to avoid overloading the servers that deliver advertising segments that are sliced into the content of interest. -
Fix a bug in the concatenation of multiperiod manifests. When per-Period files contained both audio and video content, the content was being included twice in the concatenated file.
-
MacOS release binaries are now universal binaries, rather than Aarch64 ("Apple Silicon") binaries.
-
Fix bug in filename handling when using the ffmpeg concatenation filter, which is used for multiperiod manifests when the technical characteristics of the different periods make it possible to concatenate them without reencoding. Filenames were not properly escaped when passed as arguments to the
filter_complexcommandline argument. -
Add support for subtitles that use SegmentBase addressing.
-
Subtitles in STPP format (a data stream in MP4 fragments) are now converted to TTML format. The XML data stream is extracted using ffmpeg. If the conversion is successful it will be saved to a file with the same name as the output file, but with a
.ttmlextension.
-
Network requests for media fragments that fail are retried a certain number of times. The number of retries for each fragment request can be set using the
--fragment-retriescommandline argument (default is 10). Network errors that are identified as being transient (for example, network timeouts) do not count towards this retry count. Network requests were previously retried only if they were identified as transient, but anecdotally it seems that the internet and CDN servers are not set up in a way that allows transient errors reliably to be distinguished from non-transient errors. Non-transient retries still count towards themax_error_count, whose default value is increased to 30. -
Error messages include additional contextual information. For example, a network connection error caused by a TLS configuration error will include information on the underlying issue.
-
The prebuilt software container
ghcr.io/emarsden/dash-mpd-cliis now built also for Linux/ppc64le.
-
Improvements to error reporting. Network timeouts and connection errors will now be reported as different error types. Additional contextual information regarding the underlying source of an error will be printed. For example, a network connection error caused by a TLS configuration error will include information on the underlying issue.
-
Updates to our dependencies (in particular the reqwest crate used for HTTP requests) should allow improved compatibility and performance.
- Fix the handling of the
--referercommandline option, which is now used in all network requests (bug reported by @yoyo890121).
-
The referer header specified using the
--referercommandline option is now used in all network requests, including requests for media segments. Previously, the referer specified on the commandline was only used to retrieve the MPD manifest, and the referer header used in network requests for media segments was the URL of the MPD manifest, updated to account for any HTTP redirects and for use of the DASHLocationredirect functionality. The new behaviour allows the user to mimic the behaviour of a web browser which is playing media embedded in a web page. -
Cookies set while retrieving the MPD manifest will be included in requests for media segments. In practice, media servers rarely check cookies, as doing so is expensive on CDN infrastructure, but this should help to mimic the behaviour of a web browser which is playing media embedded in a web page.
-
Fix handling of XLinked elements when remote XML fragment contains multiple elements.
-
Fix the handling of XLinked elements. The Shaka heliocentrism test case now works correctly.
-
Widevine and PlayReady initialization data will now be decoded and pretty printed, alongside their Base64 representation (uses the new
pssh-boxcrate). -
Fix concatenation for multiperiod manifests in situations where one period has audio and another has no audio track.
-
The
tracingcrate is now used for all logging purposes. Logged messages can be controlled using theRUST_LOGenvironment variable. As previously, warning and error messages are printed to stderr, and other informative messages to stdout, but they will now be prefixed by a timestamp. -
The Docker container at
ghcr.io/emarsden/dash-mpd-cliis now also available for linux/arm/v7 (32-bit ARM) and linux/riscv64, in addition to linux/amd64 and linux/arm64. -
Fix bug in the handling of toplevel
Period.SegmentTemplateelements (rarely present in the wild, but allowed by the DASH specification). -
When deciding whether downloaded video files can be concatenated using the ffmpeg concat muxer, we tolerate missing sar metainformation (not always present in MP4 containers in the wild).
-
New commandline argument
--drop-elementswhich takes an XPath expression as argument. XML elements in the MPD manifest that match this XPath expression will be removed from the manifest before downloading. This may be useful to help select an audio track based on attributes such as its role or label, or to avoid overloading the servers that serve advertising content. -
Include the query component of the MPD URL in requests for media segments, to support the token-based authentication used by some streaming services. If the manifest URL is
https://example.com/manifest.mpd?token=foo, requests to segments will look like/segment/42.m4v?token=foo, unless the manifest includes an explicit query component in the segment URLs. -
Muxing to a WebM container using the VLC external muxer should be fixed.
-
A user manual is available on GitHub pages.
-
dash-mpd-cli can be run in a Podman/Docker container, packaged on the GitHub Container Registry at
ghcr.io/emarsden/dash-mpd-cli. The container conveniently includes most of the external helper applications (ffmpeg, MP4Box, mkvmerge, shaka-packager, mp4decrypt, etc.). It’s a multiarch container, currently packaged for linux/amd64 and linux/arm64. See the user manual for details on running in a container. -
The current download bandwidth is displayed in the progress bar, if it is activated.
-
Fix the calculation of audio segments to be downloaded for a live stream (dynamic manifest) for which
--force_durationhas been specified.
-
Add the possibility to use the Shaka packager application for decryption of media with Content Protection, as an alternative to mp4decrypt. The shaka-packager application is able to handle more media formats (e.g. WebM/Matroska containers) and is better maintained than mp4decrypt. See the commandline arguments
--decryption-applicationand--shaka-packager-location. -
New commandline argument
--enable-live-streamsthat makes it possible to attempt to download from a live (dynamic) manifest. Downloading from a genuinely live stream won’t work well, because we don’t implement the clock-related throttling needed to only download media segments when they become available. However, some media sources publish pseudo-live streams where all media segments are in fact available (they don’t update the manifest once the live is complete), which we will be able to download. You might also have some success in combination with the--sleep-requestscommandline argument. -
New commandline argument
--force-durationwhich makes it possible to specify the number of seconds of content to download from the DASH stream. This may be necessary when using--enable-live-streams, because live streams often don’t specify a duration. It can also be used to download only the first part of a normal (static) stream. -
Fix the selection of the desired Representation (according to the user’s quality/resolution preferences) for DASH manifests that include multiple AdaptationSets. This is the case on some manifests that offer media streams using different codecs. We were previously only examining Representation elements in the first AdaptationSet present in the manifest.
-
Add preliminary support for applying rewrite rules to the MPD manifest before downloading media segments. Rewrite rules are expressed as XSLT stylesheets that are applied to the manifest using the
xsltproccommandline tool (which supports XSLT v1.0). This allows complex rewrite rules to be expressed using a standard (if a little finicky) stylesheet language. See the--xslt-stylesheetcommandline option.This functionality and API are experimental, and may evolve to use a different XSLT processor, such as Saxon-HE (https://github.com/Saxonica/Saxon-HE/) which has support for XSLT v3.0, but is implemented in Java. Alternatively, a more general filtering functionality based on WASM bytecode might be implemented to allow the implementation of rewrite rules in a range of languages that can compile to WebAssembly.
-
Change the default ordering of muxer applications when saving media to a .webm container to prefer VLC over ffmpeg. With the commandline arguments that we use, ffmpeg does not automatically reencode content to a codec that is allowed by the WebM specification, whereas VLC does do so.
-
Some limited DASH conformity checks will be run on manifests before downloading, which may generate warnings written to stderr. A surprising number of manifests, including some generated by the most widely used commercial streaming software, feature non-conformities such as incorrect values of @maxWidth / @maxHeight or inserted advertising segments that don't respect @maxSegmentDuration).
-
Allow the user to specify the order in which muxer applications are tried, instead of using a hard-coded ordering per container type. The ordering is specified per container type ("mkv", "mp4", "avi", "ts", etc.). The user specifies an ordering such as "ffmpeg,vlc,mp4box" which means that ffmpeg is tried first, and if that fails vlc, and if that fails mp4box. The muxers currently available are ffmpeg, vlc, mkvmerge and mp4box. See commandline arguemnt
--muxer-preference. -
Work around a bug in VLC, which does not correctly report failure to mux via a non-zero exit code.
-
New commandline argument
--auth-bearerto specify the token to be used for Bearer authentication of network requests to retrieve the manifest and the media segments. This is the authentication method specified in RFC 6750, originally designed for OAuth 2.0, but also used in other settings such as JSON Web Tokens (JWT). -
Enable support for MPEG-4 Part 17 (Timed Text) subtitles (tx3g codec). They will be converted to SRT format if the MP4Box commandline application is installed.
-
When printing the available media streams, print
RoleandLabelinformation if they are specified on anAdaptationSetelement. -
Fix handling of
MPD.Locationfield (thanks to @nissy34).
-
New commandline arguments
--prefer-video-widthand--prefer-video-heightwhich allow the user to specify the video stream to be downloaded, when multiple video streams with different resolutions are made available. The video stream with the horizontal (respectively vertical) resolution closest to the specified width (respectively height) is chosen. This preference only concerns the video stream; use the--qualitycommandline argument to specify the preferred audio stream when multiple audio streams with different quality levels are available. If a preference for both video width and video height is provided, the preferred width is used. A width or height preference overrides (for the video stream) a specified quality preference. -
New value
intermediaterecognized for the--qualitycommandline argument. If the DASH manifest specifies several Adaptations with different bitrates or quality levels (specified by the@qualityRankingattribute in the manifest -- quality ranking may differ from bandwidth ranking when different codecs are used), prefer the Adaptation with an intermediate bitrate (closest to the median value). -
New commandline arguments
--auth-usernameand--auth-passwordto specify the username and password to be used for authentication with the server. Currently, only HTTP Basic authentication is supported. -
Improve support for selecting the output container format based on its filename extension. Selecting an output file with an
.mkvextension will now produce an output file in Matroska container format, even in cases where the manifest only contains a video stream or only an audio stream (shortcircuiting the muxing functionality). In these cases, the stream will be copied if the output container requested is compatible with the downloaded stream format, and otherwise a new media container with the requested format will be created and the audio or video stream will be inserted (and reencoded if necessary) into the output file. This insertion and reencoding is undertaken by the same commandline applications used for muxing: ffmpeg, mkvmerge, mp4box (currently not vlc).
-
New commandline argument
--header(alias-H) which is compatible with cURL. This can be convenient when using “Copy as cURL” functionality in Chromium DevTools. The syntax for the argument is slightly different from the existing--add-headercommandline argument. -
On startup, check whether a newer version is available as a GitHub release, unless the
--no-version-checkcommandline option is enabled. -
Improve support for multiperiod manifests. When the contents of the different periods can be joined into a single output container (because they share the same resolution, frame rate and aspect ratio), we concatenate them using ffmpeg (with reencoding in case the codecs in the various periods are different). If they cannot be joined, we save the content in output files named according to the requested output file (whose name is used for the first period). Names ressemble "output-p2.mp4" for the second period, and so on.
-
New function
concatenate_periodsonDashDownloaderto specify whether the concatenation using ffmpeg (which is very CPU-intensive due to the reencoding) of multi-period manifests should be attempted. The default behaviour is to concatenate when the media contents allow it. -
Improved support for certain addressing types on subtitles (AdaptationSet>SegmentList, Representation>SegmentList, SegmentTemplate+SegmentTimeline addressing modes).
-
Significantly improved support for XLink semantics on elements (remote elements). In particular, a remote XLinked element may resolve to multiple elements (e.g. a Period with href pointing to a remote MPD fragment may resolve to three final Period elements), and a remote XLinked element may contain a remote XLinked element (the number of repeated resolutions is limited, to avoid DoS attacks).
-
New commandline argument
--refererto specify the value of the Referer HTTP header. This is an alternative to the use of the--add-headercommandline argument. -
Fix regression: restore printing of logged diagnostics.
-
Add support for EIA-608 aka CEA-608 subtitles/closed captions.
-
More diagnostics information is printed concerning the selected audio/video streams. In particular, pssh information will be printed for streams with ContentProtection whose pssh is embedded in the initialization segments rather than in the DASH manifest.
-
New commandline argument
--simulateto retrieve the MPD manifest but not download any audio, video or subtitle content. -
Improve support for retrieving subtitles that are distributed in fragmented MP4 streams (in particular WebVTT/STPP formats).
-
More diagnostics information is printed concerning the selected audio/video streams.
-
Support for decrypting encrypted media streams that use ContentProtection, via the Bento4 mp4decrypt commandline application. See the
--keycommandline argument to allow kid:key pairs to be specified, and the--mp4decrypt-locationcommandline argument to specify a non-standard location for the mp4decrypt binary. -
Fix a bug in the handling of the
--add-headercommandline argument.
-
Incompatible change to the
--keep_audioandkeep_videocommandline arguments, to allow the user to specify the path for the audio and video files. Instead of operating as flags, they allow the user to specify the filename to which the corresponding stream will be saved (and not deleted after muxing). -
New commandline argument
--client-identity-certificateto provide a file containing a private key and certificate (both encoded in PEM format). These will be used to authenticate TLS network connections. -
Print information on the different media streams available (resolution, bitrate, codec) in a manifest when requested verbosity is non-zero.
-
New commandline argument
--add-root-certificateto add an X.509 certificate to the list of root certificates used to check TLS connections to servers. Certificates should be provided in PEM format. -
New commandline argument
--no-proxyto disable use of a proxy, even if related enviroment variables (HTTP_PROXYetc.) are set. -
Connection errors at the network level are handled as permanent, rather than transient, errors. In particular, TLS certificate verification errors will no longer be treated as transient errors.
- New commandline argument
--cookies-from-browserto load HTTP cookies from a web browser (support for Firefox, Chromium, Chrome, ChromeBeta, Edge and Safari on Linux, Windows and MacOS, via the bench_scraper crate). This support is gated by thecookiesfeature, which is enabled by default. Disable it (with--no-default-features) to build on platforms which are not supported by the bench_scraper crate, such as Android/Termux.
-
Add commandline argument
--save-fragmentsto save media fragments (individual DASH audio and video segments) to the specified directory. -
Add commandline argument
--mp4box-location=<path>to allow a non-standard location for the MP4Box binary (from the GPAC suite) to be specified. -
Update to version 0.9.0 of the dash-mpd crate, which is more tolerant of unexpected extensions to the DASH schema.
- New commandline argument
--limit-rateto throttle the network bandwidth used to download media segments, expressed in octets per second. The limit can be expressed with a k, M or G suffix to indicate kB/s, MB/s or GB/s (fractional suffixed quantities are allowed, such as1.5M). The default is not to throttle bandwidth.
-
New commandline argument
--max-error-countto specify the maximum number of non-transient network errors that should be ignored before a download is aborted. This is useful in particular on some manifests using Time-based or Number-based SegmentLists for which the packager calculates a number of segments which is different to our calculation (in which case the last segment can generate an HTTP 404 error). -
Update to version 0.7.3 of the dash-mpd crate, which provides better handling of transient and non-transient network errors.
-
Fix bug in the handling the value of the
--sleep-requestscommandline argument.
- Update to version 0.7.2 of the dash-mpd crate. This provides support for downloading additional types of subtitles in DASH streams. This version also makes it possible to select between native-tls and rustls-tls TLS implementations. We build with rustls-tls in order to build static Linux binaries using musl-libc, and to simplify building on Android.
- Move to async API used by version 0.7.0 of the dash-mpd crate. There should be no user-visible changes in this version.
- Add commandline argument
--write-substo download subtitles, if they are available. Subtitles are downloaded to a file with the same name as the audio-video content, but a filename extension dependent on the subtitle format (.vtt,.ttml,.srt).
-
Add commandline arguments
--keep-videoand--keep-audioto retain the files containing video and audio content after muxing. -
Add commandline argument
--ignore-content-typeto disable checks that content-type of fragments is compatible with audio or video media (may be required for some poorly configured servers).
-
Produce release binaries for Linux/AMD64, Windows and MacOS/AMD64 using Github Actions.
-
Update the version of the clap crate used to parse commandline arguments.
- Add commandline arguments
--vlc-location=<path>and--mkvmerge-location=<path>to allow specification of a non-standard location for the VLC and mkvmerge binaries, respectively.
-
Add commandline arguments
--audio-onlyand--video-only, to retrieve only the audio stream, or only the video stream (for streams in which audio and video content are available separately). -
Add commmandline argument
--prefer-languageto allow the user to specify the preferred language when multiple audio streams with different languages are available. The argument must be in RFC 5646 format (e.g. "fr" or "en-AU"). If a preference is not specified and multiple audio streams are present, the first one listed in the DASH manifest will be downloaded.
- Add
--sleep-requestscommandline argument, a number of seconds to sleep between network requests. This provides a primitive mechanism for throttling bandwidth consumption.
- Add
--ffmpeg-locationcommandline argument, to use an ffmpeg which is not in the PATH.
- Initial release.