다음을 통해 공유


하드웨어 디바이스가 필터 그래프에 참여하는 방법

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

이 문서에서는 DirectShow가 오디오 및 비디오 하드웨어와 상호 작용하는 방법을 설명합니다.

래퍼 필터

모든 DirectShow 필터는 사용자 모드 소프트웨어 구성 요소입니다. 비디오 캡처 카드 같은 커널 모드 하드웨어 디바이스가 DirectShow 필터 그래프에 조인하려면 디바이스를 사용자 모드 필터로 표시해야 합니다. 이 함수는 DirectShow와 함께 제공되는 특수한 "래퍼" 필터에 의해 수행됩니다. 이러한 필터에는 오디오 캡처 필터, VFW 캡처 필터, TV 튜너 필터, TV 오디오 필터 및 아날로그 비디오 크로스바 필터가 포함됩니다. 또한 DirectShow는 모든 유형의 WDM(Windows 드라이버 모델) 스트리밍 디바이스를 나타낼 수 있는 KsProxy라는 필터를 제공합니다. 하드웨어 공급업체는 KsProxy에서 집계한 COM 개체인 Ksproxy 플러그 인을 제공하여 사용자 지정 기능을 지원하도록 KsProxy를 확장할 수 있습니다.

래퍼 필터는 디바이스의 기능을 나타내는 COM 인터페이스를 노출합니다. 애플리케이션은 이러한 인터페이스를 사용하여 필터와 정보를 전달합니다. 필터는 COM 메서드 호출을 디바이스 드라이버 호출로 변환하고, 해당 정보를 커널 모드로 드라이버에 전달한 다음, 결과를 애플리케이션으로 다시 변환합니다. TV 튜너, TV 오디오, 아날로그 비디오 크로스바 및 KsProxy 필터는 IKsPropertySet 인터페이스를 통해 사용자 지정 드라이버 속성을 지원합니다. VFW 캡처 필터 및 오디오 캡처 필터는 이러한 방식으로 확장할 수 없습니다.

애플리케이션 개발자의 경우 래퍼 필터를 사용하면 애플리케이션이 다른 DirectShow 필터를 제어하는 것처럼 디바이스를 제어할 수 있습니다. 특별한 프로그래밍이 필요하지 않습니다. 커널 모드 디바이스와 통신하는 세부 정보는 필터 내에 캡슐화됩니다.

Windows 디바이스용 비디오

VFW 캡처 필터는 이전 VfW(Windows용 비디오) 캡처 카드를 지원합니다. 대상 시스템에 VfW 카드 있으면 DirectShow 시스템 디바이스 열거자를 사용하여 검색하여 필터 그래프에 추가할 수 있습니다. 자세한 내용은 디바이스 및 필터 열거를 참조하세요.

오디오 캡처 및 믹싱 디바이스(사운드 카드)

최신 사운드 카드에는 마이크 및 기타 유형의 장치에 대한 입력 잭이 있습니다. 일반적으로 이러한 카드에는 각 개별 입력의 볼륨, 고음 및 저음을 제어하기 위한 온보드 혼합 기능도 있습니다. DirectShow에서 사운드 카드 입력 및 믹서는 오디오 캡처 필터에 의해 래핑됩니다. 각 사운드 카드 시스템 디바이스 열거자를 사용하여 검색할 수 있습니다. 시스템에서 사운드 카드를 보려면 GraphEdit를 실행하고 오디오 캡처 원본 범주에서 선택합니다. 해당 범주의 각 필터는 오디오 캡처 필터의 별도 instance. ( GraphEdit 사용을 참조하세요.)

WDM 스트리밍 디바이스

최신 하드웨어 디코더 및 캡처 카드는 WDM(Windows 드라이버 모델) 사양을 준수합니다. 이러한 디바이스는 VfW 디바이스보다 더 큰 기능을 갖습니다. WDM 비디오 캡처 카드는 캡처 형식 열거, 색조 및 밝기와 같은 비디오 매개 변수의 프로그래밍 방식 제어, 프로그래밍 방식 입력 선택 및 TV 튜너 지원을 포함하여 VfW에서 사용할 수 없는 기능을 지원할 수 있습니다.

