For a live presentation there is no file on disk to start with. Each encoder sends its part of the server manifest to the server at the start of a long-running HTTP POST, followed by the media. MS-SSTR section 2.2.7 specifies this.
The publishing point address
http://server/live/channel1.isml/Events(evening)/Streams(720p)
.isml. Events(…) is
optional; Streams(…) names this connection’s stream.| Part | Meaning |
|---|---|
http or https | Protocol |
path.isml | The publishing point |
Events(id) | Optional. Lets one address be reused for a new event without stale copies in caches. Every encoder must use the same one (default empty). |
Streams(id) | Identifies the stream, such as Streams(720p). Encoders that send the same stream ID to separate addresses act as backups; the server drops duplicate and out-of-order fragments. |
The POST body
| Part, in order | Content |
|---|---|
ftyp box | Major brand isml, minor version 1, compatible brands including piff and iso2 |
uuid box: StreamManifestBox (optional) | UUID 3C2FE51B-EFEE-40A3-AE81-5300199DC348, a version, 3 flag bytes, then a SMIL document listing every stream the server must wait for (below) |
uuid box: LiveServerManifestBox | UUID A5D40B30-E814-11DD-BA2F-0800200C9A66, a version, 3 flag bytes, then the live server manifest: a SMIL document like an .ism (see Server manifest elements) |
moov box | The track headers of the fragmented MP4 stream |
| fragments | moof and mdat pairs, as long as the broadcast lasts |
Both SMIL documents are XML 1.0 without a DTD, in the SMIL 2.0 namespace. The live
server manifest has one meta in its head, and every track’s
src is Streams.
The stream manifest
If present, the server does not start the broadcast until every stream listed has connected. Leave it out to start as soon as the first encoder connects.
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<body>
<par>
<ref src="Streams(720p)"/>
<ref src="Streams(360p)"/>
</par>
</body>
</smil>
Worked example
<smil xmlns="http://www.w3.org/2001/SMIL20/Language">
<head>
<meta name="title" content="Channel1"/>
</head>
<body>
<switch>
<video src="Streams" systemBitrate="2500000">
<param name="trackID" value="1" valuetype="data"/>
<param name="trackName" value="video" valuetype="data"/>
</video>
<audio src="Streams" systemBitrate="128000">
<param name="trackID" value="2" valuetype="data"/>
<param name="trackName" value="audio" valuetype="data"/>
</audio>
</switch>
</body>
</smil>