Getting started with VOD

This tutorial is meant to quickly get you up and running with streaming VOD. It touches on the basic knowledge needed to stream video files using the Unified Streaming Platform (USP). This tutorial presupposes a running installation of the USP evaluation and covers streaming MP4, ingesting HLS and ingesting from the cloud. If you haven't installed the USP evaluation yet, Docker Express explains how to do that in the quickest possible way. For more in depth documentation about using USP to stream VOD and the many options that are available, please have a look at Unified Origin - VOD.

VOD Basics

With a fresh USP install, everything is in place for you to start streaming video in multiple formats using just one command. To ensure your setup is running properly, check Verify Your Setup.

In the case of VOD, it is possible to ingest HLS, CMAF or MP4, and stream to the wide variety of formats supported by USP. To do this, all that needs to be done is to use Unified Packager to create a manifest file. This file contains all the information about the content and its options, and for VOD presentations, it will have an .ism extension.

Using the manifest, Unified Origin will know where to find the video files (as well as separate subtitles and audio) and be able to create the different play out formats with your options on the fly.

License Key Wrapper

For the sake of convenience, it is advisable to create a license key wrapper before you start this tutorial. This wrapper will make sure that you don't need to pass on the license key to mp4split (Unified Packager) every time you run it.

Creating a wrapper is quickly done and explained in the documentation for our license key Unified Packager. If you choose not to create a wrapper, don't forget to pass the full path to the license key every time you run 'mp4split'. Using the command from the first step of this tutorial as an example, you pass on the license key like this:

mp4split --license-key=/path/to/usp-license.key -o tos-mp4.ism \
  tears-of-steel-aac-128k.isma \
  tears-of-steel-avc1-400k.ismv \
  tears-of-steel-avc1-750k.ismv

Stream an MP4

The preferred input format for streaming VOD is fragmented MP4. Assuming you're in the Tears of Steel directory of the USP evaluation installation, the command below will create a manifest in that directory, referencing two fragmented MP4 video files (with different bitrates) and one separate audio file.

We'll use the two more general options to further configure our HLS output:

  • --hls.client_manifest_version=4 to make sure our HLS output supports basic features like multiple audio tracks
  • --hls.minimum_fragment_length=8 to explicitly define the length of our HLS segments, instead of relying on the default (the choice is '8' here, because it needs to be a multiple of the GOP length that your content is encoded with (4 seconds in the case of our Tears of Steel test content)
mp4split -o tos-mp4.ism \
  --hls.client_manifest_version=4 \
  --hls.minimum_fragment_length=8 \
  /var/www/tears-of-steel/tears-of-steel-aac-64k.mp4 \
  /var/www/tears-of-steel/tears-of-steel-aac-128k.mp4 \
  /var/www/tears-of-steel/tears-of-steel-avc1-400k.mp4 \
  /var/www/tears-of-steel/tears-of-steel-avc1-750k.mp4 \
  /var/www/tears-of-steel/tears-of-steel-avc1-1000k.mp4 \
  /var/www/tears-of-steel/tears-of-steel-avc1-1500k.mp4

If you have edited your hosts file to map the IP address of your (virtual) server to the http://evaluation.unified-streaming.com-URL (check Verify Your Setup for how to do that), you can access the manifests via the following URLs:

Format Player and Stream URL
MPEG-DASH http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-mp4.ism/.mpd
HLS http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-mp4.ism/.m3u8

Note

To watch the streams you need the right player. A HLS stream can be played by Safari on Apple devices natively. In different contexts you can use a player like hls.js. For DASH, playback is possible through a player like DASH.js or any of the other players that support DASH.

The URLs are outlined in more depth in the Player URLs section.

Ingest HLS

In addition to (fragmented) MP4, USP also allows you to ingest HLS for VOD streaming The following command creates a server manifest from our demo sites HLS output:

mp4split -o tos-hls.ism \
  http://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/tears-of-steel-audio_eng=128002.m3u8 \
  http://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel.ism/tears-of-steel-video_eng=2200000.m3u8

The URL to the video stream is exactly the same as if created from MP4:

Format Player and Stream URL
MPEG-DASH http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-hls.ism/.mpd
HLS http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-hls.ism/.m3u8

Note

When ingesting your own HLS formatted content to stream as VOD please note there are some limitations and workarounds of which you should be aware. See Using HTTP Live Streaming (HLS) as source for more information.

Ingest from the cloud

As shown above source files need not be stored locally. Cloud storage, especially when working with large content libraries, is one such scenario. The following command creates a local server manifest for material hosted on USP's Amazon S3 storage:

mp4split -o tos-cloud.ism \
  http://usp-s3-storage.s3.amazonaws.com/tears-of-steel/tears-of-steel-2.mp4 \
  http://usp-s3-storage.s3.amazonaws.com/tears-of-steel/tears-of-steel-3.mp4 \
  http://usp-s3-storage.s3.amazonaws.com/tears-of-steel/tears-of-steel-4.mp4 \
  http://usp-s3-storage.s3.amazonaws.com/tears-of-steel/tears-of-steel-64k.mp4

Note

There are many options available when working with remote storage. Including storing your manifest files remotely. See Object Storage Use Cases and Using the cloud and object storage for more information.

Once again the video stream can be accessed and played in the different playout formats by using URLs appended as per earlier examples:

Format Player and Stream URL
MPEG-DASH http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-cloud.ism/.mpd
HLS http://evaluation.unified-streaming.com/?http://evaluation.unified-streaming.com/tears-of-steel/tos-cloud.ism/.m3u8