WDM 스트리밍 디바이스를 지원하기 위해 DirectShow는 KsProxy 필터(ksproxy.ax)를 제공합니다. KsProxy는 너무 많은 다른 일을하기 때문에 "스위스 육군 칼 필터"라고합니다. 필터의 핀 수와 필터에서 노출되는 COM 인터페이스 수는 기본 드라이버의 기능에 따라 달라집니다. KsProxy는 "KsProxy"라는 이름의 필터 그래프에 표시되지 않습니다. 항상 레지스트리에 있는 디바이스의 이름을 사용합니다. 시스템에서 WDM 디바이스를 보려면 GraphEdit를 실행하고 WDM 스트리밍 범주에서 선택합니다. 시스템에 WDM 카드 하나만 있는 경우에도 해당 카드 둘 이상의 디바이스를 포함할 수 있습니다. 각 디바이스는 별도의 필터로 표시되며 이러한 각 필터는 실제로 KsProxy입니다.

애플리케이션은 시스템 디바이스 열거자를 사용하여 시스템에서 WDM 디바이스 모니커를 찾습니다. KsProxy는 모니커에서 BindToObject 를 호출하여 인스턴스화됩니다. KsProxy는 모든 종류의 WDM 디바이스를 나타낼 수 있으므로 드라이버를 쿼리하여 드라이버가 지원하는 속성 집합을 결정해야 합니다. 속성 집합은 WDM 드라이버 및 MPEG-2 소프트웨어 디코더와 같은 일부 사용자 모드 필터에서 사용하는 데이터 구조의 컬렉션입니다. KsProxy는 해당 속성 집합에 해당하는 COM 인터페이스를 노출하도록 자체 구성합니다. KsProxy는 COM 메서드 호출을 속성 집합으로 변환하고 드라이버에 보냅니다. 하드웨어 공급업체는 디바이스의 특수 기능을 노출하는 공급업체별 인터페이스인 플러그 인을 제공하여 KsProxy를 확장할 수 있습니다. 이러한 모든 세부 정보는 애플리케이션에서 숨겨집니다. 애플리케이션은 다른 DirectShow 필터와 동일한 방식으로 KsProxy를 통해 디바이스를 제어합니다.

커널 스트리밍

WDM 디바이스는 커널 스트리밍을 지원합니다. 이 경우 데이터는 사용자 모드로 전환하지 않고 커널 모드로 완전히 스트리밍됩니다. 커널 모드와 사용자 모드 간 전환은 계산 비용이 많이 듭니다. 커널 스트리밍을 사용하면 호스트 CPU에 부담을 주지 않고 높은 비트 전송률을 허용합니다. WDM 기반 필터는 커널 스트리밍을 사용하여 시스템의 기본 메모리에 데이터를 복사하지 않고도 동일한 카드 또는 다른 카드 한 하드웨어 디바이스에서 다른 하드웨어 디바이스로 직접 멀티미디어 데이터를 전달할 수 있습니다.

애플리케이션의 관점에서 데이터가 한 사용자 모드 필터에서 다음 필터로 이동하는 것처럼 표시됩니다. 실제로 데이터는 사용자 모드로 전혀 전달되지 않을 수 있지만, 대신 비디오 그래픽 카드 렌더링될 때까지 커널 모드 디바이스에서 다른 커널 모드 디바이스로 직접 스트리밍될 수 있습니다. 파일에 대한 캡처와 같은 일부 시나리오에서는 데이터가 특정 시점에 커널 모드에서 사용자 모드로 전달되어야 합니다. 그러나 이 스위치가 반드시 데이터를 메모리의 새 위치에 복사할 필요는 없습니다.

애플리케이션 개발자는 일반적으로 백그라운드 정보를 제외하고 커널 스트리밍의 세부 정보에 관심을 둘 필요가 없습니다. WDM, 커널 스트리밍, KsProxy 및 관련 topics 대한 자세한 내용은 Microsoft DDK를 참조하세요.

필터 그래프 및 해당 구성 요소