The SelectStream method is called by the server to specify the streams that are sent down a data path.

HRESULT SelectStream(
  IWMSCommandContext*  pCommand,
  IWMSStreamSwitchDescriptionList*  pStreamSwitchDescList,
  IWMSPacketStreamerCallback*  pCallback,
  QWORD  qwContext



[in] Pointer to an IWMSCommandContextIWMSCommandContext Interface containing the associated context.


[in] Pointer to an IWMSStreamSwitchDescriptionListIWMSStreamSwitchDescriptionList Interface containing stream IDs.


[in] Pointer to an IWMSPacketStreamerCallbackIWMSPacketStreamerCallback Interface used to report the status of the method call.


[in] QWORD containing a value defined by the server to identify which call to SelectStream the plug-in is responding to when it calls IWMSPacketStreamerCallback::OnSelectStream. You must pass this value back unaltered.

Return Value

If the method succeeds, the plug-in must return S_OK. To report an error, the plug-in can return any HRESULT other than S_OK. If the plug-in uses the IWMSEventLogIWMSEventLog Interface to log error information directly to the Windows Event Viewer, it is recommended that it return NS_E_PLUGIN_ERROR_REPORTED. Typically, the server attempts to make plug-in error information available to the server object model, the Windows Event Viewer, and the troubleshooting list in the details pane of the Windows Media Services MMC. However, if the plug-in uses the IWMSEventLog interface to send custom error information to the Windows Event Viewer, returning NS_E_PLUGIN_ERROR_REPORTED stops the server from also logging to the event viewer. For more information about retrieving plug-in error information, see Identifying Plug-in Errors.


If this method returns S_OK, and if it does not call SelectStream on an upstream module in which it passes in the original arguments, the IWMSPacketStreamerCallback::OnSelectStream method must be called to let the input module pass results directly to the output module.


STDMETHODIMP CNetworkDataContainer::SelectStream(
                IWMSCommandContext *pCommand,
                IWMSStreamSwitchDescriptionList *pStreamSwitchDescList,
                IWMSPacketStreamerCallback *pCallback,
                QWORD qwContext)
    HRESULT hr = S_OK;

    if( m_State >= STREAMER_ERROR )
        return( NS_E_SHUTDOWN );

    DWORD i;
    DWORD dwNumStreamSelectEntries = 0;
    hr = pStreamSwitchDescList->GetDescriptionCount(
                                               &dwNumStreamSelectEntries );
    if( FAILED( hr ) )
        goto EXIT;
    for ( i = 0; i < dwNumStreamSelectEntries; i++ )
        CWMSStreamSwitch streamSwitchEntry;
        hr = pStreamSwitchDescList->GetIndexedDescription( i,
                                                &streamSwitchEntry );
        if( FAILED( hr ) )
        pSwitches[i].m_SrcStreamNumber =

        pSwitches[i].m_DstStreamNumber =
    if( NULL != m_pIncomingCounters )
        hr = m_pIncomingCounters->AllocateRequestedBandwidth(
                         (DWORD) m_dSpeed*m_dwBitrate );
        if( FAILED ( hr ) )
            goto EXIT;
    hr = m_pStream->SelectStreams( pSwitches, 
                                   (WORD) dwNumStreamSelectEntries, 

    if( FAILED( hr ) )
        goto EXIT;

    pCallback->OnSelectStream( hr, qwContext );
    return( hr );

    return( hr );


Header: wmsdatapath.h.

Library: WMSServerTypeLib.dll.

Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.

See Also


IWMSPacketStreamer Interface