Как данные перемещаются между фильтрами через контакты в виртуальной камере OBS-Studio в Windows?

Мне понравилась функция виртуальной камеры в OBS-Studio.

Я пытался понять его работу, но не мог понять должным образом. Я только понял, что он построен с использованием DirectShow . Проект содержит, OutputFilterOutputPin, а также CaptureFilterCapturePin

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

Как данные перемещаются через эти фильтры и булавки, когда мы включаем виртуальную камеру?

1 ответ

Решение

Они используют с серверобщей памятью . По сути, у них есть фильтр рендеринга, который копирует входящие растровые изображения в общую память. А еще у них есть фильтр захвата, который считывает растровые изображения из общей памяти. Вы можете увидеть часть их кода здесь: win-dshow

Другие вопросы по тегам