陆其明吧 关注:196贴子:6,653
  • 3回复贴,共1

请陆老师指点一下下,关于虚拟摄像头的实现。

取消只看楼主收藏回复

其实我觉得虚拟摄像头有点类似Source Filter,更确切的说应该是推模式的Source Filter,就好像SDK里面的那个Ball(弹球)例子一样。

我现在有几个问题不是很清楚,希望陆老师指点一下。
1.通常我们开发的Filter都在DirectShow Filters里面,而那些虚拟摄像头软件的Filter却和真实摄像头一样注册在Video Capture Source里面,请问它是怎么实现的?

2.通常我们开发的Filter都是通过CoCreateInstance函数创建的,而那些虚拟摄像头软件的Filter却和真实摄像头一样可以用IMoniker::BindToObject函数创建,请问它是怎么实现的?

我是顺着气味一路到此的,希望大家支持我。


1楼2006-06-10 19:01回复
    非常感谢陆老师这么及时的回复,在您的指点下,我已经成功的将Ball注册到了Video Capture Source里面,并且能够通过IMoniker::BindToObject创建Filter了。

    但是现在有一个小问题,描述如下。

    我直接使用IGraphBuilder::Render函数可以正常的建立Graph。
    但是用ICaptureGraphBuilder2::RenderStream却失败(参数分别为:&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pFilter, NULL, NULL),函数返回值为0x80070057。

    我通过GraphEdit查看Filter信息时,发现Pin的ClsPinCategory为{00000000-0000-0000-0000-000000000000},而不是PIN_CATEGORY_PREVIEW(fb6c4282-0353-11d1-905f-0000c0cc16ba),这也许就是问题所在!

    请问陆老师ClsPinCategory由注册时的哪个参数决定,或者说我怎样注册才能使ClsPinCategory变为PIN_CATEGORY_PREVIEW?

    再次感谢!


    3楼2006-06-11 10:20
    回复
      怎么变成匿名发表了?


      6楼2006-06-11 14:19
      回复
        啊。。。
        哇塞。。。
        好糗啊。。。
        伤自尊啊。。。

        m_paStreams[0] = new CBallStream(phr, this, L"A Bouncing Ball!");

        原来在这里,我倒。。。

        谢谢陆老师提醒,这个帖子就到这里了,以后我会常来的


        8楼2006-06-11 16:03
        回复