Releases: emarsden/dash-mpd-cli
v0.2.14
-
The referer header specified using the
--referer
commandline 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 DASHLocation
redirect 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.
main
CI: debug release build on aarch64-apple-darwin
v0.2.13
-
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-box
crate). -
Fix concatenation for multiperiod manifests in situations where one period has audio and another has no audio track.
-
We have changed the workflow used to produce release binaries, and these are currently generated for fewer platforms than previously. We will hopefully restore the missing platforms in future releases.
v0.2.12
-
The
tracing
crate is now used for all logging purposes. Logged messages can be controlled using
theRUST_LOG
environment 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-cli
is 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.SegmentTemplate
elements (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).
v0.2.11
-
New commandline argument
--drop-elements
which 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.
v0.2.10
-
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_duration
has been specified.
v0.2.9
-
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-application
and--shaka-packager-location
. -
New commandline argument
--enable-live-streams
that 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-requests
commandline argument. -
New commandline argument
--force-duration
which 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.
v0.2.8
-
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
thexsltproc
commandline 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-stylesheet
commandline 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).
v0.2.7
-
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.
v0.2.6
-
New commandline argument
--auth-bearer
to 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
Role
andLabel
information if they are
specified on anAdaptationSet
element. -
Fix handling of
MPD.Location
field (thanks to @nissy34).