数据如何通过 Windows 上 OBS-Studio 虚拟相机中的引脚跨过滤器移动?

问题描述

我喜欢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;
    // ...
}

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

解决方法

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