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 path
bstr = SysAllocString(L"C:\\MultipleAudio.mpg");
// assign the source file path to the play object
IltmmPlay_put_SourceFile(pPlay, bstr);
// free the string
SysFreeString(bstr);
BSTR bstr;
// create a string containing the source file path
bstr = SysAllocString(L"C:\\MultipleAudio.mpg");
// assign the source file path to the play object
pPlay->put_SourceFile(bstr);
// free the string
SysFreeString(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 file
DWORD 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 criterion
if( bAudio && bEnable )
IAMStreamSelect_Enable(pStreamSel, nIndex, AMSTREAMSELECTENABLE_ENABLE);
}
IUnknown_Release(pStreamSel);
// retrieve the number of available streams in the file
DWORD 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 criterion
if( 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