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:
Create an instance of ltmmPlay class:
IltmmPlay* pPlay;CoCreateInstance(&CLSID_ltmmPlay, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmPlay, (void**) &pPlay);
IltmmPlay* pPlay;CoCreateInstance(&CLSID_ltmmPlay, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmPlay, (void**) &pPlay);
Set the source file:
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);
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);
The IAMStreamSelect is usually exposed by the file splitter (Demultiplexer), so you need to get a pointer to the splitter object:
IUnknown* pSplitter;IltmmPlay_GetSubObject (pPlay ,ltmmPlay_Object_Splitter, & pSplitter);
IUnknown* pSplitter;pPlay->GetSubObject (ltmmPlay_Object_Splitter, & pSplitter);
Query for the IAMStreamSelect interface:
IAMStreamSelect *pStreamSel = NULL;IUnknown_QueryInterface(pSplitter, &IID_IAMStreamSelect, (void**)& pStreamSel);IUnknown_Release(pSplitter);
IAMStreamSelect *pStreamSel = NULL;pSplitter->QueryInterface(&IID_IAMStreamSelect, (void**)&pStreamSel);pSplitter->Release();
Use the IAMStreamSelect interface to select one of the available audio streams in the file:
// 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);
// 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();
Play the file:
IltmmPlay_Run (pPlay); pPlay->Run (); Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
