The server manifest is a small SMIL 2.0 document in the namespace
http://www.w3.org/2001/SMIL20/Language. Microsoft documented the on-demand
form for IIS Media Services, in pages now archived, and specifies the live form in
MS-SSTR, where an encoder sends it to the server. An on-demand presentation is an
.ism file beside its .ismv and .isma media and its
.ismc client manifest; a live one is an
.isml publishing point.
Elements
| Element | In | Content | Meaning |
|---|---|---|---|
smil | root | head, body | The presentation. |
head | smil | meta elements | Presentation-level metadata. |
meta | head | empty; name and content, both required | One item of metadata (below). |
body | smil | switch | Holds the tracks. |
switch | body | video, audio, textstream | The tracks a player can choose between. |
video, audio, textstream | switch | one or more param | One track of that kind. |
param | a track | empty; name, value and valuetype="data" | One track parameter (below). |
meta names
name | content |
|---|---|
title | The title of the presentation. |
clientManifestRelativePath | The client manifest’s path relative to the server manifest, such as film.ismc. On-demand only; a live manifest leaves it out. Microsoft’s archived reference spells it clientManfiestPath, but files and Microsoft’s own published examples use clientManifestRelativePath. |
Track attributes
| Attribute | Meaning |
|---|---|
src | The media file holding the track, such as film_3000.ismv. Required on demand. In a live manifest it should be Streams, the same for every track. |
systemBitrate | The track’s bit rate in bits per second, required. It is the number in the QualityLevels() part of fragment addresses. |
systemLanguage | The track’s language, as an RFC 1766 tag such as en. Informative only: tracks at the same bit rate in different languages still need different track names. |
Track parameters
name | value |
|---|---|
trackID | Required. The track’s track_ID in the trak and tfhd boxes of the media file. |
trackName | The name players use in Fragments(name=…). Tracks with the same bit rate and attributes need different names. Default video, audio or textstream. |
timescale | Units per second of the track’s times. Default 10000000 (100 nanoseconds). |
manifestOutput | Whether the track’s sample data is gathered into the client manifest, so it reaches players at once: TRUE/FALSE in MS-SSTR, 1/0 in the archived IIS pages. Default false. |
parentTrackName | Makes this a sparse track attached to the named track, which must be neither sparse nor a control track. |
Subtype | Information a player can use to identify characteristics of the track (MS-SSTR, live). |
hardwareProfile | The decoding capability a stream needs, when several streams share a bit rate: (width × height ÷ (4096 × 2048) × 100) × 1000 plus a codec complexity from 1 to 999, each division rounded down; at most 100000. Archived IIS pages only. |
namespace_attribute | A custom attribute that tells apart tracks with the same name and bit rate, as CustomAttributes do in the client manifest. A namespace of your own avoids clashes with future names. |
Worked example
<?xml version="1.0" encoding="utf-8"?>
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<head>
<meta name="clientManifestRelativePath" content="film.ismc"/>
</head>
<body>
<switch>
<video src="film_3000.ismv" systemBitrate="3000000">
<param name="trackID" value="2" valuetype="data"/>
</video>
<video src="film_1000.ismv" systemBitrate="1000000">
<param name="trackID" value="2" valuetype="data"/>
</video>
<audio src="film_3000.ismv" systemBitrate="128000" systemLanguage="en">
<param name="trackID" value="1" valuetype="data"/>
<param name="trackName" value="audio_en" valuetype="data"/>
</audio>
</switch>
</body>
</smil>
film.ism/QualityLevels(128000)/Fragments(audio_en=0) to get the first
audio fragment.