Products       ExpressPlay       Developers       Tutorial: ExpressPlayer Tutorial (Validating with ExpressPlayer)

Developer Center

Validating with ExpressPlayer

This tutorial explains how to use the ExpressPlayer app to validate your ExpressPlay packaged content. The ExpressPlayer app is available at the iOS App Store and the Google Play app store.


  • An iOS or Android device
  • DASH or HLS content encrypted with ExpressPlay Packager
  • A text editor

Screencast: A short video that walks you through the basic steps using the iOS version of the App is available HERE. (MP4 video)

ExpressPlayer is an Android and iOS application used for validating ExpressPlay packaged content quickly. It can play any ExpressPlay-protected DASH, HLS or MP4 media using ExpressPlay test tokens. The app has two methods for accepting content for validation: the Video tab and the Playlist tab.

If you select the Video tab (iOS) or Custom Input tab (Android), you can input the content url and optionally a separate license token url. If you select the Playlist tab, you can input the url to your playlist file which contains a list of all the content you wish to validate. This tutorial will explain the steps to validate your content in each case.

Note that the Android App supports DRM-protected content playback using Marlin as well as Widevine licenses, and that Widevine licenses can be configured to be “persistent” (if the token request them to be so).

Below is a screen shot of the ExpressPlayer playlist view.



STEP 1 – Validate one media item

For iOS:

  • In the ExpressPlayer app, select the Video tab. You will see two drop menus, one to select a content format and one to select a token format. First you should select the content format matching the content you wish to validate. The choices are: DASH, HLS or MP4.
  • The second drop menu is where you select the token format you wish to use for playback. You can choose Marlin MS3 or Marlin BB. If you select Marlin BB an additional input box appears immediately under the token format selection. This is because Marlin BB does not include the token within the content URL as Marlin MS3 does, so you will need to provide a separate URL to a text file containing the Marlin BB token.

For Android:

  • In the ExpressPlayer app, select the Custom Input tab. You can then enter either a MS3 url or a media url. You must also provide a license token url if using Marlin BB or Widevine. This is because only Marlin MS3 includes the media URL within the token. For Marlin BB you will need to provide a separate URL to a text file containing the Marlin BB token, and for Widevine you provide the token URLgenerated by the ExpressPlay service.
  • If the MS3 or License Token URL is “indirect” (see definition in the remainder of this page), select that option.
  • When you press the “Process Media Item” button, you may be prompted for the media type (DASH, HLS or MP4) if this cannot be inferred from the parameters.
EXAMPLE MARLIN BB TOKEN <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ActionToken xmlns="urn:marlin:broadband:1-2:nemo:services:action-token" xmlns:xsi=""> <ConfigurationInfo broadbandServiceId="urn:marlin:organization:seacert:eval-marlin-service:500" configVersion="1"> <ResourceLocation></ResourceLocation> </ConfigurationInfo> <LicenseAcquisition> <Type>personality</Type> <BusinessToken>ABEAAwAAAzkAB2dpbGRyZWQ/GAAQhbwUuAlKt1qwAW9wfnwlPwBgPt0Wlt7OtQNM+KKjzKavyW1MFNr2HBQhkEqmw6Oky4olJAJw3lbauD/qLG18BIvAILq3JuEDKavsDQynE2xeSkNIbk3xOUV1KVglJptmxkw3ycKAit7davhjqZ2SbN25AAAAFLlCRMijOdxPFgCsA/DMHo4CvQ0T</BusinessToken> </LicenseAcquisition> </ActionToken>
EXAMPLE PLAYREADY TOKEN (not valid for the ExpressPlayer App) {"licenseAcquisitionUrl":"","token":"AQAAAAOzW5MAAABgHhvu7w8J6Yv1OXLOX_afCzO795jxa7Wyse751oV7yizHHWHmBge7fcuthEZCnQSNLamcN4aAzLKkH6hMe9yuFrDv-m9z7iJfrbxjDgXHUnN1aGqZGxJ6bgYwS7t9law1nAPdX-vor6QYfAOeNgU_IcLuJR8"}

In the input box just below the content format selection, enter the URL of the protected content. If the selected token format is Marlin MS3, you simply use the MS3 token as your content URL. If you do not have packaged content to play, you can retrieve an MS3 Token URL for our example encrypted HLS video from this web page. If the selected token format is Marlin BB, then you should enter the URL to the protected MP4 file, or in the case of DASH and HLS, enter the URL to the manifest file.

