2.2.2.6 Play (Request and Response)
The purpose of the Play request is to request the server to start streaming the content that is identified by the URL, as specified in [RFC1738], and which is included in the request.
If the client has previously sent a Describe request (section 2.2.2.1), the client will have obtained at least a $H packet (section 2.2.3.5) and perhaps also a $M packet (section 2.2.3.6) and $P packets (section 2.2.3.7). Based on the information provided by those packets, the client can include the stream-switch-entry (section 2.2.1.4.27) token on the Pragma header, specifying the streams of the content that the client wants to receive.
The Play request is defined as an HTTP GET request that satisfies the ABNF syntax for WMS-Play-Request [RFC4234] and satisfies all of the following conditions:
The GET request includes a Pragma header with the xPlayStrm (section 2.2.1.4.36) token, and the value of this token MUST be 1.
The GET request does not include the xPlayNextEntry (section 2.2.1.4.35) token on a Pragma header.
The GET request does not include the pipeline-request (section 2.2.1.4.16) token on a Pragma header.
The GET request uses either the HTTP 1.0 protocol, as specified in [RFC1945], or the HTTP 1.1 protocol, as specified in [RFC2616].
The syntax of the response to a successfully executed Play request is defined as a WMS-Play-Response:
-
WMS-Play-Request = WMS-Play-Req-Line WMS-PlayReq-Headers CRLF WMS-Play-Req-Line = "GET" SP Request-URI SP HTTP-Version 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 = no-cache ; section 2.2.1.4.12 / packet-num ; section 2.2.1.4.13 / rate ; section 2.2.1.4.22 / stream-offset ; section 2.2.1.4.25 / stream-time ; section 2.2.1.4.28 / xPlayStrm ; section 2.2.1.4.36 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-id ; section 2.2.1.4.5 / client-lag ; section 2.2.1.4.6 / LinkBW ; section 2.2.1.4.9 / max-duration ; section 2.2.1.4.11 / 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 / request-context ; section 2.2.1.4.23 / speed ; section 2.2.1.4.24 / stream-switch-count ; section 2.2.1.4.26 / stream-switch-entry ; section 2.2.1.4.27 / xClientGuid ; section 2.2.1.4.33 PlayReq-Token-OPT11 = version11-enabled ; section 2.2.1.4.30 WMS-Play-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 )
The following example shows a Play request.
-
GET /welcome 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: no-cache,rate=1.000,stream-time=0,stream-offset=4294967295:4294967295,packet-num=4294967295,max-duration=0 Pragma: xPlayStrm=1 Pragma: client-id=2338761264 Pragma: LinkBW=2147483647, AccelBW=2147483647, AccelDuration=18000, Speed=91268.055 Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.startupprofile Pragma: playlist-seek-id=64 Pragma: xClientGUID={BFE16E37-55EC-4AE4-A5A9-0B0D307F4B72} Pragma: stream-switch-count=2 Pragma: stream-switch-entry=ffff:1:0 ffff:2:0 Accept-Language: en-us, *;q=0.1
The following example shows a Play response.
-
HTTP/1.1 200 OK Content-Type: application/x-mms-framed Server: Cougar/9.5.6001.18281 Date: Mon, 08 Mar 2010 18:39:44 GMT Pragma: no-cache, client-id=2338761264, features="", timeout=60000, AccelBW=3500000, AccelDuration=18000, Speed=5.000 Cache-Control: no-cache, x-wms-content-size=51077, max-age=86399, user-public, must-revalidate, proxy-public, proxy-revalidate Last-Modified: Tue, 22 Jan 2008 22:54:31 GMT Etag: "51077" Transfer-Encoding: chunked X-StartupProfile: Rate=10,12,15,20,30;MaxBytes=459,459,459,459,459;Time=0,0,0,0,0;StartTime=3290;LastTime=15120;MaxDiffTime=0;MaxDiffSndTime=0;ByteRate=2538,2538,2538,2538,2538; Supported: com.microsoft.wm.srvppair, com.microsoft.wm.sswitch, com.microsoft.wm.predstrm, com.microsoft.wm.fastcache, com.microsoft.wm.startupprofile