Adobe published the Flash Media Manifest as an open specification, in version 1.0 and then 2.0. Adobe’s own pages are gone; this reference follows a copy of the 2.0 specification and Adobe’s open-source OSMF player. An F4M file describes one piece of media in one or more representations.
The file
An XML document whose root is manifest, in the namespace
http://ns.adobe.com/f4m/1.0 or, for version 2.0,
http://ns.adobe.com/f4m/2.0. All the other elements are its children,
except metadata, xmpMetadata and moov, which
belong inside a media element. Only media is required.
Presentation elements
| Element | Content | Meaning |
|---|---|---|
id | text | A unique identifier for the media. |
label | text | A name to show to users. |
lang | language code | The base language of the media. |
duration | seconds | Length. For live or DVR content, the total expected time, usually 0 for live. |
startTime | RFC 3339 date-time | When the media first becomes available. |
mimeType | media type | The type of the media files, such as video/mp4. |
streamType | live, recorded, liveOrRecorded | Live, on demand, or live with recording. |
deliveryType | streaming, progressive | How the media is delivered. If absent, inferred from the protocol: over HTTP it is streaming, and then bootstrapInfo is required. |
baseURL | URL | Base for every relative URL in this file. Without it, relative URLs are resolved against the manifest’s own address. |
Bootstrap, DRM and DVR elements
bootstrapInfo and drmAdditionalHeader hold their data
either inline, in Base64, or at a url, never both. Without an
id, one applies to every media element that does not name
one.
| Element | Attributes | Meaning |
|---|---|---|
bootstrapInfo | profile (required; named for the named-access profile), id, url | The bootstrap box that maps times to segments and fragments; see Bootstrap information. |
drmAdditionalHeader | id, url | The DRM header that Flash Access needs to decrypt the media. |
dvrInfo | url; windowDuration (2.0, seconds viewable behind the live point, default −1 for all); offline (default false); deprecated in 2.0: id, beginOffset, endOffset (default 0) | Recording (DVR) settings for live streams; no content. With a url, players re-fetch it periodically; the file there has a dvrInfo root without a url. |
media
One representation, such as one bit rate. At least one is required.
| Attribute | Meaning |
|---|---|
url | The media, or with bootstrap information the base address of its fragments. Exactly one of url and href should be given. |
href | F4M 2.0: another F4M file that describes this representation (below). |
bitrate | Kilobits per second; required when there is more than one media. |
width, height | Picture size in pixels. |
streamId | An identifier for the media file. |
bootstrapInfoId | The id of its bootstrapInfo. |
drmAdditionalHeaderId | The id of its drmAdditionalHeader. |
dvrInfoId | The id of its dvrInfo (deprecated in 2.0). |
groupspec, multicastStreamName | For RTMFP multicast, together: the group specifier and the stream name. |
alternate | true for an alternative track, such as audio in another language. |
type | The kind of track: audio+video (default), video, audio, data, text. |
label, lang | Name and language (ISO 639-1 or 639-3) of the track; required with alternate. |
| Child | Content |
|---|---|
metadata | Base64 of the AMF-encoded onMetaData object, as in an FLV script tag: duration, sizes, codecs and so on. |
xmpMetadata | Base64 XMP metadata. Deprecated in 2.0. |
moov | Base64 of an MP4 movie box for the representation. Deprecated in 2.0. |
Multi-level manifests (2.0)
A set-level manifest lists representations whose media elements point,
with href, to stream-level manifests; it uses their bitrate,
streamId, width, height, type,
alternate, label and lang, and holds the
dvrInfo. Each stream-level manifest has one media with a
url, and its own bootstrapInfo and
drmAdditionalHeader. baseURL and IDs apply only within the
file they are in, so the same ID can be used in different files.
Worked example
<manifest xmlns="http://ns.adobe.com/f4m/1.0">
<id>film</id>
<streamType>recorded</streamType>
<duration>596.5</duration>
<deliveryType>streaming</deliveryType>
<bootstrapInfo profile="named" id="b1" url="film.bootstrap"/>
<media url="film_1000_" bitrate="1000" width="640" height="360" bootstrapInfoId="b1">
<metadata>AgAKb25NZXRhRGF0YQgAAAAA…</metadata>
</media>
<media url="film_3000_" bitrate="3000" width="1280" height="720" bootstrapInfoId="b1">
<metadata>AgAKb25NZXRhRGF0YQgAAAAA…</metadata>
</media>
</manifest>
onMetaData (02 00 0A, then the 10
characters), as an FLV script tag does.