2.2.2.7 PlayNextEntry (Request and Response)

The purpose of the PlayNextEntry request is to request that the server start streaming the current entry in the server-side playlist. If the server has already started to stream the next current entry, the PlayNextEntry request serves as a confirmation to the server that the client is now receiving the current entry. Also, the PlayNextEntry request allows the client to change the streams that are selected by using the stream-switch-entry (section 2.2.1.4.27) token on the Pragma (section 2.2.1.4) header.

The PlayNextEntry request is only supported when using the pipelined mode of the protocol.<52>

The PlayNextEntry request is defined as an HTTP GET request that satisfies the ABNF syntax for WMS-PlayNextEntry-Request [RFC4234] and satisfies all of the following conditions:

If the request succeeds, the syntax of the response MUST be in accordance to the ABNF syntax for WMS-PlayNext-Response.

The PlayNextEntry response uses the HTTP 1.1 protocol, as specified in [RFC2616], and Chunked Transfer Coding, as specified in [RFC2616] section 3.6.1.

The syntax of the PlayNextEntry request is defined as follows.

 WMS-PlayNext-Request    = WMS-Play-Req-Line
                           WMS-PlayReq-Headers CRLF 
   
 WMS-Play-Req-Line       = "GET" SP Request-URI SP "HTTP/1.1" CRLF
  
 WMS-PlayReq-Headers     = *( PlayReq-Header-REQ
                           / PlayReq-Header-OPT
                           / PlayReq-Pragma
                           / HTTP-Header-Types )
  
 PlayReq-Header-REQ      = User-Agent               ; section 2.2.1.8
  
 PlayReq-Header-OPT      = Cookie                ; section 2.2.1.3
                           / Supported              ; section 2.2.1.7
                           / X-Accept-Authentication; section 2.2.1.9
                           / X-Proxy-Client-Verb    ; section 2.2.1.11
  
 PlayReq-Pragma          = "Pragma: " #PlayReq-Pragma-Types CRLF
  
 PlayReq-Pragma-Types    = PlayReq-Token-REQ
                           / PlayReq-Token-OPT
                           / PlayReq-Token-OPT11
  
 PlayReq-Token-REQ       = client-id              ; section 2.2.1.4.5
                           / xPlayNextEntry       ; section 2.2.1.4.35
  
 PlayReq-Token-OPT       = AccelBW                ; section 2.2.1.4.1
                           / AccelDuration        ; section 2.2.1.4.2
                           / BurstBW              ; section 2.2.1.4.3
                           / BurstDuration        ; section 2.2.1.4.4
                           / client-lag           ; section 2.2.1.4.6
                           / LinkBW               ; section 2.2.1.4.9
                           / max-duration         ; section 2.2.1.4.11
                           / no-cache             ; section 2.2.1.4.12
                           / packet-num           ; section 2.2.1.4.13
                           / packet-pair-experiment; section 2.2.1.4.14
                           / playlist-gen-id      ; section 2.2.1.4.18
                           / playlist-seek-id     ; section 2.2.1.4.19
                           / pl-offset            ; section 2.2.1.4.20
                           / proxy-client-agent   ; section 2.2.1.4.21
                           / rate                 ; section 2.2.1.4.22
                           / request-context      ; section 2.2.1.4.23
                           / speed                ; section 2.2.1.4.24
                           / stream-offset        ; section 2.2.1.4.25
                           / stream-switch-count  ; section 2.2.1.4.26
                           / stream-switch-entry  ; section 2.2.1.4.27
                           / stream-time          ; section 2.2.1.4.28
                           / xClientGuid          ; section 2.2.1.4.33
  
 PlayReq-Token-OPT11     = version11-enabled      ; section 2.2.1.4.30
  

