1 - Sink Writer на самом деле не задокументировано о том, что он делает с образцами. Для эффективности, я полагаю, это просто «AddRef» в образце. Если вы создаете новый образец после каждого захвата видео, вам просто нужно выпустить его после WriteSample. С Sink Writer проблем не будет.
2 - Для более медленных машин он работает так же. Возможно, вам придется отбросить образцы для эффективности, но это не имеет никакого отношения к выпуску образцов.
3 - Метод WriteSample из документации IMFSinkWriter явно не указывает, нужны ли время / продолжительность выборки. Так что я бы сказал, установите их при необходимости.
EDIT
Мое объяснение выше о C ++. C # COM взаимодействие - это другая история.
Я прочитал статью о interop com. Похоже, что разработчики C # не устанавливают объекты в nullptr после вызова Marshal.ReleaseComObject и повторно используют их. Они получают InvalidComObjectException. Если вы используете AddRef, Release и NULL, как в C ++, я думаю, у вас не возникнет проблем (RCW также выполняет подсчет ссылок).
Для случая, когда объект COM переписан в управляемом коде:
Насколько мне известно, компоненты MediaFoundation являются нативным кодом. Я сомневаюсь, что они меняют их на управляемый код. И даже если это произойдет, вам просто нужно подавить Marshal.ReleaseComObject или теперь использовать IsComObject.