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 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