Releases: emarsden/dash-mpd-cli
v0.2.23
-
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
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
-
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 thedecrypt-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
-
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 anAdaptationSet
. Streaming services sometimes publish various additional streams marked with roles such asalternate
orsupplementary
ordescription
, 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 occured 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.
v0.2.19
- 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
- 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
-
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 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-cli
is now built also for Linux/ppc64le.
v0.2.16
Prepare for v0.2.16 release
v0.2.15
- Fix the handling of the
--referer
commandline option, now used in all network
requests (bug reported by @yoyo890121).
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.