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

问题描述 投票:0回答:1

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

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

OutputFilter
OutputPin
CaptureFilter
CapturePin

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

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

c++ com directshow obs-studio virtual-webcam
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.