스트림 라우팅에 대한 관련 알림

Windows 7에서는 Media Foundation, DirectSound 및 Wave API와 같은 핵심 오디오 API를 사용하는 고급 플랫폼 API가 기존 디바이스에서 새 기본 오디오 엔드포인트로 스트림 전환을 처리하여 스트림 라우팅 기능을 구현합니다. 이러한 API를 사용하는 미디어 애플리케이션은 원본을 수정하지 않고 스트림 라우팅 동작을 사용합니다. 직접 WASAPI 클라이언트는 핵심 오디오 구성 요소에서 보낸 알림을 사용하고 스트림 라우팅 기능을 구현할 수 있습니다.

스트림 라우팅 기능을 구현하려면 클라이언트가 디바이스 변경 알림 및 세션 연결 끊기 알림의 두 가지 유형의 이벤트를 수신 대기해야 합니다. 상위 수준 API에서 제공하는 구현에서 이러한 이벤트는 IMMDeviceEnumerator::GetDefaultAudioEndpoint를 호출하여 만든 기본 디바이스 엔드포인트에 대해 전송됩니다. 자세한 내용은 스트림 라우팅을 위한 디바이스 엔드포인트 가져오기를 참조하세요.

핵심 오디오 구성 요소 MMDeviceAPI는 오디오 디바이스가 추가, 제거 또는 수정될 때 알림 콜백을 제공합니다. 형식 및 오디오 세션 변경 내용은 WASAPI를 통해 이벤트로 보고됩니다.

디바이스 변경 알림

MMDeviceAPI는 오디오 디바이스가 추가, 제거 또는 수정될 때 이벤트를 발생합니다. 클라이언트가 스트림 라우팅 기능을 제공하는 경우 IMMNotificationClient 인터페이스를 구현하고 MMDeviceAPI에 해당 구현을 등록해야 합니다.

디바이스 변경 알림을 받으려면 클라이언트가 다음 작업을 수행해야 합니다.

이러한 인터페이스의 클라이언트 구현이 등록되면 클라이언트는 이러한 인터페이스의 메서드를 통해 콜백 형식으로 알림을 받습니다. IMMNotificationClient 메서드는 엔드포인트 수준 이벤트(엔드포인트 상태 변경, 새 엔드포인트 도착, 엔드포인트 삭제, 기본 엔드포인트 변경 및 엔드포인트 속성 변경)를 발생시킬 때 MMDeviceAPI에서 호출됩니다.

클라이언트가 기본 디바이스에 대한 스트림 라우팅을 제공하려는 경우 클라이언트는 IMMNotificationClient::OnDefaultDeviceChanged 콜백을 통해 알림을 받을 때 디바이스 변경 동작을 구현해야 합니다.

오디오 세션 변경 알림

오디오 세션 변경 및 형식 변경 내용은 WASAPI를 통해 오디오 세션 이벤트로 보고됩니다. WASAPI 클라이언트는 IAudioSessionEvents 인터페이스를 구현하고 WASAPI에 구현을 등록합니다.

오디오 세션 변경 알림을 받으려면 클라이언트에서 다음 작업을 수행해야 합니다.

오디오 세션 변경이 발생할 때 WASAPI에서 IAudioSessionEvents 메서드를 호출합니다. 이러한 이벤트는 세션의 표시 이름, 아이콘 경로, 볼륨, 그룹화 매개 변수 또는 상태가 변경될 때 발생합니다.

스트림 라우팅 기능을 구현하려면 클라이언트가 세션 연결 끊기 알림을 기다려야 합니다. 오디오 세션의 연결이 끊어지거나 디바이스 형식이 변경되면 WASAPI는 IAudioSessionEvents::OnSessionDisconnected를 통해 콜백 형태로 클라이언트 알림을 보냅니다. 연결 끊김 알림을 통해 WASAPI는 세션 연결이 끊어진 이유를 나타내는 값도 보냅니다. 이 문제는 디바이스가 제거되고 서버가 중지되는 등 여러 가지 이유로 발생할 수 있습니다. 이유의 전체 목록은 AudioPolicy.h에 정의된 AudioSessionDisconnectReason 열거형을 참조하세요. 기본 디바이스가 변경되면 클라이언트는 DisconnectReasonDeviceRemoval 값과 함께 제공되는 알림(아직 수신되지 않은 경우)을 기다려야 합니다. 이러한 알림에 대한 응답으로 클라이언트는 새 기본 디바이스에서 스트림을 다시 열 수 있습니다.

이러한 모든 작업은 비동기적이므로 애플리케이션이 알림을 받는 순서를 예측할 수 없습니다. 그러나 일반적으로 애플리케이션은 기본 디바이스 변경 알림 전에 AudioSessionDisconnect 값을 받습니다.

변경 알림 서식 지정

오디오 형식 변경은 스트림의 형식이 변경되면 발생합니다. 이는 사용자가 소리 제어판에서 새 형식을 선택하거나 새 기본 디바이스가 새 형식(예: 수동 샘플 속도 조정을 사용하는 HDMI 또는 특정 전문 오디오 인터페이스)을 지원하는 경우에 발생할 수 있습니다. 이러한 형식 변경 형식에 대해 클라이언트에 알리기 위해 WASAPI는 DisconnectReasonFormatChanged의 연결 끊김 이유로 IAudioSessionEvents::OnSessionDisconnected의 등록된 구현으로 세션 알림을 보냅니다. 클라이언트는 스트림을 새 형식으로 다시 열어 알림을 처리할 수 있습니다.

MMDevice API 정보

WASAPI 정보

스트림 라우팅