다음을 통해 공유


플러그 인 배포자

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

PID(플러그 인 배포자)는 필터 그래프 관리자의 기능을 확장하는 방법입니다. 플러그 인 배포자는 필터 그래프 관리자가 런타임에 집계하는 COM 개체입니다. 애플리케이션은 필터 그래프 관리자를 통해 PID에 대한 액세스 권한을 얻습니다.

필터 그래프 관리자가 지원하지 않는 인터페이스에 대해 쿼리되면 레지스트리에서 다음 형식의 키를 검색합니다.

HKEY_CLASSES_ROOT\Interface\IID\Distributor

IID 는 인터페이스 식별자를 포함하는 문자열입니다. 레지스트리 항목이 있는 경우 항목의 값은 인터페이스를 지원하는 PID의 CLSID(클래스 식별자)를 정의합니다. 필터 그래프 관리자는 PID를 집계하고 인터페이스 포인터를 반환하므로 PID의 외부 IUnknown 역할을 합니다. 애플리케이션이 인터페이스에서 메서드를 호출할 때 실제로 PID에서 메서드를 호출합니다. 그러나 PID의 존재는 애플리케이션에 투명합니다.

배포자라는 용어는 PID가 필터 그래프 관리자의 인터페이스에 대한 외부 IUnknown 포인터를 쿼리할 수 있다는 사실에서 비롯됩니다. PID는 IFilterGraph::EnumFilters 메서드를 호출하여 그래프의 필터를 열거하고 메서드 호출을 해당 필터에 배포할 수 있습니다. 이러한 방식으로 PID는 애플리케이션이 필터에서 메서드를 호출하는 단일 제어 지점 역할을 할 수 있습니다.

필터 그래프 관리자가 PID를 집계하면 IDistributorNotify 인터페이스에 대한 PID를 쿼리합니다. PID가 이 인터페이스를 지원하는 경우 필터 그래프 관리자는 이를 사용하여 PID에 그래프의 변경 내용을 알립니다.

사용자 지정 PID를 구현하려면 집계를 지원하는 COM 개체를 만듭니다. 필터 그래프 관리자가 아직 지원하지 않는 인터페이스를 지원해야 합니다. 필요에 따라 IDistributorNotify 인터페이스를 지원할 수 있습니다.

PID가 필터 그래프 관리자에서 인터페이스 포인터를 가져오는 경우 즉시 해제해야 합니다. 그렇지 않으면 필터 그래프 관리자가 제거되지 않도록 순환 참조 횟수를 만들 수 있습니다. 필터 그래프 관리자가 PID의 수명을 제어하므로 어떤 경우에도 필터 그래프 관리자에 대한 참조 수를 보유할 필요가 없습니다.

PID는 필터 그래프 관리자의 집계를 위해 특별히 설계되었기 때문에 PID의 생성자 메서드에서 이를 적용할 수 있습니다. 외부 IUnknown 포인터가 NULL인지 확인하고, 이 경우 오류 코드 VFW_E_NEED_OWNER 반환합니다. (오류 및 성공 코드를 참조하세요.) 또한 다른 개체가 PID를 집계하지 못하도록 하려면 IGraphBuilder 인터페이스에 대한 외부 IUnknown 포인터를 쿼리할 수 있습니다. 개체가 IGraphBuilder를 노출하지 않는 경우 오류 코드를 반환합니다.