[求助]directshow的例子amcap(解决再加200分)

pisces007 2010-05-14 02:15:34
背景:
在Vista下,采用vs2005进行USB的电视卡采集。
DirectShow采用Microsoft DirectX SDK (February 2010)
使用Sample中自带的Amcap工程。
问题:
可以通过Amcap这个Sample采集到当前播放的电视视频信息
但是没有声音。
请问如何得到声音?
多谢
...全文
381 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
pisces007 2010-05-22
  • 打赏
  • 举报
回复
在调试Amcap程序时, 得到的pVCap是
http://blog.csdn.net/pisces007/archive/2010/05/17/5599237.aspx
中用Graphedit播放时的Vimicro Video Capture.
是否可以直接使用这个filter, 在后面接一个ACM Wrapper的filter?

我在程序里面这么实现的时候,发现filter可以连接上,
但是播放后还是没有声音。这么做不可以么?
只能一个一个枚举出来连接吗?
pisces007 2010-05-22
  • 打赏
  • 举报
回复
谢谢 bottlebox
请去以下两个帖子拿分
http://topic.csdn.net/u/20100522/13/b049418a-359d-4f36-b5b7-2b66ce990659.html
http://topic.csdn.net/u/20100522/13/7746680b-2735-4450-8209-bb4261b52a29.html
pisces007 2010-05-21
  • 打赏
  • 举报
回复
但是现在使用GUID的方式创建FIlter不成功

1)在Graphedit中获取VIMICRO Analog TV Audio的GUID
@device:pnp:\\?\usb#vid_0ac8&pid_0257#vimicro_corp.#{a799a802-a46d-11d0-a18c-00a02401dcd4}\{dc5d56ac-2410-47cc-b6ef-ab29e8d51454}

2)在程序中定义CLSID
DEFINE_GUID(CLSID_TVAudio,0xDC5D56AC, 0x2410, 0x47cc, 0xB6, 0xEF, 0xAB, 0x29, 0xE8, 0xD5, 0x14, 0x54);

3)获取Filter
hr = CoCreateInstance(CLSID_TVAudio, 0, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, pACap);

这时获取pAcap为空。hr的值为:0x80040154
能是什么原因呢?
瓶盒 2010-05-20
  • 打赏
  • 举报
回复
按Graph里的连接方式,程序中一个一个连起来就行了。
先要加入你的5个自定义Filter,然后分别去Find输入输出Pin,再连接对应Pin,连到系统Filter后,可直接调
IGraphBuilder::Render(outpin)去尝试让系统自动加入合适的Filter并连接
pisces007 2010-05-20
  • 打赏
  • 举报
回复
非常感谢你的帮助,现在可以在Graphedit中播放了.
情况见如下的链接:
http://blog.csdn.net/pisces007/archive/2010/05/17/5599237.aspx
那么,现在如何在代码里实现这个流程呢?
再次感谢!
瓶盒 2010-05-20
  • 打赏
  • 举报
回复
是用Guid.
不能使用amcap的连接方式,只修改连接方式,改动不是很多。
pisces007 2010-05-20
  • 打赏
  • 举报
回复
这些filter如何得到? 使用GUID吗?
那是不是就不能用amcap的代码了?
能不能在amcap基础上很少改动就可以播放声音?
因为这个东西要的很急.
瓶盒 2010-05-19
  • 打赏
  • 举报
回复
楼主在graphedit中是否能正常播放出声音
瓶盒 2010-05-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 pisces007 的回复:]
在Graphedit中找不到适合这个audio的pin类型的filter
所以播放不出来.
VideoCapture和TVaudio的pin都没有找到.
它们应该怎么继续链接其他的filter?
[/Quote]
如果在Graphedit中没法正常播放,很有可能Total Media软件是使用了自定义的filter.
pisces007 2010-05-19
  • 打赏
  • 举报
回复
给一个思路就可以
运动健将 2010-05-19
  • 打赏
  • 举报
回复
枚举audio的pin
pisces007 2010-05-19
  • 打赏
  • 举报
回复
在Graphedit中找不到适合这个audio的pin类型的filter
所以播放不出来.
VideoCapture和TVaudio的pin都没有找到.
它们应该怎么继续链接其他的filter?
pisces007 2010-05-18
  • 打赏
  • 举报
回复
谢谢你一直的关注.
我用一个叫做Total Media的软件可以正常播放该电视卡.
那么, 我现在应该如何实现这个声音的播放呢?
pisces007 2010-05-17
  • 打赏
  • 举报
回复
以下链接是Graphedit中Filter的情况,请帮助,谢谢
http://blog.csdn.net/pisces007/archive/2010/05/17/5599237.aspx
瓶盒 2010-05-17
  • 打赏
  • 举报
回复
楼主的Filter看来都是卡附带的,没用过不好说。
可以尝试在Graphedit中Render音视频的输出Pin看是否有声音图像,如果正常,则编程实现应该没什么问题。
如果也没声音,则就是卡提供的Filter的问题了
pisces007 2010-05-17
  • 打赏
  • 举报
回复
呃, 顶一下.
大家给一个适用的链接也可以啊
瓶盒 2010-05-14
  • 打赏
  • 举报
回复
可以在graphedit中查看一下,你的audio capture设备有哪些,如果只有声卡的,说明dshow不支持电视卡的声音采集,只有通过卡提供的SDK来了。
另外还可以考虑从电视卡的audio输出端连跟线到声卡的line in,就通过声卡来采集。
pisces007 2010-05-14
  • 打赏
  • 举报
回复
可是pCreateDevEnum->CreateClassEnumerator(
CLSID_AudioInputDeviceCategory, &pEm, 0);
之后只能得到声卡. 没有其他的设备.

而得到的Video的Crossbar也只有五个对外的Pin
0:Video Tuner in
1:Video Composite in
2:Video SVideo in
3:Audio Tuner in
4:Video Decoder Out

怎么样用TV Audio的filter来播放声音呢?
瓶盒 2010-05-14
  • 打赏
  • 举报
回复
你的声音是从声卡出来还是电视卡?
Amcap默认采集的是声卡的声音。
pisces007 2010-05-14
  • 打赏
  • 举报
回复
如果选择声卡之后, 在调用:
hr = gcap.pBuilder->FindInterface(&PIN_CATEGORY_CAPTURE,
&MEDIATYPE_Audio, gcap.pACap,
IID_IAMTVAudio, (void **)&pTVA);
之后hr不成功.
加载更多回复(4)

2,542

社区成员

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

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