Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows 7'de Media Foundation, DirectSound ve Wave API'leri gibi Temel Ses API'lerini kullanan üst düzey platform API'leri, mevcut bir cihazdan yeni bir varsayılan ses uç noktasına akış geçişini işleyerek akış yönlendirme özelliğini uygular. Bu API'leri kullanan medya uygulamaları, kaynakta herhangi bir değişiklik yapmadan akış yönlendirme davranışını kullanır. Doğrudan WASAPI istemcileri Core Audio bileşenleri tarafından gönderilen bildirimleri kullanabilir ve akış yönlendirme özelliğini uygulayabilir.
Doğrudan WASAPI istemcileri (doğrudan WASAPI kullanan medya uygulamaları), Çekirdek Ses bileşenleri tarafından gönderilen yeni cihaz ve ses oturumu bildirimlerini alır. Akış yönlendirme özelliğinin davranışı, uygulamanın bu bildirimleri nasıl işlediğine göre tanımlanır.
MMDevice API'si ve ses oturumu, wasAPI istemcilerine geri çağırmalar biçiminde cihaz durumu değişiklikleri ve oturum değişiklikleri hakkında bildirimler gönderir. Bu bildirimleri almak için istemcinin IMMNotificationClient ve IAudioSessionEventsuygulamasını kaydetmesi gerekir. Daha fazla bilgi için bkz. akış yönlendirme içinİlgili Bildirimler.
Stream Routing'da açıklanan USB mikrofonlu kulaklık senaryosunda, bir uygulama ses akışı yürütüyor ve akışı varsayılan işleme cihazında işlemek için MMDeviceAPI ve WASAPI kullanıyor Konuşmacı. Varsayılan cihaz değiştirildiğinde, uygulama bir IMMNotificationClient bildirimi alır. Uygulama ayrıca kullanıcının ses uç noktası cihazını kaldırdığını veya ses oturumunun bağlı olduğu cihaz için akış biçiminin değiştiğini belirten IAudioSessionEvents bildirim alır. Uygulama, bildirimleri aldıktan sonra konuşmacı uç noktasına akışı durdurur ve geçerli varsayılan uç nokta olan kulaklıkta işleme için akışı yeniden açar.
Cihaz bildirimleri için veri akışının diyagramını 
Bu tür bildirimlere yanıt olarak istemci, yeni varsayılan cihazdaki akışı kullanıcı tarafından seçilen yeni biçimde yeniden açabilirsiniz.
Akış Yönetimi
Aşağıdaki listede bir WASAPI istemcisinin akış değiştirme işlevini sağlamak için gerçekleştirmesi gereken adımlar özetlemektedir.
İlgili IMMNotificationClient bildirimini bekleyin. Cihaz varsayılan cihazsa, IMMNotificationClient::OnDefaultDeviceChanged bildirimi alınır.
Yeni bir cihaz varsa, yeni cihazın uç noktasına bir başvuru alın. Yeni varsayılan cihaz için IMMDeviceEnumerator::GetDefaultAudioEndpointçağırın. Yeni cihaz varsayılan cihaz değilse, IMMDeviceEnumerator::GetDeviceçağrısı yaparak cihazı alabilirsiniz. Daha fazla bilgi için bkz. Akış Yönlendirmesi için Cihaz Uç Noktasını Alma .
Neden değeriyle IAudioSessionEvents::OnSessionDisconnected bekleyin.
Not
Bu işlemlerin tümü akron olduğundan, uygulamanın cihaz değişikliği ve oturum bağlantısı kesme bildirimlerini alma sırası tahmin edilemez. Uygulamanın bu bildirimleri herhangi bir sırada almak için bildirim işleme uygulaması gerekir. Ancak, uygulama genellikle varsayılan cihaz değişikliği bildiriminden önce AudioSessionDisconnect değerini alır.
Neden değerini değerlendirin ve akışın başka bir ses uç noktasına aktarılması mı yoksa akışın yeni bir biçimle yeniden başlatılması mı gerektiğini belirleyin.
Nedeni akışın yeni varsayılan cihaza yeniden yönlendirilmesi gerektiğini gösteriyorsa, eski varsayılan cihaza akışı durdurun.
Konum eşleme hesaplamaları gerçekleştirin.
Yeni cihazda akışı açın ve tüm durum bilgilerini aktarın.
Yeni varsayılan cihazda akışı sürdür.
Eski varsayılan cihazın kalkışını işleyebilir.
Akış değiştirme işleminin sorunsuz görünmesi için mümkün olan en kısa sürede yapılması gerekir. Bu, akışın yeni cihazda yeniden başlatılmasında yer alan bileşenlerin performansına bağlıdır.
Konum Eşlemesi Ile İlgili Dikkat Edilmesi Gerekenler
Uygulama IMMNotificationClientve IAudioSessionEventsbildirimlerialdığında, mevcut akışları yeni varsayılan cihaza yönlendirebilir. Mevcut bir ses akışı kesildiğinde ve yeni cihazda açıldığında, yeni cihazda işleme eski cihazda akışın durdurulduğu konumda başlamalıdır. Bunu yapmak için uygulamanın, yeni cihazdaki başlangıç konumunu hesaplamak için bilinen son cihaz konumuna sahip olması gerekir. Örneğin, bu konum sonraki konum eşlemesi için delta uzaklığı olarak kullanılabilir. Akış işlemeye başladığında, yeni cihaz konumu önbelleğe alınan cihaz konumuna yeniden eşlenebilir.
Aşağıdaki adımlarda sorunsuz bir akış geçişi yapma işlemi özetlenmiştir.
- Akışın son cihaz konumunu eski cihazda önbelleğe alın.
- Eski cihazda akışı durdurun.
- Yeni konumu elde etmek için yeniden eşleme hesaplamaları yapın.
- Akışı yeni cihazda işlemeye başlayın.
- Eski akışı serbest bırakın.
Geçiş sırasında, uygulamanın saatin eşitlemeden çıkmadığından emin olması gerekir ve bu da eşitlenmemiş ses ve video akışlarına neden olur. Ses akışı yeni cihaza yönlendirilirken video örnekleri işlemeye devam ederse bu durum oluşabilir. Uygulama, yeniden eşleme hesaplaması için saat konumunu önbelleğe almalıdır ve klip işlemeye devam ettiğinde ses ve video akışlarının eşitlenmesi için ses akışı yeni cihazda yeniden açılana kadar video örneklerinin işlenmediğinden emin olmalıdır. Video karelerinin işlenmesi için sunum süresinin ses saatini temel aldığı bazı durumlarda, akış geçişi tamamlanana kadar ses akışını durdurmak yeterlidir ve ses video eşitlemesi için video akışı için başka bir konum eşleme uygulaması gerekmez.
İşleme sırasında IAudioRenderClient::GetBuffereski cihaz kaybolduğundan bir hata döndürürse, akış işlemi zaten sonlandırıldığı için uygulamanın eski akışı durdurması gerekmez. Bu hatayı işleme hakkında bilgi için bkz. Invalid-Device Hatasından Kurtarma.
İlgili konular