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:
The GET request includes a Pragma header with the xPlayNextEntry (section 2.2.1.4.35) token.
The GET request does not include the xPlayStrm (section 2.2.1.4.36) token on a Pragma header.
If the GET request includes the xPlayStrm token, then its value is 0.
The GET request does not include the pipeline-request (section 2.2.1.4.16) token on a Pragma header.
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