Packaging for HTTP Smooth Streaming (HSS)

When packaging content for delivery by IIS instead of Unified Origin, there are some additional requirements and limitations.


  • Only the streaming protocols supported by IIS are supported (HTTP Smooth Streaming). Your content won't be available in the formats MPEG-DASH, HLS and HDS.
  • The progressive streaming files cannot reference the sample data in other files. The audio and video sample data is duplicated.


  • The source content must be converted to fragmented-MP4 using a timescale of 10MHz. You can force changing the timescale using the --timescale option.
  • An additional client manifest file (.ismc) must be generated.


These limitations and requirements do not apply for content delivered with Unified Origin.

Creating the media files (.isma and .ismv)

The first step is to package all the source content into the format that is used by IIS. This is the ISMV / PIFF format:


mp4split --timescale=10000000 -o tears-of-steel-iss.ismv \
  tears-of-steel-avc1-1000k.mp4 \
  tears-of-steel-avc1-750k.mp4 \
  tears-of-steel-avc1-400k.mp4 \

Now that we have packaged all the audio and video, the following step is to create the two progressive download files. In this case the audio and video data is duplicated.


mp4split -o tos-iss-1000k-progressive.mp4 \
  tears-of-steel-avc1-1000k.mp4 \

mp4split -o tos-iss-400k-progressive.mp4 \
  tears-of-steel-avc1-400k.mp4 \

Creating the media files with PlayReady

You can add PlayReady encryption to the .isma and .ismv media files.


In case your input is pre-encrypted, Packager and Origin will pick up on any DRM signaling present in the input and automatically pass it through in the output they generate. This means that for any DRM system for which signaling is present in the input, you do not need to specify DRM configuration options when preparing your stream. However, do note that there are DRM systems for which such signaling can't be present by design, like FairPlay, because signaling for these systems is never stored in the media. This means that to support such DRM systems, you will always need to add the necessary DRM configuration options.


The 128 bits Key ID (KID) and 128 bits Content Encryption Key (CEK) are passed with the --iss.key option where KID and CEK are separated by a colon, e.g. --iss.key=KID:CEK

The KID identifier uniquely identifies the content.

The CEK is the Content Encryption Key. Note this is NOT the PlayReady Key Seed, but the actual content encryption key.

Both KID and CEK must be coded in hex (base16).


The KID from the PlayReady License server may be formatted as a little-endian GUID. In that case you have to change the endianess as we always use a big-endian UUID representation of the KID.


The 64 bit AES Initialization Vector (IV). This is a random 64 bit value.

If it is not specified then a random value is generated.

When specified, make sure not to re-use the same IV for the same CEK. I.e. it should be different between multiple mp4split calls.


The URL used by the player to retrieve the key.


The following command creates a PlayReady protected ismv file to be used with IIS:


KID_UUID=10000000-1000-1000-1000-100000000001 #UUID representation of KID
CEK_B64="OiobaN0r2bLusl6ExHdmaA==" #Base64 byte array representation of CEK

mp4split --timescale=10000000 -o tos-iss-1000k-pr.ismv \
  --iss.key=${KID}:${CEK} \
  --iss.license_server_url="${LA_URL}" \
  tears-of-steel-avc1-1000k.mp4 \

Please download the sample script which creates the various server manifest as discussed above. The sample content is Tears of Steel.

Creating the manifest files (.ism and .ismc)

As a last step we create the server and client manifest files. The server manifest file is an XML file that contains the media information about all the tracks and is used by IIS. The client manifest file is used by the Silverlight player.


mp4split -o tears-of-steel-iss.ism \

mp4split -o tears-of-steel-iss.ismc \

For backwards compatibility with older Silverlight players you may have to change the FourCC for AVC video streams in the client manifest file to use H264 instead. Just pass 'H264' as parameter on the commandline.

Generating the client manifest file but use H264 instead of AVC1:


mp4split -o tears-of-steel-iss.ismc \

At this point we have 5 files stored for our presentation:

Files Description
tears-of-steel-iss.ismv 128k audio, 400, 750 and 1000k video
tos-iss-400k-progressive.mp4 64k audio, 400k video
tos-iss-1000k-progressive.mp4 128k audio, 1000k video
tears-of-steel-iss.ism Server manifest file
tears-of-steel-iss.ismc Client manifest file

Please download the sample script which creates the various server manifest as discussed above. The sample content is Tears of Steel.