Cleanup README

Moved build instructions and docker instructions to separate docs.

Removed command samples which are no longer needed as we have better
tutorials now.

Change-Id: I340c5653a6553158325970dd86d76fa11e69bcbd
This commit is contained in:
KongQun Yang 2017-09-06 14:07:49 -07:00
parent 327cb8df88
commit 21b0ca6ea5
5 changed files with 414 additions and 358 deletions

385
README.md
View File

@ -1,373 +1,72 @@
# ![Shaka Packager](docs/shaka-packager.png)
![Shaka Packager](docs/shaka-packager.png)
[![Build Status](https://travis-ci.org/google/shaka-packager.svg?branch=master)](https://travis-ci.org/google/shaka-packager)
[![Build status](https://ci.appveyor.com/api/projects/status/3t8iu603rp25sa74?svg=true)](https://ci.appveyor.com/project/shaka/shaka-packager)
Media packaging SDK intended for C++ programmers writing DASH/HLS packager
applications with common encryption support, Widevine DRM support, Live, and
Video-On-Demand.
Shaka Packager is a tool and a media packaging SDK for
[DASH](http://dashif.org/) and [HLS](https://developer.apple.com/streaming/)
packaging and encryption. It can prepare and package media content for online
streaming.
This document provides the information needed to create a DASH/HLS packager
that is able to remux and encrypt a video into fragmented ISO BMFF format with
common encryption (CENC) support. The DASH/HLS packaging API is also designed
in such a way for easy extension to more source and destination formats.
Current supported codecs:
Shaka Packager supports:
- Both Video-On-Demand and Live.
- Streaming formats:
- [DASH](http://dashif.org/)
- [HLS](https://developer.apple.com/streaming/)
- Key systems:
- [Widevine](http://www.widevine.com/)
- [Playready](https://www.microsoft.com/playready/)<sup>1</sup>
- [Fairplay](https://developer.apple.com/streaming/fps/)<sup>1</sup>
- Encryption standards:
- [CENC](https://en.wikipedia.org/wiki/MPEG_Common_Encryption)
- [SAMPLE-AES](https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Intro/Intro.html)
- Media Containers and codecs
| Codecs | ISO-BMFF | WebM | MPEG2-TS | WVM |
|:-----------------:|:------------:|:------------:|:------------:|:-----------:|
| H264 (AVC) | I / O | - | I / O | I |
| H265 (HEVC) | I / O | - | I | - |
| VP8 | *I / O* | I / O | - | - |
| VP9 | *I / O* | I / O | - | - |
| VP8 | I / O | I / O | - | - |
| VP9 | I / O | I / O | - | - |
| AAC | I / O | - | I / O | I |
| Dolby AC3/EAC3 | I / O | - | - | - |
| DTS | I / O | - | - | - |
| Opus | *I / O* | I / O | - | - |
| Vorbis | - | I / O | - | - |
** I for input and O for output.
** VP8/VP9/Opus support in ISO-BMFF is experimental.
** Opus support in ISO-BMFF is experimental.
- Platforms
- Linux
- Mac
- Windows
- Cross compiling for ARM is also supported.
This project is supported on Linux, Windows and MacOSX platforms.
<sup>1: Limited support</sup>
# Getting Shaka Packager
# Useful Links #
There are several ways you can get Shaka Packager.
- Using [Docker](https://www.docker.com/whatisdocker).
Instructions are available [here](docs/source/docker_instructions.md).
- Get prebuilt binaries from
[release](https://github.com/google/shaka-packager/releases).
- Built from source, see [Build Instructions](docs/source/build_instructions.md)
for details.
# Useful Links
- [API Documentation](https://google.github.io/shaka-packager/docs)
- [Mailing List](https://groups.google.com/forum/#!forum/shaka-packager-users)
(join for release announcements or problem discussions)
- [Docker Builds](https://hub.docker.com/r/google/shaka-packager/tags/)
- [Documentation](https://google.github.io/shaka-packager/)
- [Tutorials](https://google.github.io/shaka-packager/tutorials/tutorials.html)
- Several open source players:
- [Web: Shaka Player](https://github.com/google/shaka-player)
- [Web: dash.js](https://github.com/Dash-Industry-Forum/dash.js)
- [Android: ExoPlayer](https://github.com/google/ExoPlayer)
# Contributing
# Setting Up For Development #
1. Packager source is managed by Git at
https://www.github.com/google/shaka-packager. We use gclient tool from Chromium
to manage third party libraries. You will need Git (v1.7.5 or above) installed
on your machine to access the source code.
2. Install Chromium depot tools which contains gclient and ninja
See http://www.chromium.org/developers/how-tos/install-depot-tools for
details.
3. Get the source
```Shell
mkdir shaka_packager
cd shaka_packager
gclient config https://www.github.com/google/shaka-packager.git --name=src
gclient sync
```
To sync to a particular commit or version, use 'gclient sync -r \<revision\>', e.g.
```Shell
# Sync to commit 4cb5326355e1559d60b46167740e04624d0d2f51
gclient sync -r 4cb5326355e1559d60b46167740e04624d0d2f51
# Sync to version 1.2.0
gclient sync -r v1.2.0
```
4. Build
We use ninja, which is much faster than make, to build our code:
```Shell
cd src
ninja -C out/{Debug,Release} [Module]
```
Module is optional. If not specified, build all, e.g.
```Shell
ninja -C out/Debug # build all modules in Debug mode
ninja -C out/Release # build all modules in Release mode
ninja -C out/Release mp4 # build mp4 module in Release mode
```
Refer to ninja manual for details.
We also provide a mechanism to change build configurations, for example,
developers can change build system to “make” by overriding *GYP_GENERATORS*.
```Shell
GYP_GENERATORS='make' gclient runhooks
```
Another example, developers can also enable clang by overriding *GYP_DEFINE*.
```Shell
GYP_DEFINES='clang=1' gclient runhooks
```
5. Updating the code
Update your current branch with *git pull* followed by *gclient sync*. Note
that if you are not on a branch, *git pull* will not work, and you will need
to use *git fetch* instead.
6. Contributing
If you have improvements or fixes, we would love to have your contributions.
See https://github.com/google/shaka-packager/blob/master/CONTRIBUTING.md for
details.
# Using Docker For Testing / Development #
[Docker](https://www.docker.com/whatisdocker) is a tool that can package an
application and its dependencies in a virtual container to run on different
host operating systems.
1. Install [Docker](https://docs.docker.com/installation/).
2. Pull prebuilt image from Dockerhub or build an image locally
2.a. Pull prebuilt image from Dockerhub
```Shell
docker pull google/shaka-packager
```
2.b. Build an image locally
```Shell
docker build -t google/shaka-packager github.com/google/shaka-packager.git
```
3. Run the container (`your_media_path` should be your media folder)
```Shell
docker run -v /your_media_path/:/media -it --rm google/shaka-packager
```
4. Testing
```Shell
# Make sure you run step 3 and you're inside the container.
cd /media
# VOD: mp4 --> dash
packager input=/media/example.mp4,stream=audio,output=audio.mp4 \
input=/media/example.mp4,stream=video,output=video.mp4 \
--mpd_output example.mpd
# Leave the container.
exit
```
Outputs are available in your media folder `your_media_path`.
# Design Overview #
Major modules are described below:
Demuxer is responsible for extracting elementary stream samples from a
multimedia file, e.g. an ISO BMFF file. The demuxed streams can be fed into a
muxer to generate multimedia files. An optional KeySource can be provided to
Demuxer to decrypt CENC and WVM source content.
Demuxer reads from source through the File interface. A concrete LocalFile
class is already implemented. The users may also implement their own File class
if they want to read/write using a different kinds of protocol, e.g. network
storage, http etc.
Muxer is responsible for taking elementary stream samples and producing media
segments. An optional KeySource can be provided to Muxer to generate encrypted
outputs. Muxer writes to output using the same File interface as Demuxer.
Demuxer and Muxer are connected using MediaStream. MediaStream wraps the
elementary streams and is responsible for the interaction between Demuxer and
Muxer. A demuxer can transmits multiple MediaStreams; similarly, A muxer is
able to accept and mux multiple MediaStreams, not necessarily from the same
Demuxer.
MpdBuilder is responsible for the creation of Media Presentation Description as
specified in ISO/IEC 23009-1 DASH MPD spec.
Refer to [Design](docs/design.md),
[API](https://google.github.io/shaka-packager/docs) for details.
# DASH-IF IOP Compliance #
We try out best to be compliant to [Guidelines for Implementation: DASH-IF
Interoperability Points](http://dashif.org/wp-content/uploads/2015/04/DASH-IF-IOP-v3.0.pdf).
We are already compliant to most of the requirements specified by the document,
with two exceptions:
- ContentProtection elements are still put under Representation element instead
of AdaptationSet element;
- Representations encrypted with different keys are still put under the same
AdaptationSet.
We created a flag '--generate_dash_if_iop_compliant_mpd', if enabled,
- ContentProtection elements will be moved under AdaptationSet;
- Representations encrypted with different keys will be put under different
AdaptationSets, grouped by `@group` attribute.
Users can enable the flag '--generate_dash_if_iop_compliant_mpd' to have these
features. This flag will be enabled by default in a future release.
Please feel free to file a bug or feature request if there are any
incompatibilities with DASH-IF IOP or other standards / specifications.
# Driver Program Sample Usage #
Sample driver programs **packager** and **mpd_generator** are written using the
SDK.
Some sample usages:
Run the program without arguments will display the help page with the list of
command line arguments:
```Shell
packager
```
Dump stream info:
```Shell
packager input=sintel.mp4 --dump_stream_info
```
Demux audio from the input and generate a fragmented mp4:
```Shell
packager input=sintel.mp4,stream=audio,output=fragmented_sintel.mp4
```
Demux streams from the input and generates a mpd with fragmented mp4:
```Shell
packager \
input=sintel.mp4,stream=audio,output=sintel_audio.mp4 \
input=sintel.mp4,stream=video,output=sintel_video.mp4 \
--mpd_output sintel_vod.mpd
```
Includes a subtitle input from webvtt:
```Shell
packager \
input=sintel.mp4,stream=audio,output=sintel_audio.mp4 \
input=sintel.mp4,stream=video,output=sintel_video.mp4 \
input=sintel_english_input.vtt,stream=text,output=sintel_english.vtt \
--mpd_output sintel_vod.mpd
```
You may also generate mpd with live profile by specifying segment_template in
stream descriptors. Here is an example with IPTV input streams:
```Shell
packager \
'input=udp://224.1.1.5:5003,stream=audio,init_segment=live-audio.mp4,segment_template=live-audio-$Number$.mp4,bandwidth=130000' \
'input=udp://224.1.1.5:5003,stream=video,init_segment=live-video-sd.mp4,segment_template=live-video-sd-$Number$.mp4,bandwidth=2000000' \
'input=udp://224.1.1.5:5002,stream=video,init_segment=live-video-hd.mp4,segment_template=live-video-hd-$Number$.mp4,bandwidth=5000000' \
--mpd_output live.mpd
```
A UDP url is of the form udp://ip:port[?options]. Here is an example:
udp://224.1.1.5:5003?reuse=1&interface=10.11.12.13&timeout=1234567.
Three options are supported right now:
- reuse=1|0
Allow or disallow reusing UDP sockets. Default to 0.
- interface=interface_ip_address
Address of the interface over which to receive UDP multicast streams.
- timeout=microseconds
Timeout in microseconds. Default to unlimited.
To generate static mpd with live profile. An additional flag needs to be
specified:
```Shell
packager \
'input=sintel.mp4,stream=audio,init_segment=audio.mp4,segment_template=audio-$Number$.mp4' \
'input=sintel.mp4,stream=video,init_segment=video.mp4,segment_template=video-$Number$.mp4' \
--mpd_output live_static.mpd \
--generate_static_mpd
```
Demux video from the input and generate an encrypted fragmented mp4 using
Widevine encryption with RSA signing key file *widevine_test_private.der*:
```Shell
packager input=sintel.mp4,stream=video,output=encrypted_sintel.mp4 \
--enable_widevine_encryption \
--key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \
--content_id "3031323334353637" \
--signer "widevine_test" \
--rsa_signing_key_path "widevine_test_private.der"
```
The program also supports AES signing. Here is an example with encryption key
rotates every 1800 seconds:
```Shell
packager \
'input=udp://224.1.1.5:5003,stream=audio,init_segment=live-audio.mp4,segment_template=live-audio-$Number$.mp4,bandwidth=130000' \
'input=udp://224.1.1.5:5003,stream=video,init_segment=live-video-sd.mp4,segment_template=live-video-sd-$Number$.mp4,bandwidth=2000000' \
'input=udp://224.1.1.5:5002,stream=video,init_segment=live-video-hd.mp4,segment_template=live-video-hd-$Number$.mp4,bandwidth=5000000' \
--mpd_output live.mpd \
--enable_widevine_encryption \
--key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \
--content_id "3031323334353637" \
--signer "widevine_test" \
--aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \
--aes_signing_iv "d58ce954203b7c9a9a9d467f59839249" \
--crypto_period_duration 1800
```
Note that key rotation is only supported for live profile.
Demux and decrypt video from a WVM container, and generate encrypted fragmented
mp4 using Widevine encryption with RSA signing key file
*widevine_test_private.der*:
```Shell
packager input=sintel.wvm,stream=video,output=encrypted_sintel.mp4 \
--enable_widevine_decryption \
--enable_widevine_encryption \
--key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \
--content_id "3031323334353637" \
--signer "widevine_test" \
--rsa_signing_key_path "widevine_test_private.der"
```
The program can be told to generate MediaInfo files, which can be fed to
**mpd_generate** to generate the mpd file.
```Shell
packager \
input=sintel.mp4,stream=video,output=sintel_video.mp4 \
input=sintel.mp4,stream=audio,output=sintel_audio.mp4 \
--output_media_info
mpd_generator \
--input "sintel_video.mp4.media_info,sintel_audio.mp4.media_info" \
--output "sintel.mpd"
```
Output MPEG2-TS video.
```Shell
packager \
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts'
```
Output HLS playlists with MPEG2-TS video. The following outputs a Master
Playlist as `master.m3u8`. And the Media Playlist for the video as
`playlist.m3u8`. The optional `--hls_base_url` specifies the prefix for the
generated TS segments.
```Shell
packager \
'input=bear-1280x720.mp4,stream=video,segment_template=bear$Number$.ts,playlist_name=playlist.m3u8' \
--hls_master_playlist_output="master.m3u8" \
--hls_base_url="http://localhost:10000/"
```
For audio Media Playlists, the name and group for EXT-X-MEDIA tag must be
specified.
```Shell
packager \
'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8" \
--hls_base_url="http://localhost:10000/"
```
Create DASH trick play, a.k.a. trick mode, stream. The `trick_play_factor` in
the stream descriptor specifies the sampling rate among the key frames in the
video. For example, 1 means every key frame and 2 means every other key frame.
```Shell
packager \
'input=bear-1280x720.mp4,stream=video,output=bear-1280x720_video.mp4' \
'input=bear-1280x720.mp4,stream=video,output=bear-1280x720_video_trick_play.mp4,trick_play_factor=1' \
--mpd_output bear_trick_play.mpd
```

View File

@ -0,0 +1,314 @@
# Build Instructions
Shaka Packager supports building on Windows, Mac and Linux host systems.
## Linux build dependencies
Most development is done on Ubuntu (currently 14.04, Trusty Tahr). The
dependencies mentioned here are only for Ubuntu. There are some instructions
for [other distros below](#notes-for-other-linux-distros).
```shell
sudo apt-get update
sudo apt-get install build-essential curl git python
```
Note that `Git` must be v1.7.5 or above.
## Mac system requirements
* [Xcode](https://developer.apple.com/xcode) 7.3+.
* The OS X 10.10 SDK or later. Run
```shell
$ ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
```
to check whether you have it.
## Windows system requirements
* Visual Studio 2015 Update 3, see below (no other version is supported).
* Windows 7 or newer.
Install Visual Studio 2015 Update 3 or later - Community Edition should work if
its license is appropriate for you. Use the Custom Install option and select:
- Visual C++, which will select three sub-categories including MFC
- Universal Windows Apps Development Tools > Tools (1.4.1) and Windows 10 SDK
(10.0.14393)
## Install `depot_tools`
### Linux and Mac
Clone the `depot_tools` repository from Chromium:
```shell
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
```
Add `depot_tools` to the end of your PATH (you will probably want to put this
in your `~/.bashrc` or `~/.zshrc`). Assuming you cloned `depot_tools` to
`/path/to/depot_tools`:
```shell
$ export PATH="$PATH:/path/to/depot_tools"
```
### Windows
Download the
[depot_tools bundle](https://storage.googleapis.com/chrome-infra/depot_tools.zip)
and extract it somewhere.
*** note
**Warning:** **DO NOT** use drag-n-drop or copy-n-paste extract from Explorer,
this will not extract the hidden “.git” folder which is necessary for
depot_tools to autoupdate itself. You can use “Extract all…” from the context
menu though.
***
Add depot_tools to the start of your PATH (must be ahead of any installs of
Python). Assuming you unzipped the bundle to C:\src\depot_tools, open:
Control Panel → System and Security → System → Advanced system settings
If you have Administrator access, Modify the PATH system variable and
put `C:\src\depot_tools` at the front (or at least in front of any directory
that might already have a copy of Python or Git).
If you don't have Administrator access, you can add a user-level PATH
environment variable and put `C:\src\depot_tools` at the front, but
if your system PATH has a Python in it, you will be out of luck.
Also, add a DEPOT_TOOLS_WIN_TOOLCHAIN system variable in the same way, and set
it to 0. This tells depot_tools to use your locally installed version of Visual
Studio (by default, depot_tools will try to use a google-internal version).
From a cmd.exe shell, run the command gclient (without arguments). On first
run, gclient will install all the Windows-specific bits needed to work with
the code, including msysgit and python.
* If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell),
it may appear to run properly, but msysgit, python, and other tools
may not get installed correctly.
* If you see strange errors with the file system on the first run of gclient,
you may want to
[disable Windows Indexing](http://tortoisesvn.tigris.org/faq.html#cantmove2).
## Get the code
Create a `shaka_packager` directory for the checkout and change to it (you can
call this whatever you like and put it wherever you like, as long as the full
path has no spaces):
```shell
$ mkdir shaka_packager && cd shaka_packager
```
Run the `gclient` tool from `depot_tools` to check out the code and its
dependencies.
```shell
$ gclient config https://www.github.com/google/shaka-packager.git --name=src --unmanaged
$ gclient sync
```
To sync to a particular commit or version, add the '-r \<revision\>' flag to
`gclient sync`, e.g.
```shell
$ gclient sync -r 4cb5326355e1559d60b46167740e04624d0d2f51
```
```shell
$ gclient sync -r v1.2.0
```
If you don't want the full repo history, you can save some time by adding the
`--no-history` flag to `gclient sync`.
When the above commands completes, it will have created a hidden `.gclient` file
and a directory called `src` in the working directory. The remaining
instructions assume you have switched to the `src` directory:
```shell
$ cd src
```
### Build Shaka Packager
#### Linux and Mac
Shaka Packager uses [Ninja](https://ninja-build.org) as its main build tool,
which is bundled in depot_tools.
To build the code, run `ninja` command:
```shell
$ ninja -C out/Release
```
If you want to build debug code, replace `Release` above with `Debug`.
We also provide a mechanism to change build settings, for example,
you can change build system to `make` by overriding `GYP_GENERATORS`:
```shell
$ GYP_GENERATORS='make' gclient runhooks
```
Another example, you can also disable clang by overriding `GYP_DEFINES`:
```shell
$ GYP_DEFINES='clang=0' gclient runhooks
```
#### Windows
The instructions are similar, except that Windows allows using either `/` or `\`
as path separator:
```shell
$ ninja -C out/Release
$ ninja -C out\Release
```
Also, unlike Linux / Mac, 32-bit is chosen by default even if the system is
64-bit. 64-bit has to be enabled explicitly and the output directory is
configured to `out/%CONFIGURATION%_x64`, i.e.:
```shell
$ GYP_DEFINES='target_arch=x64' gclient runhooks
$ ninja -C out/Release_x64
```
### Build artifacts
After a successful build, you can find build artifacts including the main
`packager` binary in build output directory (`out/Release` or `out/Release_x64`
for release build).
See [Shaka Packager Documentation](https://google.github.io/shaka-packager/)
on how to use `Shaka Packager`.
### Update your checkout
To update an existing checkout, you can run
```shell
$ git pull origin master --rebase
$ gclient sync
```
The first command updates the primary Packager source repository and rebases on
top of tip-of-tree (aka the Git branch `origin/master`). You can also use other
common Git commands to update the repo.
The second command syncs dependencies to the appropriate versions and re-runs
hooks as needed.
## Cross compiling for ARM on Ubuntu host
The install-build-deps script can be used to install all the compiler
and library dependencies directly from Ubuntu:
```shell
$ ./pacakger/build/install-build-deps.sh
```
Install sysroot image and others using `gclient`:
```shell
$ GYP_CROSSCOMPILE=1 GYP_DEFINES="target_arch=arm" gclient runhooks
```
The build command is the same as in Ubuntu:
```shell
$ ninja -C out/Release
```
## Notes for other linux distros
### Arch Linux
Instead of running `sudo apt-get install` to install build dependencies, run:
```shell
$ sudo pacman -S --needed python2 git curl gcc gcc-libs make
$ sudo ln -sf python2 /usr/bin/python
```
Clang requires libtinfo.so.5 which is not available by default on Arch Linux.
You can get libtinfo from ncurses5-compat-libs in AUR:
```shell
$ git clone https://aur.archlinux.org/ncurses5-compat-libs.git
$ cd ncurses5-compat-libs
$ gpg --keyserver pgp.mit.edu --recv-keys F7E48EDB
$ makepkg -si
```
### Debian
Same as Ubuntu.
### Fedora
Instead of running `sudo apt-get install` to install build dependencies, run:
```shell
$ su -c 'yum install -y git python git curl gcc-c++ findutils bzip2 \
ncurses-compat-libs'
```
### OpenSUSE
Use `zypper` command to install dependencies:
```shell
sudo zypper in git python python-xml git curl gcc-c++ tar
```
## Tips, tricks, and troubleshooting
### Xcode license agreement
If you're getting the error
> Agreeing to the Xcode/iOS license requires admin privileges, please re-run as
> root via sudo.
the Xcode license hasn't been accepted yet which (contrary to the message) any
user can do by running:
```shell
$ xcodebuild -license
```
Only accepting for all users of the machine requires root:
```shell
$ sudo xcodebuild -license
```
## Contributing
If you have improvements or fixes, we would love to have your contributions.
See https://github.com/google/shaka-packager/blob/master/CONTRIBUTING.md for
details.
We have continue integration tests setup on pull requests. You can also verify
locally by running the tests manually.
If you know which tests are affected by your change, you can limit which tests
are run using the `--gtest_filter` arg, e.g.:
```shell
$ out/Debug/mp4_unittest --gtest_filter="MP4MediaParserTest.*"
```
You can find out more about GoogleTest at its
[GitHub page](https://github.com/google/googletest).

View File

@ -0,0 +1,43 @@
# Using Docker
[Docker](https://www.docker.com/whatisdocker) is a tool that can package an
application and its dependencies in a virtual container to run on different
host operating systems.
## Get Shaka Packager from Dockerhub
To pull latest Shaka Packager:
```shell
$ docker pull google/shaka-packager
```
You can pull a specific version, e.g. v1.6.2:
```shell
$ docker pull google/shaka-packager:release-v1.6.2
```
The full list of tags is available
[here](https://hub.docker.com/r/google/shaka-packager/tags/).
## Run the container
Assume you have your media files stored in `host_media_path` in the host
machine.
This runs the container and maps `host_media_path` to `media` in the container:
```shell
$ docker run -v /host_media_path/:/media -it --rm google/shaka-packager
```
Then in the container, run the packager command, e.g.:
```shell
$ packager input=/media/example.mp4,stream=audio,output=/media/audio.mp4 \
input=/media/example.mp4,stream=video,output=/media/video.mp4 \
--mpd_output /media/example.mpd
```
Outputs are available in the host's media folder `host_media_path`.

View File

@ -87,7 +87,7 @@ const char kUsage[] =
" If specified, the output is a trick play stream.\n"
" - hls_name: Required for audio when outputting HLS.\n"
" name of the output stream. This is not (necessarily) the same as\n"
" output. This is used as the NAME attribute for EXT-X-MEDIA\n"
" output. This is used as the NAME attribute for EXT-X-MEDIA.\n"
" - hls_group_id: Required for audio when outputting HLS.\n"
" The group ID for the output stream. This is used as the GROUP-ID\n"
" attribute for EXT-X-MEDIA.\n"

View File

@ -15,9 +15,9 @@
DEFINE_bool(enable_widevine_encryption,
false,
"Enable encryption with Widevine license server/proxy. User should "
"provide either AES signing key (--aes_signing_key, "
"--aes_signing_iv) or RSA signing key (--rsa_signing_key_path).");
"Enable encryption with Widevine key server. User should provide "
"either AES signing key (--aes_signing_key, --aes_signing_iv) or "
"RSA signing key (--rsa_signing_key_path).");
DEFINE_bool(enable_widevine_decryption,
false,
"Enable decryption with Widevine license server/proxy. User should "