0

我喜欢OBS-Studio的虚拟相机功能。

我试图了解它的工作原理,但无法正确理解。我只知道它是使用DirectShow构建的。项目包含 OutputFilterOutputPinCaptureFilterCapturePin

class OutputFilter : public IBaseFilter {
    // ...
    friend class OutputPin;
    IFilterGraph *graph;
    ComPtr<OutputPin> pin;
    // ...
}

class OutputPin : public IPin, public IAMStreamConfig, public IKsPropertySet {
    // ...
    friend class OutputFilter;
    // ...
}

class CaptureFilter : public IBaseFilter {
    // ...
    friend class CapturePin;
    ComPtr<IFilterGraph> graph;
    ComPtr<CapturePin> pin;
    // ...
}

class CapturePin : public IPin, public IMemInputPin {
    // ...
    CaptureFilter *filter;
    // ...
}

当我们启用虚拟相机时,数据是如何通过这些过滤器和引脚移动的?

4

1 回答 1

1

他们正在使用共享内存服务器。基本上,它们有一个渲染过滤器,可以将传入的位图复制到共享内存中。然后他们有一个捕获过滤器,可以从共享内存中读取位图。你可以在这里看到他们的一些代码:win-dshow

于 2021-07-13T00:33:05.387 回答