The IAMStreamSelect is a Direct Show interface for selecting which streams are played and retrieving information about them. An example of logical stream selection would be selecting a particular language (English, German, or French for example) from a set of audio streams that encode different national languages.
To use IAMStreamSelect to select a specific audio stream from an MPEG file with multiple audio streams, perform the following steps:
1. Create an instance of ltmmPlay class:
C Source
IltmmPlay* pPlay;CoCreateInstance(&CLSID_ltmmPlay, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmPlay, (void**) &pPlay);
C++ Source
IltmmPlay* pPlay;CoCreateInstance(&CLSID_ltmmPlay, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmPlay, (void**) &pPlay);
2. Set the source file:
C Source
BSTR bstr;// create a string containing the source file pathbstr = SysAllocString(L"C:\\MultipleAudio.mpg");// assign the source file path to the play objectIltmmPlay_put_SourceFile(pPlay, bstr);// free the stringSysFreeString(bstr);
C++ Source
BSTR bstr;// create a string containing the source file pathbstr = SysAllocString(L"C:\\MultipleAudio.mpg");// assign the source file path to the play objectpPlay->put_SourceFile(bstr);// free the stringSysFreeString(bstr);
3. The IAMStreamSelect is usually exposed by the file splitter (Demultiplexer), so you need to get a pointer to the splitter object:
C Source
IUnknown* pSplitter;IltmmPlay_GetSubObject (pPlay ,ltmmPlay_Object_Splitter, & pSplitter);
C++ Source
IUnknown* pSplitter;pPlay->GetSubObject (ltmmPlay_Object_Splitter, & pSplitter);
4. Query for the IAMStreamSelect interface:
C Source
IAMStreamSelect *pStreamSel = NULL;IUnknown_QueryInterface(pSplitter, &IID_IAMStreamSelect, (void**)& pStreamSel);IUnknown_Release(pSplitter);
C++ Source
IAMStreamSelect *pStreamSel = NULL;pSplitter->QueryInterface(&IID_IAMStreamSelect, (void**)&pStreamSel);pSplitter->Release();
5. Use the IAMStreamSelect interface to select one of the available audio streams in the file:
C Source
// retrieve the number of available streams in the fileDWORD dwCount;int nIndex;BOOL bAudio = FALSE;BOOL bEnable = FALSE;AM_MEDIA_TYPE *pmt;DWORD dwFlags;LCID lcid;DWORD dwGroup;WCHAR *pszName;IUnknown *pObject;IUnknown *pUnk;IAMStreamSelect_Count(pStreamSel , &dwCount);for( nIndex = 0; nIndex<dwCount; nIndex++ ){// get information about the stream, and decide if this is an audio stream and you want to enable it:IAMStreamSelect_Info(pStreamSel , nIndex, &pmt, &dwFlags, &lcid, &dwGroup, &pzsName, &pObject, &pUnk);// based on your selection criterionif( bAudio && bEnable )IAMStreamSelect_Enable(pStreamSel, nIndex, AMSTREAMSELECTENABLE_ENABLE);}IUnknown_Release(pStreamSel);
C++ Source
// retrieve the number of available streams in the fileDWORD dwCount;int nIndex;BOOL bAudio = FALSE;BOOL bEnable = FALSE;AM_MEDIA_TYPE *pmt;DWORD dwFlags;LCID lcid;DWORD dwGroup;WCHAR *pszName;IUnknown *pObject;IUnknown *pUnk;pStreamSel->Count(&dwCount);for( nIndex = 0; nIndex<dwCount; nIndex++ ){// get information about the stream, and decide if this is an audio stream and you want to enable it:pStreamSel->Info(nIndex, &pmt, &dwFlags, &lcid, &dwGroup, &pzsName, &pObject, &pUnk);// based on your selection criterionif( bAudio && bEnable )pStreamSel->Enable(nIndex, AMSTREAMSELECTENABLE_ENABLE);}pStreamSel->Release();
6. Play the file:
C Source
IltmmPlay_Run (pPlay); C++ Source
pPlay->Run (); Raster .NET | C API | C++ Class Library | JavaScript HTML5
Document .NET | C API | C++ Class Library | JavaScript HTML5
Medical .NET | C API | C++ Class Library | JavaScript HTML5
Medical Web Viewer .NET
