楼主发表于:2009-04-10 16:46:20请教一下
  我调试陆老师那个DirectShow 实务精选 中 第三章那个视频聊天的 avchat 的时候 程序可以运行 
声音可以传递 ,但是发现 图像不能显示...
  我使用VS2008 + sdk包中的DirectShow 环境调试的

请问有谁 用我这个环境调试出来有图像的吗? 
或者您觉得是程序哪个地方出现了什么问题导致图像不能显示
我用GE 发现 图像的 接受filter 和发送filter都有 ,但是 这两个filter 都是单个的..都没有构建成一个完整的graph,
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 回复次数:18 
koople
(傻子才悲伤)

等 级:

#1楼 得分:0回复于:2009-04-10 17:04:51强烈呼唤野蛮人大哥!!!!!
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:关于AMT机器的双网卡问题
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#2楼 得分:0回复于:2009-04-11 07:12:31最近找工作有点忙。

我用GE 发现 图像的 接受filter 和发送filter都有 ,但是 这两个filter 都是单个的..都没有构建成一个完整的graph,
-------------------

avchat从理论上是没有问题的,不过实现手法上很有问题。

1,一种可能,客户没有收到格式信息,这种可能性较小。
2.接收端虽然收到了格式,但本地没有相应的解码器,所以graph联接不成功。有一定的可能性。
3.他的网络传输部分写的很不专业,数据不完整。很有可能。

-----以后结论是因为,很多朋友都发现avchat不能出图象,少数才能正常工作。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:请问Intel MKL是用什么方式实现多线程并行?
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#3楼 得分:0回复于:2009-04-11 07:13:41我用GE 发现 图像的 接受filter 和发送filter都有 ,但是 这两个filter 都是单个的..都没有构建成一个完整的graph,
----------一般是格式信息不对,所以graph联接不成功。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:【连载之四】~~NUMA与英特尔下一代Nehalem处理器学习心得!
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#4楼 得分:0回复于:2009-04-11 08:15:22目前只支持usb camera和dv设备,没有压缩,在外网应该效果不理想或看不到图象,因为数据量超大。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:@多核系统下H264解码器并行解码方案的疑惑????
bottlebox
(瓶盒)

等 级:

#5楼 得分:20回复于:2009-04-11 12:53:17我前两天调试的结果是Filter连接时出了问题,当调用
pOut = mVideoFilter->GetPin(FALSE, "Capture");对USB 的摄像头,这种方法不能得到输出Pin,我换成枚举第一个输出Pin的方式后,可以显示图像。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 精华推荐:百度面试题解答(第二题) 绝对值的看
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#6楼 得分:0回复于:2009-04-11 13:53:07to楼上,我在回4楼的时候,也写了,结果csdn上传回复时出错。

所以又改了一下,确实有你说的这种情况,你的意思和我四楼回复基本相同。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
koople
(傻子才悲伤)

等 级:

#7楼 得分:0回复于:2009-04-11 14:47:33我的情况是这样的
  我预览的时候开始也不可以显示图像,我是 也碰到过5楼的情况,我 是改了3个地方的Capture ,因为现在usb接口的 输出pin都是中文的“捕获”
我改成了兼容了 Capture和 捕获 两种情况的pin 。
  后来发现还是不能预览图像 ,最后发现 是读取媒体格式出了问题, avchat那个程序支持 RGB 和 YUV 的媒体类型,可是我发现 我的USB摄像头读出来的媒体类型是 MJPG,我就在 源代码中加了 
else if(pmt->subtype == MEDIASUBTYPE_MJPG )
{
  temp = MJPG;
}

后来出现了 图像。。。 现在调试 就是发现声音可以点对点传输,不知道为什么就是不能图像传输出来.. 最后我发帖就是我这个贴提出的问题, 我继续调试寻找问题,希望知道的各位大哥可以给我一点意见。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#8楼 得分:80回复于:2009-04-11 15:50:26和你的摄象头有关,你换个一般的usb的有驱的,肯定可以。

你一定是无驱摄象头,这种都是输出mjpg格式的。

问题出在,你显示的graph不能联接成功。

我用GE 发现 图像的 接受filter 和发送filter都有 ,但是 这两个filter 都是单个的..都没有构建成一个完整的graph,
----------你可以把preview中的capture filter后面的filter移值到你的显示后面就可以了,我就是这样做的。 
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
koople
(傻子才悲伤)

等 级:

#9楼 得分:0回复于:2009-04-11 16:25:24野蛮人 大哥 我调试成功了
确实是如你说的 我是无驱动摄像头

  这里面调试有几点 首先 是 pOut = mVideoFilter->GetPin(FALSE, "Capture"); IPin * pCapture = GetPin(FALSE, "Capture"); 都改成兼容 “捕获”。
  然后 在avchat那个程序支持 RGB 和 YUV 的媒体类型,添加媒体类型 MJPG。并且加上
else if(pmt->subtype == MEDIASUBTYPE_MJPG ) 

  temp = MJPG; 
}

UDsUtils.cpp Device_Type UDsUtils::DetermineDeviceType(IBaseFilter * inFilter)
这个函数里面把
if (inputs + outputs <= 2)
{
return DT_USB_Camera;
}
改成自己摄像头filter的pin数 ..

这个程序的有关改动 我的就是这些了..

现在调试成功是成功了,但是 发现 语音对话 自己说的话有回音,野蛮人大哥你能不能帮我解答下? 或者其他大哥懂的告诉我下!

对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
koople
(傻子才悲伤)

等 级:

