License Key

Obtaining a License Key

You can get an evaluation key by clicking the following button:

This will take you to the trial page where you can select one of the available trials for for instance for static/dynamic packaging, live streaming, virtual channels and more.

You will be asked for your name and email address (first time access), after that you can choose a trial guide or copy the license key and continue with the Docker Express Your own Video on Demand demo or the general How to Install instructions.

Using the License Key

By default the commandline executables will look for an environment variable called UspLicenseKey and use this as input for the license key. This applies to the following executables:

  • mp4split

  • unified_capture

  • unified_remix

The environment variable is set as follows:

export UspLicenseKey="YmFzZTY0IGVuY29kZWQgbGljZW5zZSBrZXkgc3RyaW5nCg=="

If this variable is not present then you are required to pass the key on the command line with the --license-key option:

mp4split --license-key=/path/to/usp-license.key \
  -o oceans.ism \

or for instance with unified_capture:

unified_capture --license-key=/path/to/usp-license.key \
  -o oceans.ismv \

License key wrapper

For convenience we recommend exporting the license key string as an environment variable called UspLicenseKey which mp4split will use as default when --license-key is not used.

Its recommended to set this variable and any subsequent alias' in your .bashrc.

As an alias:

export UspLicenseKey="YmFzZTY0IGVuY29kZWQgbGljZW5zZSBrZXkgc3RyaW5nCg=="

alias mp4split="/path/to/mp4split $@"

Or a function:

export UspLicenseKey="YmFzZTY0IGVuY29kZWQgbGljZW5zZSBrZXkgc3RyaW5nCg=="

function mp4split() {
  command mp4split $@

Once the UspLicenseKey environment variable has been exported, it's possible to use to run one of our public container images (using Docker).

# Using our publically available container image
# run latest public mp4split release
mp4split() {
  case $1 in
    1.[0-9]*.[0-9]* ) IMAGE=${BASE_IMAGE}:$1; shift ;;
    * ) IMAGE=${BASE_IMAGE}:latest; docker pull $IMAGE ;;
  docker run -it -e UspLicenseKey -v ${PWD}:/data --workdir /data $IMAGE "$@"

It's also possible to set an environment variable as the path to your key which can then be passed to the command line using the --license-key option.

As an alias:

# Alternative option

function mp4split() {
  command mp4split --license-key=${USP_LICENSE_KEY} $@

Or a function:

# Alternative option

alias mp4split="/path/to/mp4split --license-key=${USP_LICENSE_KEY} $@"

Apache License Key

For Apache, the UspLicenseKey server directive must be used which may be placed in the vhost conf file before the actual virtual host:

UspLicenseKey /path/to/usp-license.key

<VirtualHost *:80>

  # Rest of config



A single license allows for ten (10) live channels per origin, there is no limit on the number of bitrates in the license key.

Installation Check

After (re)starting Apache you should see the following in the Apache error.log (/var/log/apache2/error.log on Ubuntu):

License key found: /path/to/usp-license.key
Apache/2.4.7 (Ubuntu) IISMS/4.0 configured -- resuming normal operations

To check your license using mp4split, use the --license-key option together with the --show-license option described in the section below.

Features and Expiry

To show which features are supported for a certain license key or to check when the license will expire, use the --license-key option together with the --show-license option, and no other command line arguments:


mp4split --license-key=/path/to/usp-license.key --show-license

If the license is valid, and not expired, this will print feature information in a format similar to:

mp4split version=1.10.11 (18541)    Copyright 2007-2019 CodeShop B.V.

Product name: Unified Streaming Platform
License type: production
License email:
Starting at: 2021-01-30 00:00:00 UTC
Expiring at: 2022-02-01 00:00:00 UTC
Supported features:
  Packaging: DASH, HDS, HLS, ISS, MP4, CMAF
  Capturing: DASH, HDS, HLS, ISS, Decryption
  Verifying: Media, URLs, Sitemap
  Streaming: VOD, Live, MPEG-TS
  Remixing: VOD
  Encoding: AAC, AVC, HEVC
  Decoding: AAC, AVC, HEVC
  Metadata: Timed Metadata
  DRM: AES, DXDRM, FAXS, Marlin, PlayReady, Sample_AES, Verimatrix_HLS, Irdeto_SKE, Conax_PR_HLS, Widevine, PlayReady_Envelope, PHDS


Next to the the email address used for the license email (see example above) receiving license expiry warnings 90, 60 and 30 days in advance, it is a good idea to also monitor the license key where it is used.

Options to do so are for instance the following:

  • run mp4split --show-license and post result to internal monitoring

  • restart apache periodically and check license printed in the error.log

  • parse license key upon arrival and track time to flag internally when expiry is near

  • have the webserver load the license key from another location, where expiry is checked periodically


A benefit of the last is that all servers load from the same location, so license key renewal is 'replace and reload' in a specific maintenance windwow.

The first solution could look like the following:

  • the cronjob:

@daily /root/key-check-daily 2>&1 | /usr/bin/logger -t key-check-daily
  • the key-check-daily script:


/usr/bin/mp4split --license-key /etc/usp-license.key --show-license > /tmp/key-options
/usr/bin/curl curl -X POST -d @/tmp/key-options http://monitoring-server/key-check

The 'monitoring-server' mentioned above in turn can parse out the 'Starting at: ' and 'Expiring at: ' UTC timestamps present in 'key-options' string sent. Standard monitoring tools like ELK could be a good fit.


New in version 1.10.33.

An alternative to placing the license key on the instance where it is used (typically as /path/to/usp-license.key) is to use a URL.

For instance with mp4split:

mp4split --license-key https://key-store/my.key --show-license

or for Apache:

UspLicenseKey "https://key-store/my.key"

The 'key-store' mentioned can be any kind of HTTPS accessible location capable of responding to the HTTPS GET request with a key.


Please make sure such a 'key-store' is only accessible to allowed license key requests.

Setting up the license key like this seperates license from instance and as such for instance allows for simultaneous update of all instances that use the same license key, or update in batches (when the same license key is used but different URL). In short, it provides greater freedom how to manage keys.


The URL must resolve to a license key. If it does not both mp4split and Apache will not work correctly and print an error (to the console or to the error log, see Error Messages below).

Error Messages

Errors related to the license key are described below.

'no policy for'

If a call to mp4split (or the webserver) results in for instance the following it means the required permission is not part of the license:

Status: 403 FMP4_403
X-USP-Error: drm: no policy for Widevine encryption

This message will be printed in the Apache error log or in the shell (stdout). Please contact

'verify license signature not valid'

The key is meant for a different version (for instance trying a 1.6 key with a 1.7 version)

'license expired'

The license expired, please contact

'base64_decode: unexpected end of file'

If you get the following error in your Apache error.log:

terminate called after throwing an instance of 'fmp4::exception'
what(): 415 FMP4_415 (base64_decode: unexpected end of file?)

please check you copied the license key correctly.

You can for instance test with


mp4split --license-key=/path/to/usp-license.key --show-license

where YOUR_LICENSE_KEY is the key you received.

'keyfile not found'

This means the license key cannot be found. Please refer to the License Key page on how to install it:

'could not connect to host'

Evaluation versions require internet access to the following:

  • Google's DNS servers (

  • (

Please make sure your firewall settings allow this.

If this is not set up the resulting error will look like the following:

apache mod_smooth_streaming (version=1.7.10) failed to initialize! (error
message: could not connect to host), please contact