Фильтр записи файлов Microsoft предоставляет интерфейс IBaseFilter, а также IFileSinkFilter (и, возможно, другие интерфейсы тоже). Вам просто нужно использовать QueryInterface для получения этого интерфейса (вместо того, чтобы IFileSinkFilter наследовал от IBaseFilter).
IFileSinkFilter *pFileSink;
IBaseFilter* filter = NULL;
hr = pFileSink->QueryInterface( IID_IBaseFilter, (void **)&filter );
Если это неясно, убедитесь, что у вас есть хорошее базовое понимание COM , поскольку оно используется в DirectShow. Также см. документацию Microsoft DirectShow , которая хорошо написана и окончательна:
Если вы работаете в C #, а не в C ++, то, если я правильно помню, вы можете привести между различными объектами-оболочками C # COM автоматически к QueryInterface для соответствующего интерфейса, и в случае сбоя QueryInterface результат будет нулевым (на самом деле это не моя область экспертиза).
В одном из ваших комментариев вы упомянули пример граббера. Если вы пытаетесь захватить кадры аудио или видео, вам нужно будет установить сэмплерный захват перед входными выводами фильтра AVI MUX.
Соединение потока медиатипа между мультиплексором AVI и устройством записи файлов - это на самом деле просто способ отправки простых команд ввода-вывода по контактному соединению для записи / чтения байтового потока (задача мультиплексора AVI - отработать форматирование). Эти вызовы или сэмплы IStream не всегда соответствуют отдельным кадрам аудио или видео.
Фильтр анализа записи файла GraphStudioNext покажет вам отдельные выборки и вызовы IStream.