8. Content reach guidelines


8.1 How to use this section

When creating ASF content, it is important to do so with emphasis toward making it as widely distributable as possible. This section provides guidelines about how to author content for compatibility with the maximum number of ASF reading implementations that currently exist.


It is important to note that unlike the rest of this specification, this section does not cover what constitutes valid ASF. Implementations that read ASF content must not assume that the guidelines listed have been followed; however, implementations that write ASF content must follow them.


8.2 Compatibility issues

This section considers the following implementations of ASF readers in its discussion of content reach:

  1. Windows Media Format SDK (and all software built on top of it, including Windows Media Player 7 and later): version 7 up to and including 9 Series.

  2. Windows Media Services: versions up to and including 9 Series.

  3. Windows Media Player 6.4 (Note: Windows Media Player 6.4 is not built on top of the Windows Media Format SDK.)


8.2.1 Header extension object and custom header objects

8.2.1.1 Guideline

All header objects except for those listed in section 3 should be written inside the Header Extension Object, as described in section 3.4.


8.2.1.2 ASF objects affected

This guideline pertains to the ASF Header Object.


8.2.1.3 Readers affected

All of the Microsoft products covered in this section can play content whether or not this guideline is followed. However, unless the guideline is followed, editing the content’s metadata in products build on any versions of the Windows Media Format SDK before 9 Series will result in permanently corrupted content.


8.2.2 Handling complex stream configurations

8.2.2.1 Guideline

There are cases in which it is desirable to keep all products prior to but not including Windows Media Player 9 Series from recognizing a particular stream. For some scenarios, see sections 8.2.3 through 8.2.9.


This is done by embedding the Stream Properties Object for that stream inside the Extended Stream Properties Object for the same stream (see section 4.1). There must be no separate Stream Properties Object for that stream.


For the ramifications of “hiding” a stream this way, see section 8.2.7.


8.2.2.2 ASF objects affected

This guideline pertains to the Stream Properties Object and the Extended Stream Properties Object.


8.2.2.3 Readers affected

A stream that is declared this way in the ASF header will be ignored by all of the implementations covered in this section prior to but not including the Windows Media 9 Series technologies.


Note the caveat regarding Windows Media Services 4.1 in section 8.2.7 (“Unknown stream IDs in the payloads”).


8.2.3 Media types other than audio, video, image and script

8.2.3.1 Guideline

Media types other than audio, video, image and script can be found in ASF files. However, streams using these media types shall be hidden according to section 8.2.2.


8.2.3.2 ASF objects affected

This guideline pertains to the Extended Stream Properties Object.


8.2.3.3 Readers affected

Implementations of Windows Media technologies prior to Windows Media 9 Series do not support media types other than audio, video, and script. Following this guideline will hide the streams with the other media types from these readers.


8.2.4 Bitrate mutually exclusive video streams, different frame sizes

8.2.4.1 Guideline

When creating content with bit rate mutually-exclusive video streams in which the streams have different frame sizes, all but one of the streams in the mutual exclusion relationship shall be hidden from earlier implementations according to the manner described in section 8.2.2, and the Advanced Mutual Exclusion Object shall be used to describe the mutual exclusion.


Note, however, when all video streams have the same frame size, the Bitrate Mutual Exclusion Object shall be used, and no streams need to be hidden.


8.2.4.2 ASF objects affected

This guideline pertains to the Advanced Mutual Exclusion Object and the Extended Stream Properties Object.


8.2.4.3 Readers affected

Bit rate mutual exclusion among video streams with different frame sizes is supported only by the components of Windows Media 9 Series. Following this guideline will hide the mutual exclusion relationship as well as all but one of the streams from previous versions of Windows Media technologies.


8.2.5 Bitrate mutually exclusive non-video streams

8.2.5.1 Guideline

When creating content with bit rate mutually-exclusive streams of a media type other than video (the most common such scenario would be bit rate mutually-exclusive audio), all but one of the streams in the mutual exclusion relationship shall be hidden from earlier implementations according to the manner described in section 8.2.2, and the Advanced Mutual Exclusion Object shall be used to describe the mutual exclusion.


8.2.5.2 ASF objects affected

This guideline pertains to the Advanced Mutual Exclusion Object and the Extended Stream Properties Object.


8.2.5.3 Readers affected

Bit rate mutual exclusion among streams other than video is supported only by the components of Windows Media 9 Series. Following this guideline will hide the mutual exclusion relationship as well as all but one of the streams from previous versions of Windows Media technologies.


8.2.6 Multiple independent audio or video streams

8.2.6.1 Guideline

When creating content that has multiple audio or video streams that are not in a mutual exclusion relationship, all but one stream for each media type should be hidden from earlier implementations according to the manner described in section 8.2.2.


8.2.6.2 ASF objects affected

This guideline pertains to the Extended Stream Properties Object.


8.2.6.3 Readers affected

The presence of multiple independent audio or video streams is supported only by the components of Windows Media 9 Series. Following this guideline will hide all but one stream for each media type from previous version of Windows Media technologies.


8.2.7 Unknown stream IDs in the payloads

8.2.7.1 Guideline

Stream IDs in the packet payloads of the ASF Data Object do not necessarily need to correspond to the streams declared in the ASF header. All products covered in this section support “unknown” stream IDs; however, be aware that Windows Media Services 4.1 sends these payloads over the network, so they do take up bandwidth.


8.2.7.2 ASF objects affected

This guideline pertains to the ASF packets in the Data Object.


8.2.7.3 Readers affected

As already mentioned, this guideline points out how “unknown” stream IDs in the payloads affect the performance of Windows Media Services 4.1.


8.2.8 Multi-language presentations

8.2.8.1 Guideline