#10楼 得分:0回复于:2009-04-11 16:25:47野蛮人 大哥 我调试成功了
确实是如你说的 我是无驱动摄像头

  这里面调试有几点 首先 是 pOut = mVideoFilter->GetPin(FALSE, "Capture"); IPin * pCapture = GetPin(FALSE, "Capture"); 都改成兼容 “捕获”。
  然后 在avchat那个程序支持 RGB 和 YUV 的媒体类型,添加媒体类型 MJPG。并且加上
else if(pmt->subtype == MEDIASUBTYPE_MJPG ) 

  temp = MJPG; 
}

UDsUtils.cpp Device_Type UDsUtils::DetermineDeviceType(IBaseFilter * inFilter)
这个函数里面把
if (inputs + outputs <= 2)
{
return DT_USB_Camera;
}
改成自己摄像头filter的pin数 ..

这个程序的有关改动 我的就是这些了..

现在调试成功是成功了,但是 发现 语音对话 自己说的话有回音,野蛮人大哥你能不能帮我解答下? 或者其他大哥懂的告诉我下!

对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#11楼 得分:0回复于:2009-04-12 00:30:42回音的问题就比较麻烦了。不是一下子能解决的。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
koople
(傻子才悲伤)

等 级:

#12楼 得分:0回复于:2009-04-13 19:06:21能不能简单的给我说说?
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
wwwllg
(野蛮人qq24508609 )

等 级:
6
2
#13楼 得分:0回复于:2009-04-14 07:08:50一般需要口噪声处理。

目前好象speech做了回生消除。不过你的回音也不排除他原因。
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
lmjmn123
(lmjmn123)

等 级:

#14楼 得分:0回复于:2009-10-08 10:29:41"傻子才悲伤"大哥,你上面说的把"pOut = mVideoFilter->GetPin(FALSE, "Capture"); IPin * pCapture = GetPin(FALSE, "Capture"); 都改成兼容 “捕获”。 "具体是怎么改啊?我是个新手,麻烦讲得具体点.谢谢!~
  我的也是无驱摄像头,请问能用无驱动的来测试AVChat程序吗?具体都要修改哪些地方才能让AVChat能看到视频啊?谢谢了!~
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
xiepengyu
(航宇)

等 级:

#15楼 得分:0回复于:2009-10-18 01:53:50引用 9 楼 koople 的回复:
野蛮人 大哥 我调试成功了
确实是如你说的 我是无驱动摄像头

  这里面调试有几点 首先 是 pOut = mVideoFilter->GetPin(FALSE, "Capture");  IPin * pCapture = GetPin(FALSE, "Capture"); 都改成兼容 “捕获”。
  然后 在avchat那个程序支持 RGB 和 YUV 的媒体类型,添加媒体类型 MJPG。并且加上
else if(pmt->subtype == MEDIASUBTYPE_MJPG )
{
              temp = MJPG;
}

UDsUtils.cpp  Device_Type UDsUtils::DetermineDeviceType(IBaseFilter * inFilter)
这个函数里面把
if (inputs + outputs <= 2)
{
return DT_USB_Camera;
}
改成自己摄像头filter的pin数 ..

这个程序的有关改动 我的就是这些了..

现在调试成功是成功了,但是 发现 语音对话 自己说的话有回音,野蛮人大哥你能不能帮我解答下? 或者其他大哥懂的告诉我下!

temp = MJPG;

enum {
UYVY = 0, YUY2, RGB565, RGB555, RGB24, RGB32, Unknown
} currentPreferred, temp;

那MJPG放在上面的枚举的什么为止呀?
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
caicai999
(小树)

等 级:

#16楼 得分:0回复于:2009-11-19 15:29:28我也在做这个,我现在的问题就是看不到图像,也没有声音,我怀疑两端都没有连接上!可是找不到问题出在哪里!
有做过的、还在做的一起来讨论讨论哈!
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
sqzxcv
(小强)

等 级:

#17楼 得分:0回复于:2010-01-14 03:55:18我也在看这方面的内容,难道无驱动的摄像头和有驱动的摄像头写的程序还不一样,学习了
对我有用[0] 丢个板砖[0] 引用 举报 管理 TOP 
yunshacxj
(yunshacxj)

等 级:

#18楼 得分:0回复于:2010-03-02 10:49:23引用 9 楼 koople 的回复:
野蛮人 大哥 我调试成功了
确实是如你说的 我是无驱动摄像头

  这里面调试有几点 首先 是 pOut = mVideoFilter->GetPin(FALSE, "Capture");  IPin * pCapture = GetPin(FALSE, "Capture"); 都改成兼容 “捕获”。
  然后 在avchat那个程序支持 RGB 和 YUV 的媒体类型,添加媒体类型 MJPG。并且加上
else if(pmt->subtype == MEDIASUBTYPE_MJPG )
{
              temp = MJPG;
}

UDsUtils.cpp  Device_Type UDsUtils::DetermineDeviceType(IBaseFilter * inFilter)
这个函数里面把
if (inputs + outputs <= 2)
{
return DT_USB_Camera;
}
改成自己摄像头filter的pin数 ..

这个程序的有关改动 我的就是这些了..

现在调试成功是成功了,但是 发现 语音对话 自己说的话有回音,野蛮人大哥你能不能帮我解答下? 或者其他大哥懂的告诉我下!

直接这样修改成这样:
pOut = mVideoFilter->GetPin(FALSE, "捕获");  
IPin * pCapture = GetPin(FALSE, "捕获");

呵呵,我试过了,可以用!

posted on 2011-01-03 04:16  xilentz  阅读(1563)  评论(0编辑  收藏  举报