STEP 2 – Validate multiple media items

You can create a playlist for easy validation of multiple media items. To do this you need to create a playlist file that ExpressPlayer can read and display the itemized media where you can simply tap on each media item to check playback. The playlist file is a JSON file containing an array of media items.

A formal and unambiguous description of the JSON schema used for the playlist list file format can be viewed here. This schema is itself written in JSON, based on the JSON Schema Internet Draft specification found at: A specific playlist file can be checked against this schema for format correctness.

The playlist file can contain as many media items as desired, although each item listed must contain several different types of information. Each media item requires at least a title, container and content URL. This information is grouped into blocks, one block per media item in the playlist. See the example block below for a DASH formatted media item using a Marlin MS3 token.

[ { "title": "Big Buck Bunny (DASH MS3)", “drm”:”MARLIN”, "container": "DASH", "url": "" } ]

The example above contains a title which will display in the ExpressPlayer playlist once the playlist file is loaded.

The “drm” container (Android only) can be WIDEVINE, MARLIN, NONE depending on the media. The default if omitted is MARLIN

The next attribute is the container which is required. The allowed container values are:

  • DASH (DASH format using Marlin MS3 token)
  • HLS (HLS format using Marlin MS3 token)
  • (iOS only) BBTS (MPEG-TS format using Marlin BB token)
  • PDCF (MP4 format using Marlin BB token)
  • (iOS only) DCF (MP4 format using Marlin BB token)
  • M4F (Fragmented MP4 file with common encryption, using Marlin BB token)

The url attribute points to the content url. If DASH MS3 or HLS MS3, then the url is simply the MS3 tokenized content URL which gives you the location of the content and info on how to get the token. If the media type is PDCF, then there should also be a separate token attribute pointing to a url where the token can be found.

Downloadable content such as MP4 (PDCF) requires a Marlin BB token. In such case both the token URL and content URL must be included in the block. As usual, the content URL is placed on the last line of the block. See the example block below for an ExpressPlay-protected PDCF media item using a Marlin BB token.

[ { "title": "Big Buck Bunny Mobile (MP4)", "container": "PDCF", "url": "", "token": "" } ]

As before, the last line is where you put the content URL. In this case the content URL points to the protected MP4.

Note: When a Marlin MS3 token is used, the token attribute will be ignored by ExpressPlayer.

Indirect content URLs: When using MS3 tokens, if you want ExpressPlayer to use the response from the content URL as the actual content URL, use the indirect attribute. In such case the content URL is not an MS3 tokenized URL, but instead it is a URL which returns an MS3 tokenized URL. ExpressPlayer will understand this, and fetch the content URL, then use the response as the actual content URL to fetch the content and process the MS3 token. This is very useful as the MS3 tokenized url has an expiration, so you likely don’t want to hard code that into the playlist. If you are dynamically generating the JSON playlist, then this may not be as useful. See the example below.

[ { "title": "Big Buck Bunny (HLS MS3)", "container": "HLS", "indirect": true, "url": "" } ]

STEP 3 – Put the playlist on the web

You will need to put your playlist file on a web server which is accessible to the ExpressPlayer app. Make sure your playlist is formatted correctly.

See below for an example of a complete playlist file.

[ { "title": "Big Buck Bunny (HLS MS3)", "container": "HLS", "indirect": true, "url": "" }, { "title": "Big Buck Bunny (DASH MS3)", "container": "DASH", "indirect": true, "url": "" }, { "title": "Big Buck Bunny Mobile (MP4)", "container": "PDCF", "url": "", "token": "" }, { "title": "Big Buck Bunny 480p (MP4)", "container": "PDCF", "url": "", "token": "" }, { "title": "Big Buck Bunny 720p (MP4)", "container": "PDCF", "url": "", "token": "" } ]

This is the default playlist file loaded by the ExpressPlayer app. To load your custom playlist file, open the ExpressPlayer app, make sure Playlist view is selected, input the URL to your playlist in the input box and tap the Go button. If you have any MP4 (PDCF) files in your playlist, ExpressPlayer will attempt to preload the tokens for those items.