Skip to content

Releases: emarsden/dash-mpd-cli

v0.2.14

18 Feb 22:17
Compare
Choose a tag to compare
  • 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 DASH Location 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

21 May 17:55
Compare
Choose a tag to compare
CI: debug release build on aarch64-apple-darwin

v0.2.13

06 Feb 09:48
Compare
Choose a tag to compare
  • 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

25 Dec 21:21
Compare
Choose a tag to compare
  • The tracing crate is now used for all logging purposes. Logged messages can be controlled using
    the RUST_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

09 Dec 10:45
Compare
Choose a tag to compare
  • 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

28 Nov 08:54
Compare
Choose a tag to compare
  • 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

18 Nov 15:48
Compare
Choose a tag to compare
  • 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

04 Nov 21:30
Compare
Choose a tag to compare
  • 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 xsltproc 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

15 Oct 12:28
Compare
Choose a tag to compare
  • 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

30 Sep 17:04
Compare
Choose a tag to compare
  • 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 and Label information if they are
    specified on an AdaptationSet element.

  • Fix handling of MPD.Location field (thanks to @nissy34).