DirectShow中通过IAMStreamSelect接口实现多音轨切换
luyued 发布于 2010-12-26 21:59 浏览 N 次IAMStreamSelect 接口
(只有英文版的,中文搜索起来不方便,MSDN中文版翻译太慢,故写之,转载时请注明,源自vcmute)
IAMStreamSelect 接口控制哪些流被播放并获取他们的信息. 典型的应用是不用的语言编码的一套音频流之间的选择. 举例来说, 用户可选择在英语、德语和法语间切换音轨,所以在MediaPlayer音频和语言音轨切换是同一菜单项.
方法 描述
Count 得到有效流的总数.
Info 获取一个指定流的信息.
Enable 使能或禁止一个指定流.
示例
下面例子讲述如何使用IAMStreamSelect 接口, 获取流的信息, 使能指定流, 并显示对应信息.
该例子假设播放文件存在 C:Sami_test_file.sami.并使用固定索引1和3来调用Enable函数:
void __cdecl main()
{
HRESULT hr;
IGraphBuilder *pGraph;
IMediaControl *pMediaControl;
IMediaEventEx *pEv;
IBaseFilter *pSAMI;
CoInitialize(NULL);
// 创建 filter graph manager.
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
IID_IGraphBuilder, (void **)&pGraph);
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEventEx, (void**)&pEv);
// 建立 graph 并寻找 SAMI parser.
pGraph->RenderFile(L"C:\\Sami_test_file.sami", NULL);
hr = pGraph->FindFilterByName(L"SAMI (CC) Parser", &pSAMI);
if (SUCCEEDED(hr))
{
IAMStreamSelect *pStrm = NULL;
hr = pSAMI->QueryInterface(IID_IAMStreamSelect, (void**)&pStrm);
if (SUCCEEDED(hr))
{
DWORD dwStreams = 0;
pStrm->Count(&dwStreams);
printf("Stream count: %dn", dwStreams);
// 选择流1和流3(French 和 "GreenText")
hr = pStrm->Enable(1, AMSTREAMSELECTENABLE_ENABLE);
hr = pStrm->Enable(3, AMSTREAMSELECTENABLE_ENABLE);
// 打印各个流的信息 for (DWORD index = 0; index < dwStreams; index++)
{
DWORD dwFlags;
WCHAR *wszName;
hr = pStrm->Info(index, NULL, &dwFlags, NULL, NULL, &wszName, NULL, NULL);
wprintf(L"Stream %d: %s [%s]n", index, wszName,
(dwFlags ? L"ENABLED" : L"DISABLED"));
CoTaskMemFree(wszName);
}
pStrm->Release();
}
pSAMI->Release();
}
// 播放
pMediaControl->Run();
while (1)
{
long evCode, lParam1, lParam2;
pEv->GetEvent(&evCode, &lParam1, &lParam2, 100);
if (evCode == EC_OLE_EVENT) {
wprintf(L"%sn", (BSTR)lParam2);
}
pEv->FreeEventParams(evCode, lParam1, lParam2);
if (evCode == EC_USERABORT || evCode == EC_COMPLETE || evCode == EC_ERRORABORT)
- 06-09· 转三个包子高美高嘉里奥
- 06-09· 高美高
- 06-08· 【岁宝红岭店】11月优惠活
- 06-04· 广州紫艾妮服饰有限公司
- 05-31· 太空堡垒
- 05-29· [置顶]在这里为您挑选的都
- 05-29· 成功案例:伟雅皇冠故事
- 05-29· 淘宝皇冠店铺★皇冠店铺
- 05-29· 一个皇冠的百年史
- 05-28· 广州市花都友联皮具制品
- 05-27· 爱的COMICO
- 05-26· 健康快乐成长(2007年11月
- 05-26· 评论 (
- 05-26· 幼儿园的死亡教育
- 05-26· 美空美女胸部大比拼 谁的
- 05-26· DNF背景故事大事记使徒介
- 05-26· 创业必看的项目:广州紫艾
- 05-25· 吸血鬼日记
- 05-25· BJ单身日记2:理性边缘.20
- 05-25· 转帖:公企鹅对黑白靴发情