Skip to content

Releases: emarsden/dash-mpd-cli

v0.2.23

08 Sep 19:47
Compare
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.

v0.2.22

26 Aug 07:22
Compare
Choose a tag to compare

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).

v0.2.21

27 Jul 13:39
Compare
Choose a tag to compare
  • 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_scraper crate to the decrypt-cookies crate 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-src crate which was causing builds to fail, and move to current versions of crates in the axum ecosystem used for tests.

v0.2.20

08 Jun 10:06
Compare
Choose a tag to compare
  • 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-preference commandline 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 Role element in an AdaptationSet. Streaming services sometimes publish various additional streams marked with roles such as alternate or supplementary or description, in addition to the main stream which is generally labelled with a role of main. 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 occured when one of the Periods does not contain any audio.

  • Accomodate manifests which declare that a Representation has mimeType="video/mp4" and codecs="mp4a" (or some other audio codec). These Representations are now detected as audio streams rather than as video streams.

v0.2.19

21 May 17:12
Compare
Choose a tag to compare
  • A new commandline argument --minimum_period_duration whose 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.
  • Fixed release builds for Microsoft Windows. These builds are currently using a fork of the bench_scraper crate, pending integration of patches that fix builds on Windows and update dependent crates.

v0.2.18

09 May 15:11
Compare
Choose a tag to compare
  • 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_complex commandline 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 .ttml extension.

v0.2.17

15 Apr 10:22
Compare
Choose a tag to compare
  • 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-retries commandline 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 the max_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-cli is now built also for Linux/ppc64le.

v0.2.16

30 Mar 16:15
Compare
Choose a tag to compare
Prepare for v0.2.16 release

v0.2.15

24 Feb 13:10
Compare
Choose a tag to compare
  • Fix the handling of the --referer commandline option, now used in all network
    requests (bug reported by @yoyo890121).

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.