diff --git a/README.md b/README.md
index c5de1bc90b..efa58badaa 100644
--- a/README.md
+++ b/README.md
@@ -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.
+Shaka Packager supports:
-Current supported codecs:
+- 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/)1
+ - [Fairplay](https://developer.apple.com/streaming/fps/)1
+- 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 | - | - |
+ | 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.
+ ** Opus support in ISO-BMFF is experimental.
+- Platforms
+ - Linux
+ - Mac
+ - Windows
+ - Cross compiling for ARM is also supported.
-| 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 | - | - |
-| 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.
+1: Limited support
-This project is supported on Linux, Windows and MacOSX platforms.
+# Getting Shaka Packager
+There are several ways you can get Shaka Packager.
-# Useful Links #
+- 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 \', 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
-
- 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
-```
+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.
diff --git a/docs/source/build_instructions.md b/docs/source/build_instructions.md
new file mode 100644
index 0000000000..b160b233b8
--- /dev/null
+++ b/docs/source/build_instructions.md
@@ -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 \' 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).
diff --git a/docs/source/docker_instructions.md b/docs/source/docker_instructions.md
new file mode 100644
index 0000000000..c1f73b6ced
--- /dev/null
+++ b/docs/source/docker_instructions.md
@@ -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`.
diff --git a/packager/app/packager_main.cc b/packager/app/packager_main.cc
index fa7e034322..af49db2215 100644
--- a/packager/app/packager_main.cc
+++ b/packager/app/packager_main.cc
@@ -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"
diff --git a/packager/app/widevine_encryption_flags.cc b/packager/app/widevine_encryption_flags.cc
index f26eb6b578..9604978fdc 100644
--- a/packager/app/widevine_encryption_flags.cc
+++ b/packager/app/widevine_encryption_flags.cc
@@ -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 "