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 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);
C++ Source
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);
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 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);
C++ Source
// 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();
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