The syntax of the PlayNextEntry response is defined as follows.

 WMS-PlayNext-Response  = Status-Line
                           WMS-PlayResp-Headers
                           CRLF
                           WMS-PlayResp-Body
  
 WMS-PlayResp-Headers    = *( PlayResp-Header-REQ
                           / PlayResp-Header-OPT
                           / PlayResp-Pragma
                           / HTTP-Header-Types )
  
 PlayResp-Header-REQ     = Cache-Control           ; section 2.2.1.1
                           / Server                ; section 2.2.1.5
  
 PlayResp-Header-OPT     = Set-Cookie              ; section 2.2.1.6
                           / Supported             ; section 2.2.1.7
                           / X-StartupProfile      ; section 2.2.1.12
  
 PlayResp-Pragma         = "Pragma: " #PlayResp-Pragma-Types CRLF
  
 PlayResp-Pragma-Types   = PlayResp-Token-REQ
                           / PlayResp-Token-OPT
  
 PlayResp-Token-REQ      = client-id              ; section 2.2.1.4.5
                           / features             ; section 2.2.1.4.8
                           / no-cache             ; section 2.2.1.4.12
  
 PlayResp-Token-OPT      = AccelBW                ; section 2.2.1.4.1
                           / AccelDuration        ; section 2.2.1.4.2
                           / BurstBW              ; section 2.2.1.4.3
                           / BurstDuration        ; section 2.2.1.4.4
                           / expect-new-header    ; section 2.2.1.4.7
                           / packet-pair-experiment; section 2.2.1.4.14
                           / speed                ; section 2.2.1.4.24
                           / timeout              ; section 2.2.1.4.29
                           / xResetStrm           ; section 2.2.1.4.37
  
 Header-Packets = [ <$M Metadata packet type> ]   ; section 2.2.3.6
                  <$H Header packet type>         ; section 2.2.3.5
  
 Stream-Change  = <$C Change packet type>         ; section 2.2.3.2
                  Header-Packets
  
 Playlist-Entry = *( <$D Data packet type> )      ; section 2.2.3.3
                  <$E EOS packet type>            ; section 2.2.3.4
  
 WMS-PlayResp-Body = ( Header-Packets Playlist-Entry
                     *( Stream-Change Playlist-Entry ) )
                     / ( Playlist-Entry
                     *( Stream-Change Playlist-Entry ) )
                     / *( Stream-Change Playlist-Entry )
  

The following example shows a PlayNextEntry request.

 GET /playlist HTTP/1.1
 Accept: */*
 User-Agent: NSPlayer/12.0.7724.0
 Host: SampleServer
 X-Accept-Authentication: Negotiate, NTLM, Digest, Basic
 Pragma: version11-enabled=1
 Pragma: client-id=1427647663
 Pragma: xPlayNextEntry=1
 Pragma: playlist-seek-id=66
 Pragma: no-cache,rate=1.000,stream-time=0,stream-offset=0:0,packet-num=4294967295,max-duration=0
 Pragma: client-lag=0
 Pragma: LinkBW=2147483647, AccelBW=2147483647, AccelDuration=18000, Speed=6104.070
 Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.startupprofile
 Accept-Language: en-us, *;q=0.1
 Pragma: stream-switch-count=2
 Pragma: stream-switch-entry=ffff:1:0 ffff:2:0

The following example shows a PlayNextEntry response.

 HTTP/1.1 200 OK
 Content-Type: application/x-mms-framed
 Server: Cougar/9.5.6001.18281
 Date: Mon, 08 Mar 2010 20:06:26 GMT
 Pragma: no-cache, client-id=1427647663, features="seekable,stridable,playlist,skipbackward,skipforward", timeout=60000, AccelBW=3500000, AccelDuration=18000, Speed=5.000
 Cache-Control: no-cache, max-age=86399, x-wms-stream-type="playlist", user-public, must-revalidate, proxy-public, proxy-revalidate
 Last-Modified: Mon, 08 Mar 2010 20:05:40 GMT
 Etag: "143"
 Transfer-Encoding: chunked
 X-StartupProfile: Rate=10,12,15,20,30;MaxBytes=50134,1828,1828,1828,1828;Time=10666,0,0,0,0;StartTime=3000;LastTime=17041;MaxDiffTime=7244;MaxDiffSndTime=1341;ByteRate=35665,39318,39318,39318,39318;
 Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile