3.2.4.2 Notification that a New ASF File Header Is Available

As a prerequisite for this event, the higher layer MUST already have notified the server that it has sent the last RTP packet for the previous playlist entry, as specified in section 3.2.4.1.

If the value of the Play-Expected-Before-Announce variable is 1, then the server MUST store the ASF File Header in the variable Pending-ASF-File-Header and MUST not process any further rules in this section.

The server MUST store the ASF File Header in the variable New-ASF-File-Header.

If the Specified-Lag-Time does not equal 0, then the server SHOULD set the expiration time of the Lag-Timer value of the Specified-Lag-Time and SHOULD restart the Lag-Timer. The server MUST delay sending the Announce request until the Lag-Timer expires. If the server did not restart the Lag-Timer, then server MUST NOT delay sending the Announce request.

The server MUST now send an Announce (section 2.2.7.1) request to the client.

The SDP in the message body of the Announce request MUST include the ASF file header of the new playlist entry retrieved from the variable New-ASF-File-Header. For more information about how the ASF file header is included in SDP, see section 2.2.5.2.3.1. For more information about SDP, see section 2.2.5.

The SDP in the message body of the Announce response MUST specify a data URL with the MIME type "application/vnd.ms.wms-hdr.asfv1" in the SDP session level as specified in section 2.2.5.2.3.1. The SDP in the message body of the Announce response SHOULD specify a data URL with the MIME type "application/x-wms-contentdesc" in the SDP session level as specified in section 2.2.5.2.3.1. The SDP in the message body of the Announce response SHOULD include the content description list of the current playlist entry as specified in section 2.2.5.2.3.2.

The SDP in the message body of the Announce request SHOULD specify the Reliable attribute and the maxps attribute. For more information on how the reliable attribute is included in SDP, see section 2.2.5.2.4. For more information about how the maxps attribute is included in SDP, see section 2.2.5.2.2. The SDP MUST include the stream attribute for each media description. For more information about how the stream attribute is included in SDP, see section 2.2.5.2.5.

For each media description that corresponds to a stream in the ASF content, the server SHOULD request the "AS" bandwidth modifier from the higher layer (as specified in 3.2.7.9) and the server MUST include the "AS" bandwidth modifier in SDP as specified in section 2.2.5.1.1.

For each stream in the ASF content that has an average bit rate that is different from the peak bit rate the server MUST include the "X-AV" bandwidth modifier in SDP as specified in section 2.2.5.1.4.

If the value of the Playlist-gen-id does not equal 0, the server MUST change the value of the Previous-playlist-entry-id variable to the current Playlist-gen-id.

The server MUST change the value of the Playlist-gen-id variable in the abstract data model such that each playlist entry gets a different identifier. This variable MUST be used as the value for the X-Playlist-Gen-Id header in the Announce request. For details, see section 2.2.7.1.

The server SHOULD use the local event defined in Broadcast ID (section 3.2.7.8) to obtain a numerical identifier. If the numerical identifier is provided, the server MUST include the X-Broadcast-Id header (section 2.2.6.16) in the Announce response, and the numerical value on that header MUST be equal to the numerical identifier provided by the higher layer. If the numerical identifier is unavailable, then the X-Broadcast-Id header MUST NOT be included in the Announce response.

If the ASF file header of the new playlist entry retrieved from the variable New-ASF-File-Header describes the previous entry in the playlist (as opposed to the next entry), the X-Receding-PlaylistChange (section 2.2.6.26) MUST be included in the Announce request. If the ASF file header of the new playlist entry retrieved from the variable New-ASF-File-Header describes the next entry in the playlist (the normal case during streaming in the forward direction), then the X-Receding-PlaylistChange MUST NOT be included.

The server MAY specify the Supported (section 2.2.6.10) header in the request. If the Supported header is specified, the header MUST correctly reflect the features that are supported by the server. For information about what feature tokens to list on the Supported header, see section 3.2.5.2.

The Announce request SHOULD specify the Cache-Control header (section 2.2.6.2).

If the value of the Client-features variable specifies that the client supports the com.microsoft.wm.predstrm (section 2.2.6.10.5) feature, the server has also specified that it supports this feature, and the server has received a Play request for the previous playlist entry, the server MUST select suitable streams from the ASF file header of the new playlist entry. The server SHOULD use the Specified-Bandwidth to choose what streams to select from the ASF file header.

If the value of the Pending-ASF-File-Header variable is NULL, the server SHOULD do the following:

  • The server SHOULD provide the value of the Selected-Streams variable to the higher layer and allow the higher layer to modify the Selected-Streams variable.

  • The server SHOULD provide the value of the Selected-New-Streams variable to the higher layer and allow the higher layer to modify the Selected-New-Streams variable.

  • The server SHOULD provide the value of the Selected-Replacement-Streams variable to the higher layer and allow the higher layer to modify the Selected-Replacement-Streams variable.

If the value of the Pending-ASF-File-Header variable is not NULL, the server SHOULD set the Selected-Streams variable, the Selected-New-Streams variable and the Selected-Replacement-Streams variable to empty.

The server SHOULD provide the value of the Selected-Streams variable to the higher layer and allow the higher layer to modify the Selected-Streams variable.

The server SHOULD provide the value of the Selected-New-Streams variable to the higher layer and allow the higher layer to modify the Selected-New-Streams variable.

The server SHOULD provide the value of the Selected-Replacement-Streams variable to the higher layer and allow the higher layer to modify the Selected-Replacement-Streams variable.

If the Selected-Streams variable is not empty, the Announce request MUST include the X-RTP-Info header, and that header MUST include an optq-stream-url syntax element for each stream listed in the Selected-Streams variable. For each stream listed in the Selected-Streams variable, the value of the corresponding optq-stream-url syntax element MUST be the stream URL of that stream (section 2.2.6.27).

The higher layer SHOULD provide a value for the thinlevel parameter for each stream URL on the X-RTP-Info header. For each stream URL included on the X-RTP-Info header for a stream that uses the RTP payload format for FEC (section 2.2.2), the higher layer SHOULD specify each of the values on the fec-parameter token on the X-RTP-Info header. For all streams in which the higher layer specifies the fec-parameter token, the fec-parameter token MUST be saved in the FEC-Parameter-State variable. If the FEC-Parameter-State variable already contains a fec-parameter token for a given stream, the new token replaces the old token.

If the server selected any streams, the State variable MUST be set to PLAYING.

Otherwise, the State variable MUST be set to READY, and if the Idle-Timeout timer is not running, it MUST be started.

If the State variable is set to PLAYING, the server MUST start streaming RTP packets to the client. RTP packets for the new playlist entry MUST be sent to the same UDP port or TCP channel that was previously specified by the client. For information on rules to follow when sending RTP packets, see section 3.2.5.8.

If the State variable is set to PLAYING, and if the value of the Use-UDP variable is 1, then the Idle-Timeout timer MUST be started. If the value of the Use-UDP variable is 0, then the Idle-Timeout timer MUST be stopped if it is running.

The value of the Play-Expected-Before-Announce variable MUST be set to 1.

The value of the Pending-ASF-File-Header variable MUST be set to NULL.

If the value of the TransactionsPerHeartBeat variable in the Abstract Data Model is greater than 4, then the value of the TransactionsPerHeartBeat variable SHOULD be decreased by 4.

If the value of the TransactionsPerHeartBeat variable is less than or equal to 4, then the value of the TransactionsPerHeartBeat variable SHOULD be set to 0.

The value of the Announce-Sent variable MUST be set to 1.

After sending the Announce request, the server MUST wait for the response or any of the requests specified in section 3.2.5.14 to be received. How to process the response is specified in section 3.2.5.14. While waiting for the response, the server MUST also be prepared to receive RTCP packets. How to handle RTCP packets is specified in section 3.2.5.10.