locked
MS-WMSP: Clarification needed on non-pipelined stream-switch-entry to turn off certain streams RRS feed

  • Question

  • We have a custom solution for live stream splitting using the MS-WMSP protocol. The issue that we are noticing is at times certain languages audio is not being delivered to the end WM Players. There is one stream that fetches the content from the WM Server which is split to multiple players that request the video+audio.After much debugging the issue boiled down to the following non-pipelined request to turn off an audio stream

    POST http://xx.x.xx.xxx/Live1 HTTP/1.0
    User-Agent: NSPlayer/12.0.7601.17514
    Host: xx.x.xx.xxx
    Pragma: client-id=3951560778
    Pragma: playlist-gen-id=11
    Pragma: stream-switch-count=1
    Pragma: stream-switch-entry=1:ffff:0
    Content-Length: 0

    While MS-WMSP article states that it is possible to turn off streams using stream-switch-entry=1:ffff:0 (http://msdn.microsoft.com/en-us/library/cc251258.aspx), in reality the WM Server returns 500 Internal Server error. I checked with WM Services on both Windows Server 2003 R2 and Windows 2008 R2.

    I see that the stream-switch-entry=ffff:1:2 works fine.

    Is this by design. Any help much appreciated.

    • Edited by Ravikiran Nishtala Thursday, June 6, 2013 10:13 PM Removed the \r\n sequence as it was not necessary for the illustration
    Thursday, June 6, 2013 7:27 PM

Answers

  • Forum update:

    This issue is resolved. The following reply was sent to the customer.

    -------------------------------------------------------------------------------

    Hi Ravi:

    We have finished our investigation on this issue. In a future release of MS-WMSP, the following modifications will be made:

    Section "2.2.1.4.27   stream-switch-entry"

    --------------------------------------------------

    Existing text:

    "

    Either stream can be set to a special value of "ffff" to indicate that no stream is specified. If the destination stream number is set to "ffff", the thinning level MUST be ignored. Stream numbers are located in the ASF file header delivered by the server prior to streaming the file. For details about ASF headers, ASF packets, and media objects, see the ASF specification as described in [ASF]. For more information about stream thinning in the Windows Media Services 9.0 Series SDK, see [WMSSDK].

    "

    Modified text

    "

    The source ASF stream number can be set to a special value of "ffff" to indicate that no stream is specified. Stream numbers are located in the ASF file header delivered by the server prior to streaming the file. For details about ASF headers, ASF packets, and media objects, see the ASF specification as described in [ASF]. For more information about stream thinning in the Windows Media Services 9.0 Series SDK, see [WMSSDK].

    "

    Existing text

    "

    The following is an example for "turning off" stream two.

    Pragma: switch-stream-entry=2:ffff:0

    "

    Modified text

    "

    The following is an example for "turning off" stream two.

    Pragma: switch-stream-entry=ffff:2:2

    "

    Section " 3.1.4.3.1   Sending a Play Request"

    -----------------------------------------------------

    Existing text

    "

    Because the ASF header typically specifies multiple streams, the higher layer MUST select exactly which of the streams should be streamed from the server. If a subset of the streams that are listed in the ASF header are selected to be streamed, or if the value of the Client-Token variable is not "NSServer", or if the Client-Token-Version (section 3.1.1) is greater than or equal to 9.0, the client MUST specify the complete selection state of all streams by including a stream-switch-entry (section 2.2.1.4.27) token on a Pragma header in the Play request. In this case, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0, or marked as off by specifying the destination stream parameter as "ffff", depending on the selection made by the higher layer. This token MUST be sent on a separate Pragma header; that is, no other tokens are allowed to be included on the same Pragma header as the stream-switch-entry token.

    "

    Modified text

    "

    Because the ASF header typically specifies multiple streams, the higher layer MUST select exactly which of the streams should be streamed from the server. If a subset of the streams that are listed in the ASF header are selected to be streamed, or if the value of the Client-Token variable is not "NSServer", or if the Client-Token-Version (section 3.1.1) is greater than or equal to 9.0, the client MUST specify the complete selection state of all streams by including a stream-switch-entry (section 2.2.1.4.27) token on a Pragma header in the Play request. In this case, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0, or marked as off by specifying the thinning level parameter as 2, depending on the selection made by the higher layer. This token MUST be sent on a separate Pragma header; that is, no other tokens are allowed to be included on the same Pragma header as the stream-switch-entry token.

    "

    Section " 3.1.4.5   Selection of Streams to Play from the New Playlist"

    -----------------------------------------------------------------------------------

    Existing text

    "

    If the stream-switch-entry token is included on a Pragma header, the token MUST specify the complete selection state of all streams. In other words, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0 or marked as off by specifying the destination stream parameter as "ffff", depending on the selection made by the higher layer.

    "

    Modified text

    "

    If the stream-switch-entry token is included on a Pragma header, the token MUST specify the complete selection state of all streams. In other words, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0 or marked as off by specifying the thinning level parameter as 2, depending on the selection made by the higher layer.

    "


    Regards, Obaid Farooqi

    Monday, July 8, 2013 8:29 PM

All replies

  • Hi,

    Thank you for raising this question. One of our engineers will investigate this and follow-up with you soon.

    Regards,

    Edgar

    Thursday, June 6, 2013 7:54 PM
  • Steps to reproduce the issue:

    Windows Media Server:

    Create a broadcast publishing point that broadcasts off a single file indefinitely in a loop. In our case it was a multi language, multi bitrate audio+video wmv.

    Client:

    Open the Windows Media Player and access http://<WM Server>/<broadcast>

    packet capture the above communication to notedown playlist-gen-id, client-id.

    Using a perl script, issue the above comment (as stated by me on the original question) to the WM Server in question. You would notice 500 Internal Server error when the stream-switch-entry is

    Pragma: stream-switch-entry=1:ffff:0

    You would receive 204 No Content if it is

    Pragma: stream-switch-entry=ffff:1:0

    My question was about the former response (500 error), where the MS-WMSP protocol spec says it is possible.


    --Ravi

    Thursday, June 6, 2013 10:26 PM
  • Hi Ravi:

    I'll help you with this issue and will be in touch as soon as I have an answer.


    Regards, Obaid Farooqi

    Saturday, June 8, 2013 4:52 PM
  • Hi Ravi:

    Would it be possible for you to send a network trace that exhibit this issue? Please send it to dochelp at Microsoft dot com to my attention and also please mention the frame number where you see 500 error.


    Regards, Obaid Farooqi

    Monday, June 10, 2013 4:45 PM
  • Forum update:

    This issue is resolved. The following reply was sent to the customer.

    -------------------------------------------------------------------------------

    Hi Ravi:

    We have finished our investigation on this issue. In a future release of MS-WMSP, the following modifications will be made:

    Section "2.2.1.4.27   stream-switch-entry"

    --------------------------------------------------

    Existing text:

    "

    Either stream can be set to a special value of "ffff" to indicate that no stream is specified. If the destination stream number is set to "ffff", the thinning level MUST be ignored. Stream numbers are located in the ASF file header delivered by the server prior to streaming the file. For details about ASF headers, ASF packets, and media objects, see the ASF specification as described in [ASF]. For more information about stream thinning in the Windows Media Services 9.0 Series SDK, see [WMSSDK].

    "

    Modified text

    "

    The source ASF stream number can be set to a special value of "ffff" to indicate that no stream is specified. Stream numbers are located in the ASF file header delivered by the server prior to streaming the file. For details about ASF headers, ASF packets, and media objects, see the ASF specification as described in [ASF]. For more information about stream thinning in the Windows Media Services 9.0 Series SDK, see [WMSSDK].

    "

    Existing text

    "

    The following is an example for "turning off" stream two.

    Pragma: switch-stream-entry=2:ffff:0

    "

    Modified text

    "

    The following is an example for "turning off" stream two.

    Pragma: switch-stream-entry=ffff:2:2

    "

    Section " 3.1.4.3.1   Sending a Play Request"

    -----------------------------------------------------

    Existing text

    "

    Because the ASF header typically specifies multiple streams, the higher layer MUST select exactly which of the streams should be streamed from the server. If a subset of the streams that are listed in the ASF header are selected to be streamed, or if the value of the Client-Token variable is not "NSServer", or if the Client-Token-Version (section 3.1.1) is greater than or equal to 9.0, the client MUST specify the complete selection state of all streams by including a stream-switch-entry (section 2.2.1.4.27) token on a Pragma header in the Play request. In this case, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0, or marked as off by specifying the destination stream parameter as "ffff", depending on the selection made by the higher layer. This token MUST be sent on a separate Pragma header; that is, no other tokens are allowed to be included on the same Pragma header as the stream-switch-entry token.

    "

    Modified text

    "

    Because the ASF header typically specifies multiple streams, the higher layer MUST select exactly which of the streams should be streamed from the server. If a subset of the streams that are listed in the ASF header are selected to be streamed, or if the value of the Client-Token variable is not "NSServer", or if the Client-Token-Version (section 3.1.1) is greater than or equal to 9.0, the client MUST specify the complete selection state of all streams by including a stream-switch-entry (section 2.2.1.4.27) token on a Pragma header in the Play request. In this case, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0, or marked as off by specifying the thinning level parameter as 2, depending on the selection made by the higher layer. This token MUST be sent on a separate Pragma header; that is, no other tokens are allowed to be included on the same Pragma header as the stream-switch-entry token.

    "

    Section " 3.1.4.5   Selection of Streams to Play from the New Playlist"

    -----------------------------------------------------------------------------------

    Existing text

    "

    If the stream-switch-entry token is included on a Pragma header, the token MUST specify the complete selection state of all streams. In other words, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0 or marked as off by specifying the destination stream parameter as "ffff", depending on the selection made by the higher layer.

    "

    Modified text

    "

    If the stream-switch-entry token is included on a Pragma header, the token MUST specify the complete selection state of all streams. In other words, the stream-switch-entry token MUST specify all available streams, and each stream MUST either be marked as on by specifying the thinning level parameter as 0 or marked as off by specifying the thinning level parameter as 2, depending on the selection made by the higher layer.

    "


    Regards, Obaid Farooqi

    Monday, July 8, 2013 8:29 PM