Как данные перемещаются между фильтрами через контакты в виртуальной камере OBS-Studio в Windows?
Мне понравилась функция виртуальной камеры в 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;
// ...
}
Как данные перемещаются через эти фильтры и булавки, когда мы включаем виртуальную камеру?
1 ответ
Решение
Они используют с серверобщей памятью . По сути, у них есть фильтр рендеринга, который копирует входящие растровые изображения в общую память. А еще у них есть фильтр захвата, который считывает растровые изображения из общей памяти. Вы можете увидеть часть их кода здесь: win-dshow