IWMSPacketStreamer::SelectStream
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
);
Arguments
pCommand |
[in] Pointer to an IWMSCommandContextIWMSCommandContext Interface containing the associated context. |
pStreamSwitchDescList |
[in] Pointer to an IWMSStreamSwitchDescriptionListIWMSStreamSwitchDescriptionList Interface containing stream IDs. |
pCallback |
[in] Pointer to an IWMSPacketStreamerCallbackIWMSPacketStreamerCallback Interface used to report the status of the method call. |
qwContext |
[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.
Remarks
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.
Example
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 ) )
break;
pSwitches[i].m_SrcStreamNumber =
(WORD)streamSwitchEntry.dwOldStreamNumber;
pSwitches[i].m_DstStreamNumber =
(WORD)streamSwitchEntry.dwNewStreamNumber;
}
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,
m_wBandwidthLevel);
if( FAILED( hr ) )
goto EXIT;
pCallback->OnSelectStream( hr, qwContext );
return( hr );
EXIT :
return( hr );
}
Requirements
Header: wmsdatapath.h.
Library: WMSServerTypeLib.dll.
Platform: Windows Server 2003, Enterprise Edition; Windows Server 2003, Datacenter Edition; Windows Server 2008.