스트림 라우팅

스트림 라우팅 은 미디어 애플리케이션이 재생 또는 캡처 세션에 대한 중단을 최소화하면서 디바이스 간에 스트림을 전환하는 기능입니다.

컴퓨터에는 여러 렌더링 및 캡처 디바이스가 있을 수 있습니다. 시스템은 소리 제어판에 이러한 디바이스를 나열합니다. 이 목록에서 사용자는 각 역할에 대한 기본 디바이스인 재생, 녹화 또는 네 가지 통신 역할(콘솔 렌더링, 콘솔 캡처, 통신 렌더링 또는 통신 캡처)으로 디바이스를 설정할 수 있습니다. 이러한 디바이스 중 일부를 일시적으로 사용할 수 있으므로(예: USB 헤드셋) 디바이스 목록을 동적으로 수정할 수 있습니다. 여러 디바이스를 사용할 수 있는 경우 사용자는 기본값을 다른 디바이스로 변경할 수 있습니다. 사용자는 디바이스 속성에 대한 고급 탭에서 디바이스의 형식(샘플 속도, 샘플당 비트 등)을 변경할 수도 있습니다.

사용자가 오디오 스트림을 렌더링하기 위한 기본 디바이스로 스피커 를 선택하는 시나리오를 고려합니다. 그런 다음 사용자는 USB 헤드셋을 연결하고, 헤드셋을 새 기본 장치로 선택하고, 디바이스의 샘플 속도를 44.1kHz에서 48kHz로 변경합니다. 사용자는 스트리밍 세션에 대한 중단을 최소화하면서 새 샘플 속도로 헤드셋의 오디오 스트림을 재생하려고 합니다.

이 시나리오에서는 미디어 애플리케이션이 처리해야 하는 두 가지 경우가 있습니다.

  • 재생을 중단하지 않은 상태에서 스트림을 새 기본 디바이스로 전송해야 합니다.
  • 새 디바이스는 새 형식으로 재생을 다시 시작해야 합니다(즉, 사용자가 샘플 속도보다 더 많이 변경할 수 있습니다).

Windows Vista에서 이 시나리오를 지원하기 위해 미디어 애플리케이션은 스트림 라우팅을 위한 구현을 제공해야 했습니다. 애플리케이션은 기존 스트림을 종료하고 새 디바이스에서 스트림을 다시 시작해야 했습니다. 사용자가 기본 디바이스를 변경했거나 혼합 형식이 변경된 경우 연결된 모든 세션이 닫혔고 애플리케이션이 복구를 처리해야 했습니다.

Windows 7에서 애플리케이션은 기존 기본 디바이스에서 새 기본 오디오 엔드포인트로 스트림을 원활하게 전송할 수 있습니다. Media Foundation, DirectSound 및 WAVE API와 같은 고급 오디오 API 집합은 스트림 라우팅 기능을 구현합니다. 이러한 API 집합을 사용하여 기본 디바이스에서 스트림을 재생하거나 캡처하는 미디어 애플리케이션은 기본 구현을 사용하며 애플리케이션을 수정할 필요가 없습니다. 그러나 미디어 애플리케이션이 MMDeviceAPI 또는 WASAPI를 직접 사용하는 경우 애플리케이션은 스트림 라우팅 구현을 제공해야 합니다.

참고

MMDeviceAPI 및 WASAPI는 애플리케이션이 디바이스에서 스트림을 렌더링하거나 캡처하는 데 사용할 수 있는 핵심 오디오 API 구성 요소입니다. MMDeviceAPI는 새 오디오 엔드포인트 디바이스를 검색하고 WASAPI는 미디어 애플리케이션과 오디오 엔드포인트 디바이스 간의 오디오 데이터 흐름을 관리합니다.

 

스트림 라우팅 기능을 구현하려면 다음과 같은 경우 애플리케이션이 MMDeviceAPI 및 WASAPI에서 보낸 알림을 수신 대기해야 합니다.

  • 사용자가 기본 디바이스를 변경합니다.
  • 기존 기본 디바이스가 제거되고 새 기본 디바이스가 추가됩니다.
  • 디바이스 형식이 변경되었습니다.

이러한 알림을 처리하면 애플리케이션이 스트림을 새 기본 디바이스로 전송하는 동안 필요한 스트림 관리 작업을 수행할 수 있습니다. 또한 애플리케이션은 렌더링 세션이 활성화된 동안 사용자가 지정한 새 형식을 사용하여 기존 스트림을 렌더링하거나 캡처할 수 있습니다.

이 섹션에서는 다음 항목을 다룹니다.

Windows SDK에 포함된 다음 샘플에서는 애플리케이션이 스트림 라우팅 알림을 처리하는 방법을 보여 줍니다.

스트림 관리

MMDevice API 정보

WASAPI 정보