请教陆老师和各位大哥:在graph运行时,怎么切换audio stream??

iswjh 2005-12-15 11:10:14
我的graph如下:
file source (d:\\aa.vob) -> splitter ->(video pin) ->神龙卡
-> (audio 1) -> AC3Filter -> Morgan stream switch
-> (audio 2) -> AC3Filter -> Morgan stream switch
我使用的是Morgan stream switch filter,我在graphedit中运行时,可以设置morgan 属性进行切换音频流,在程序中我使用:
IAMStreamSelect* lpAMSS=NULL;
lpMorgan->QueryInterface(IID_IAMStreamSelect,(void**)lpAMSS);

lpAMSS->Enable(1,AMSTREAMSELECTENABLE_ENABLE); //在调用这个方法时,系统提示无法完成。

这是什么原因???请教陆老师,有没有其它方法或filter可以实现切换。
...全文
125 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
rageliu 2005-12-15
  • 打赏
  • 举报
回复
看你上面的代码,有个语句写错了

lpMorgan->QueryInterface(IID_IAMStreamSelect,(void**)lpAMSS);

应该是
lpMorgan->QueryInterface(IID_IAMStreamSelect,(void**)&lpAMSS);//注意有个&的
rageliu 2005-12-15
  • 打赏
  • 举报
回复
我以前在的公司也用了神龙卡,你应该要将神龙卡的splitter加入Graph,它提供了audio的控制接口,可以查询得到,这样控制后是2个音箱都有声音的,不用自己再处理(要是通过IBasicAudio控制声道不处理就只有一个音箱有),这是mpeg1的处理方式,也就是所说的声道控制

IAMStreamSelect一般控制音轨,它的Enable()方法的第一个参数是从0开始的!一般是控制DVD(也就是mpeg2格式),有几个音轨就从0往上每次递加1,即:0 1 2 ...

lpAMSS->Enable(1,AMSTREAMSELECTENABLE_ENABLE); //在调用这个方法时,系统提示无法完成。

这个问题:
1 请确定前面成功取得了lpAMSS接口
2 请先用count()方法取得文件的音轨数,再判断enable()参数是否到达1

2,554

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