The client manifest is defined as the Manifest Response of Microsoft’s Smooth Streaming Protocol specification, MS-SSTR (revision 11.0, 2024). It is an XML 1.0 document with no DTD and no namespaces. Attributes may come in any order, and elements and attributes the specification does not name are allowed as vendor extensions. All numbers are decimal text.
SmoothStreamingMedia
The root element. Its content is an optional Protection element, then
one or more StreamIndex elements.
| Attribute | Type | Meaning |
|---|---|---|
MajorVersion | required, 2 | Major version of the format. |
MinorVersion | required, 0 or 2 | Minor version. Version 2.2 is needed for the r (repeat) attribute of fragments. |
TimeScale | 64-bit, default 10000000 | Units per second of Duration: by default, 100 nanoseconds. |
Duration | 64-bit, required | Length of the presentation, in TimeScale units. |
IsLive | TRUE or FALSE | A live presentation; otherwise on demand. |
LookaheadCount | 32-bit | Live only: the size of the server’s buffer, in fragments. Fragments carry the times of up to this many later fragments in their tfrf box. |
DVRWindowLength | 64-bit | Live only: how far back a viewer can seek, in TimeScale units; absent or 0 means without limit. |
Protection
Protection holds one or more ProtectionHeader elements, one
per content protection system.
| Part | Meaning |
|---|---|
SystemID attribute | The protection system’s UUID, such as 9A04F079-9840-4286-AB92-E65BE0885F95 for PlayReady. The specification’s grammar writes it in braces. |
| Content | Opaque data for that system, in Base64, such as a PlayReady header. |
StreamIndex
One stream: the video, an audio track, or a text track. It holds one or more
QualityLevel elements, then the c fragment elements described
on Fragments and requests.
| Attribute | Type | Meaning |
|---|---|---|
Type | required: video, audio, text | The kind of stream. |
Subtype | four letters; required for text | The use of a text stream (below). |
TimeScale | 64-bit | Units per second for this stream’s fragment times. |
Name | letter, then letters, digits, _ and - | The stream’s name, used in fragment addresses. |
Chunks | 32-bit | The number of fragments. |
QualityLevels | 32-bit | The number of tracks (bit rates). |
Url | URL pattern | How to build fragment addresses, such as QualityLevels({bitrate})/Fragments(video={start time}). |
MaxWidth, MaxHeight | 32-bit; video only | Largest picture size in the stream. |
DisplayWidth, DisplayHeight | 32-bit; video only | Suggested display size. |
ParentStreamIndex | a stream name | Makes this a sparse stream, timed by the named stream. |
ManifestOutput | TRUE or FALSE | The stream’s sample data is written in the manifest itself. |
Chunks, QualityLevels and Url are required
except for an embedded track.
| Subtype | Text stream holds |
|---|---|
SCMD | Triggers for actions by the player application |
CHAP | Chapter markers |
SUBT | Subtitles for foreign-language audio |
CAPT | Closed captions |
DESC | Media descriptions |
CTRL | Events that control the application |
DATA | Other application data |
QualityLevel
One track of the stream, at one bit rate. Its only possible child is a
CustomAttributes element.
| Attribute | Required for | Meaning |
|---|---|---|
Index | all | Unique number of the track in the stream, normally from 0. |
Bitrate | all | Average bit rate in bits per second; used as {bitrate} in addresses. |
MaxWidth, MaxHeight | video, audio | Picture size in pixels. |
CodecPrivateData | video, audio | Decoder set-up data in hexadecimal (below). |
FourCC | audio | The codec (below). |
SamplingRate, Channels, BitsPerSample | audio | As in the MP4 sample description. |
PacketSize | audio | Size of each audio packet in bytes. |
AudioTag | audio | A Windows wave format number (below). |
NALUnitLengthField | H.264 only | Bytes in each NAL unit’s length prefix; default 4. |
| FourCC | Codec | CodecPrivateData |
|---|---|---|
H264 | H.264 / AVC | 00 00 00 01, the sequence parameter set, 00 00 00 01, the picture parameter set |
WVC1 | VC-1 | A VIDEOINFOHEADER structure |
AACL | AAC Low Complexity | Should be empty |
WMAP | WMA Professional | A WAVEFORMATEX structure when AudioTag is 65534, otherwise empty |
| other | a code registered with the MP4 registration authority | Defined by its owner |
| AudioTag | Hex | Format |
|---|---|---|
| 1 | 0x0001 | PCM, 8 or 16 bits |
| 85 | 0x0055 | MP3 |
| 255 | 0x00FF | AAC |
| 353 | 0x0161 | WMA Standard (v7, v8, v9.x) |
| 354 | 0x0162 | WMA Professional (v9.x, v10): MS-SSTR lists it as 353 too, which is a slip; Windows’ wave format list gives 354 |
| 65534 | 0xFFFE | Extensible: CodecPrivateData should hold a WAVEFORMATEXTENSIBLE structure |
CustomAttributes
Holds one or more Attribute elements, each with Name and
Value. They tell apart tracks of the same stream that share a bit rate,
and are added to fragment addresses as {CustomAttributes}.
Older IIS elements
Microsoft’s archived IIS documentation also lists, for text streams, a
Content element with ScriptCommand (for SCMD),
Marker (for CHAP) and Sample children. MS-SSTR does not define them; in it, text carried in the manifest goes in
f elements of a stream with ManifestOutput. Their
attributes are not documented in what remains of those pages.
Worked example
<SmoothStreamingMedia MajorVersion="2" MinorVersion="2" Duration="600000000">
<StreamIndex Type="audio" Name="audio" Chunks="30" QualityLevels="1"
Url="QualityLevels({bitrate})/Fragments(audio={start time})">
<QualityLevel Index="0" Bitrate="128000" FourCC="AACL" AudioTag="255"
SamplingRate="48000" Channels="2" BitsPerSample="16" PacketSize="4"
CodecPrivateData="1190"/>
<c t="0" d="20000000" r="30"/>
</StreamIndex>
</SmoothStreamingMedia>
1190 is the AAC AudioSpecificConfig for Low Complexity, 48 kHz,
stereo, which encoders often supply although the specification says it may be
empty.