When creating content with language mutual exclusion relationships, the guidelines in section 8.2.6 shall be followed to ensure that for each media type, all but one stream is hidden from earlier implementations according to the manner described in section 8.2.2. The stream that is not hidden from earlier implementations shall be in the default language for the presentation.


8.2.8.2 ASF objects affected

This guideline pertains to the Advanced Mutual Exclusion Object or the Group Mutual Exclusion Object as well as the Extended Stream Properties Object.


8.2.8.3 Readers affected

Language-based mutual exclusion is supported only by the components of Windows Media 9 Series. Following this guideline will hide all but one stream for each media type from previous versions of Windows Media technologies.


8.2.9 Group mutual exclusion

8.2.9.1 Guideline

When creating content with the Group Mutual Exclusion Object, the streams in all but one record of the object shall be hidden from earlier implementations according to the manner described in section 8.2.2.


8.2.9.2 ASF objects affected

This guideline pertains to the Group Mutual Exclusion Object and the Extended Stream Properties Object.


8.2.9.3 Readers affected

The ability to create and recognize mutually exclusive relationships between groups of streams is supported only by the components of Windows Media 9 Series. Following this guideline will hide the streams in all but one group (“record”) from previous versions of Windows Media technologies.


8.2.10 Presence of Stream Bitrate Properties Object

8.2.10.1 Guideline

When creating content, the optional Stream Bitrate Properties Object should be included as specified in section 3.12.


8.2.10.2 ASF objects affected

This guideline pertains to the Stream Bitrate Properties Object.


8.2.10.3 Readers affected

For implementations that do not recognize the Header Extension Object, this object aids in stream selection.


8.2.11 Custom top-level objects

8.2.11.1 Guideline

Custom ASF top-level objects may be added directly after the Data Object and before any of the index objects. They must not be added anywhere else. If the content will be streamed by Windows Media Services 4.1, there must be no custom ASF top-level objects anywhere.


In addition, some earlier ASF implementations on devices cannot handle top-level objects besides the Header Object, the Data Object, and the Simple Index Object at all, so content targeting these devices should use these three top-level objects only.


8.2.11.2 ASF objects affected

This guideline pertains to custom top-level ASF objects.


8.2.11.3 Readers affected

Of the implementations covered in this section, Windows Media Services 4.1 cannot open content with any custom top-level objects. All other implementations covered in this section will ignore custom top-level objects added directly after the Data Object.


As already mentioned, content containing top-level objects besides the Header Object, the Data Object, and the Simple Index Object may be rejected altogether by earlier ASF implementations on devices.


8.2.12 Index objects

8.2.12.1 Guideline

For indexing content, the Simple Index Object shall be used, alone, whenever possible. Simple Index Objects can index video streams that are declared with separate Stream Properties Objects in the ASF Header. For instance, content with one audio stream and multiple bit rate mutually-exclusive video streams (all with the same frame size) can be indexed by using one Simple Index Object for each video stream.


When any of the other types of Index Objects (including the Media Object Index Object and the Timecode Index Object) are needed for indexing the content, they shall be after the Data Object and before the Simple Index Object. The Index Object (or the group of Index Objects, when there are more than one) shall be followed by at least one Simple Index Object. These Simple Index Objects shall index all video streams that are declared by separate Stream Properties Objects in the ASF header. If there are no such streams, then there shall be a single Simple Index Object with zero entries.


8.2.12.2 ASF objects affected

This guideline affects the various ASF index objects.


8.2.12.3 Readers affected

  1. All implementations covered in this section prior to the components of Windows Media 9 Series recognize only the Simple Index Object.

  2. Any content with any index objects besides the Simple Index Object(s) cannot be opened by Windows Media Services 4.1. It is also known that certain earlier ASF implementations on devices cannot handle index objects besides the Simple Index Object(s) (for more information, see section 8.2.11).

  3. The Windows Media Format 7 SDK requires that the Index Objects be followed by at least one Simple Index Object.


8.2.13 Do not create content with variable-size packets

8.2.13.1 Guideline

Packet size shall be fixed in all content that is created.


8.2.13.2 ASF objects affected

This guideline pertains to the packets in the Data Object.


8.2.13.3 Readers affected

None of the implementations covered in this section support variable-size packets.


8.2.14 Packet size must be under 64 KB

8.2.14.1 Guideline

Packet sizes shall not exceed 64 KB.


8.2.14.2 ASF objects affected

This guideline pertains to the packets in the Data Object.


8.2.14.3 Readers affected

None of the implementations covered in this section are guaranteed to support packet sizes larger than 64 KB.


8.2.15 Padding length must be accurate

8.2.15.1 Guideline

The Padding length field in the packet parsing section of an ASF packet shall accurately reflect the amount of padding at the end of the packet. However, as noted in section 5.2.2, ASF reader implementations should be prepared to handle cases when this value is zero and to infer the correct value from the size of the payloads.


8.2.15.2 ASF objects affected

This guideline pertains to the packets in the Data Object.


8.2.15.3 Readers affected

None of the implementations covered in this section are guaranteed to be able to handle inaccurate Padding length values for on-disk ASF content, and therefore ASF writer implementations should always set the Padding length field correctly.


Windows Media Services is known to create and send packets with the Padding length equal to zero, and therefore ASF reader implementations should be able to parse such packets.


8.2.16 Ordering of payloads and media objects in packets

8.2.16.1 Guideline

Presentation times in payloads of a single media object should be the same and presentation times of media objects should only increase. The associated object ids in payloads of a single media object should be the same and object ids of media objects should be incremental without gaps unless there is a discontinuity and/or object id wrap around.


8.2.16.2 ASF Objects affected

This guideline pertains to the packets in the Data Object.


8.2.16.3 Readers affected

None of the implementations covered in this section are guaranteed to support non-consecutive ordering of payloads and media objects.