다음을 통해 공유


사용자 지정 오디오 엔드포인트 열거자 구현

Windows Server 2008 R2부터 원격 데스크톱 프로토콜 공급자의 일부로 사용자 지정 원격 오디오 엔드포인트 열거자를 구현할 수 있습니다. 원격 데스크톱 프로토콜 공급자는 사용자 지정 오디오 엔드포인트 열거자를 사용하여 특정 기능 집합이 있는 오디오 엔드포인트 컬렉션을 검색할 수 있습니다.

사용자 지정 원격 오디오 엔드포인트 열거자를 구현하려면

  1. 사용자 지정 엔드포인트 열거자 솔루션은 디바이스 열거자 개체, 디바이스 컬렉션 개체, 디바이스 개체 및 속성 저장소 개체의 네 가지 기본 형식을 구현해야 합니다.
개체 형식 설명
디바이스 열거자 개체
디바이스 열거자 개체는 엔드포인트 열거자 기능을 제공합니다. 기본 엔드포인트 및 지정된 엔드포인트 컬렉션을 반환하는 메서드를 노출합니다. 예를 들어 지정된 조건에 따라 열거자는 통신 엔드포인트, 재생 엔드포인트 또는 캡처 엔드포인트를 반환할 수 있습니다. 디바이스 열거자 개체는 IMMDeviceEnumerator 인터페이스를 구현해야 합니다.
디바이스 컬렉션 개체
디바이스 컬렉션 개체는 오디오 디바이스의 컬렉션을 나타냅니다. IMMDeviceCollection 인터페이스를 구현해야 합니다.
디바이스 개체
디바이스 개체는 특정 오디오 디바이스를 나타냅니다. 오디오 디바이스의 속성 저장소에 대한 액세스를 제공하고 디바이스에서 사용할 수 있는 오디오 재생 및 캡처 인터페이스를 노출합니다. 디바이스 개체는 IMMDeviceIMMEndpoint 인터페이스를 구현해야 합니다.
속성 저장소 개체
속성 저장소 개체는 오디오 디바이스와 연결된 속성을 노출합니다. 이러한 속성 중 일부는 시스템에서 사용되지만 애플리케이션은 오디오 엔드포인트와 함께 임의의 속성을 저장할 수도 있습니다.
모든 오디오 디바이스에는 다음과 같은 세 가지 속성이 있습니다.
속성 저장소 개체는 IPropertyStore 인터페이스를 구현해야 합니다.
  1. 사용자 지정 엔드포인트 열거자는 오디오 시스템 및 기타 애플리케이션에 로드할 수 있는 DLL에서 구현되어야 합니다. 보안 프로세스가 로드할 수 있도록 DLL에 서명해야 합니다. DLL은 사용자 지정 엔드포인트 열거자에 대한 진입점 역할을 하는 GetTSAudioEndpointEnumeratorForSession 함수를 구현하고 내보내야 합니다.

원격 데스크톱 서비스 서비스는 QueryProperty 메서드를 호출하고 QueryType 매개 변수를 WTS_QUERY_AUDIOENUM_DLL 설정하여 열거자 개체의 이름을 검색합니다.

사용자 지정 열거자 개체는 COM과 유사한 인터페이스 및 COM과 유사한 참조 계산 메커니즘을 사용하지만 실제 COM 개체는 아닙니다. 사용자 지정 엔드포인트 열거자는 COM을 지원하지 않는 애플리케이션에서 사용하는 레거시 오디오 인터페이스를 사용할 수 있어야 합니다. 이러한 이유로 사용자 지정 엔드포인트 열거자는 COM의 수명 주기 관리 메커니즘을 사용하지 않아야 합니다. MMDevAPI.dll 같은 오디오 엔드포인트 열거자의 소비자는 사용자 애플리케이션에 필요한 경우 사용자 지정 엔드포인트 열거자 DLL을 로드하고 열거자는 디바이스 열거자 개체, 디바이스 컬렉션 개체, 디바이스 개체 또는 속성 저장소 개체에 대한 참조를 보유하는 동안 열거자를 언로드하지 않습니다. 그러나 이러한 소비자가 사용자 지정 엔드포인트 열거자가 소유한 다른 유형의 개체에 대한 참조를 추적할 수 없습니다. 따라서 사용자 지정 엔드포인트 열거자는 이러한 네 가지 유형의 개체보다 오래 살 수 있는 개체를 만들지 않는 것이 좋습니다.

사용자 지정 오디오 엔드포인트를 구현하려면

사용자 지정 오디오 디바이스 열거자를 구현하려면 사용자 지정 오디오 엔드포인트를 구현해야 합니다. 사용자 지정 오디오 디바이스가 연결되는 방법은 다음 두 문을 사용하는 것입니다.

  • IMMDevice::Activate(IAudioOutputEndpointRT)
  • IMMDevice::Activate(IAudioInputEndpointRT)

사용자 지정 오디오 디바이스 열거자에서 IMMDevice::Activate 인터페이스의 전체 목록을 구현할 것으로 예상하지 않습니다. 대신 IAudioOutputEndpointRTIAudioInputEndpointRT를 구현해야 합니다. 필요에 따라 IAudioEndpointVolume과 같은 몇 가지 를 추가로 구현할 수 있습니다. 구현하지 않는 인터페이스의 경우 E_NOINTERFACE 반환해야 합니다(이 특정 오류 코드를 사용해야 함). 그러면 Windows는 인터페이스의 스톡 구현(예: IAudioClient2)으로 대체됩니다.

오디오 엔드포인트를 구현하고 등록하는 방법에 대한 추가 참조 설명서는 IAudioInputEndpointRT를 참조하세요. WASAPI의 작동 방식을 보여 주는 다이어그램은 사용자 모드 오디오 구성 요소를 참조하세요. 모든 사용자 모드 오디오는 Windows Server 2008부터 새로운 기능입니다.

원격 데스크톱 프로토콜 공급자 만들기

GetTSAudioEndpointEnumeratorForSession

IMMDevice

IMMDeviceCollection

IMMDeviceEnumerator

IMMEndpoint

IPropertyStore