Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans Windows 7, les API de plateforme générale qui utilisent des API audio principales, telles que Media Foundation, DirectSound et Wave, implémentent la fonctionnalité de routage de flux en gérant le passage de flux d’un appareil existant à un nouveau point de terminaison audio par défaut. Les applications multimédias qui utilisent ces API utilisent le comportement de routage de flux sans aucune modification de la source. Les clients WASAPI directs peuvent utiliser les notifications envoyées par les composants Audio core et implémenter la fonctionnalité de routage de flux.
Les clients WASAPI directs (applications multimédias qui utilisent WASAPI directement) reçoivent de nouvelles notifications d’appareil et de session audio envoyées par les composants Audio core. Le comportement de la fonctionnalité de routage de flux est défini par la façon dont l’application gère ces notifications.
L’API MMDevice et la session audio envoient des notifications sur les modifications d’état de l’appareil et les modifications de session aux clients WASAPI sous la forme de rappels. Pour obtenir ces notifications, le client doit inscrire son implémentation de IMMNotificationClient et IAudioSessionEvents. Pour plus d’informations, consultez Notifications pertinentes pour le routage de flux.
Dans le scénario de casque USB décrit dans de routage de flux, une application joue un flux audio et utilise MMDeviceAPI et WASAPI pour afficher le flux sur l’appareil de rendu par défaut, Haut-parleur. Lorsque l’appareil par défaut est modifié, l’application reçoit une notification IMMNotificationClient. L’application reçoit également IAudioSessionEvents notifications indiquant que l’utilisateur a supprimé l’appareil de point de terminaison audio ou que le format de flux a changé pour l’appareil auquel la session audio est connectée. Lors de la réception des notifications, l’application arrête la diffusion en continu vers le point de terminaison de l’orateur et rouvert le flux pour le rendu sur le point de terminaison par défaut actuel, le casque.
En réponse à ces notifications, le client peut rouvrir le flux sur le nouvel appareil par défaut dans le nouveau format sélectionné par l’utilisateur.
Stream Managment
La liste suivante récapitule les étapes que doit effectuer un client WASAPI pour fournir la fonctionnalité de basculement de flux.
Attendez la notificationIMMNotificationClient appropriée. Si l’appareil est l’appareil par défaut, la notification IMMNotificationClient ::OnDefaultDeviceChanged est reçue.
Si un nouvel appareil est disponible, obtenez une référence au point de terminaison du nouvel appareil. Appelez IMMDeviceEnumerator ::GetDefaultAudioEndpoint pour le nouvel appareil par défaut. Si le nouvel appareil n’est pas l’appareil par défaut, vous pouvez récupérer l’appareil en appelant IMMDeviceEnumerator ::GetDevice. Pour plus d’informations, consultez Obtention du point de terminaison d’appareil pour le routage de flux.
Attendez que le IAudioSessionEvents ::OnSessionDisconnected avec la valeur de raison.
Note
Étant donné que toutes ces opérations sont asychronous, l’ordre dans lequel l’application reçoit les notifications de modification d’appareil et de déconnexion de session ne peut pas être prédite. L’application doit implémenter la gestion des notifications pour recevoir ces notifications dans n’importe quel ordre. Toutefois, en règle générale, l’application reçoit audioSessionDisconnect valeur avant la notification de modification d’appareil par défaut.
Évaluez la valeur de la raison et déterminez si le flux doit être transféré vers un autre point de terminaison audio ou si le flux doit être réinitialisé avec un nouveau format.
Arrêtez la diffusion en continu vers l’ancien appareil par défaut si la raison indique que le flux doit être routé à nouveau vers le nouvel appareil par défaut.
Effectuez des calculs de mappage de position.
Ouvrez le flux sur le nouvel appareil et transférez toutes les informations d’état.
Reprendre la diffusion en continu sur le nouvel appareil par défaut.
Gérez le départ de l’ancien appareil par défaut.
Pour rendre l’opération de basculement de flux transparente, elle doit être effectuée le plus rapidement possible. Cela dépend des performances des composants impliqués dans le re-lancement du flux sur le nouvel appareil.
Considérations relatives au mappage de position
Lorsque l’application obtient IMMNotificationClient et notifications IAudioSessionEvents, elle peut acheminer les flux existants vers le nouvel appareil par défaut. Lorsqu’un flux audio existant est interrompu et ouvert sur le nouvel appareil, le rendu sur le nouvel appareil doit commencer à la position à laquelle le flux a été arrêté sur l’ancien appareil. Pour ce faire, l’application doit avoir la dernière position d’appareil connue pour calculer la position de démarrage sur le nouvel appareil. Par exemple, cette position peut être utilisée comme décalage delta pour le mappage de position suivant. Lorsque le flux démarre le rendu, la nouvelle position de l’appareil peut être remappée à la position de l’appareil mise en cache.
Les étapes suivantes résument le processus de transition de flux fluide.
- Cachez la dernière position de l’appareil du flux sur l’ancien appareil.
- Arrêtez le flux sur l’ancien appareil.
- Effectuez des calculs de remapping pour obtenir la nouvelle position.
- Démarrez le rendu du flux sur le nouvel appareil.
- Relâchez l’ancien flux.
Pendant la transition, l’application doit s’assurer que l’horloge n’est pas synchronisée, ce qui entraîne une synchronisation audio et vidéo hors synchronisation. Cela peut se produire si les exemples vidéo continuent de s’afficher pendant que le flux audio est acheminé vers le nouvel appareil. L’application doit mettre en cache la position de l’horloge pour le calcul de remapping et s’assurer que les exemples vidéo ne sont pas rendus tant que le flux audio n’est pas rouvert sur le nouvel appareil, de sorte que lorsque le clip reprend le rendu, l’audio et les flux vidéo sont synchronisés. Dans certains cas, lorsque l’heure de présentation pour le rendu des images vidéo est basée sur l’horloge audio, il suffit d’arrêter le flux audio jusqu’à ce que le changement de flux soit terminé et qu’aucune autre implémentation de mappage de position pour le flux vidéo n’est nécessaire pour la synchronisation vidéo audio.
Si lors du rendu, IAudioRenderClient ::GetBuffer retourne une erreur car l’ancien appareil est perdu, l’application n’a pas besoin d’arrêter l’ancien flux, car l’opération de diffusion en continu s’est déjà terminée. Pour plus d’informations sur la gestion de cette erreur, consultez récupération à partir d’une Invalid-Device Erreur.
Rubriques connexes