# Installation

The recommended way of running dash-mpd-cli is conveniently sandboxed in a [Podman
container](container.html). If you prefer to install the software and its dependencies on your
computer in the traditional way, you can download a prebuilt binary or build from source yourself.

**Binary releases** are [available on GitHub](https://github.com/emarsden/dash-mpd-cli/releases) for
GNU/Linux on AMD64 (statically linked against Musl Libc to avoid glibc versioning problems),
Microsoft Windows on AMD64 and MacOS on aarch64 (“Apple Silicon”) and AMD64. These are built
automatically on the GitHub continuous integration infrastructure.

You can also **build from source** using an [installed Rust development
environment](https://www.rust-lang.org/tools/install):

```shell
cargo install dash-mpd-cli
```

This installs the binary to your installation root’s `bin` directory, which is typically
`$HOME/.cargo/bin`.


## External dependencies

You should also install the following **dependencies**:

- the mkvmerge commandline utility from the [MkvToolnix](https://mkvtoolnix.download/) suite, if you
  download to the Matroska container format (`.mkv` filename extension). mkvmerge is used as a
  subprocess for muxing (combining) audio and video streams. See the `--mkvmerge-location`
  commandline argument if it’s not installed in a standard location (not on your PATH).

- [ffmpeg](https://ffmpeg.org/) for muxing audio and video streams and for concatenating streams
  from a multi-period manifest. The ffprobe binary (distributed with ffmpeg) is required alongside
  the ffmpeg binary. See the `--ffmpeg-location` commandline argument if this is installed in a
  non-standard location.

- [vlc](https://www.videolan.org/vlc/) as an alternative application for muxing audio and video
  streams (sometimes VLC is able to mux certain streams that ffmpeg doesn’t support). See the
  `--vlc-location` commandline argument if this is installed in a non-standard location. Also see
  the `--muxer-preference` commandline argument to specify which muxing application to prefer for
  different container types.

- the MP4Box commandline utility from the [GPAC](https://gpac.wp.imt.fr/) project, to help with
  subtitles in wvtt format. If it’s installed, MP4Box will be used to convert the wvtt stream to the
  more widely recognized SRT format. MP4Box can also be used for muxing audio and video streams to
  an MP4 container, as a fallback if ffmpeg and vlc are not available. See the `--mp4box-location`
  commandline argument if this is installed in a non-standard location.

- the mp4decrypt commandline application from the [Bento4
  suite](https://github.com/axiomatic-systems/Bento4/), if you need to fetch encrypted content.
  [Binaries are available](https://www.bento4.com/downloads/) for common platforms. See the
  `--mp4decrypt-location` commandline argument if this is installed in a non-standard location.

- for some types of streams that the mp4decrypt application is not able to decrypt (for example
  content in WebM containers), you should install the [Shaka packager
  application](https://github.com/shaka-project/shaka-packager) developed by Google. See the
  `--decryption-application` commandline option to specify the choice of decryption application, and
  the `--shaka-packager-location` commandline argument if it is installed in a non-standard location.

- the xsltproc commandline utility packaged with libxslt, which is used for the MPD rewriting
  functionality (the `--drop-elements` and `--xslt-stylesheet` commandline options).



## Supported platforms

This crate is tested on the following **platforms**:

- Our container images are tested using Podman on Linux and Windows

- Linux on AMD64 (x86-64) and Aarch64 architectures

- MacOS on AMD64 and Aarch64 architectures

- Microsoft Windows 10 and Windows 11 on AMD64. We recommend you [install the free Microsoft Terminal
  application](https://aka.ms/terminal) from the Microsoft Store, instead of using the ancient and
  buggy command prompt.

- Android 12 on Aarch64 via [termux](https://termux.dev/) (you’ll need to install the `̀rust`,
  `binutils` and `ffmpeg` packages, and optionally the `mkvtoolnix`, `vlc` and `gpac` packages).
  You’ll need to disable the `cookies` feature by building with `--no-default-features`.

- FreeBSD/AMD64 and OpenBSD/AMD64. You’ll need to disable the `cookies` feature. Some of the
  external applications we depend on (e.g. mp4decrypt, Shaka packager) are poorly supported on OpenBSD.

It should also work on more obscure platforms, such as ppc64le and RISC-V, as long as you can
install a recent Rust toolchain and have ffmpeg working.
