Kit SDK de diffusion IVS : Modes audio mobiles | Diffusion en temps réel - Amazon IVS

Kit SDK de diffusion IVS : Modes audio mobiles | Diffusion en temps réel

La qualité audio est un élément important de toute expérience multimédia en équipe réelle. Il n’existe pas de configuration audio universelle adaptée à tous les cas d’utilisation. Pour garantir à vos utilisateurs la meilleure expérience possible lorsqu’ils écoutent un flux IVS en temps réel, nos SDK mobiles offrent plusieurs configurations audio prédéfinies, ainsi que des personnalisations plus puissantes selon les besoins.

Introduction

Les SDK de diffusion mobile IVS fournissent une classe StageAudioManager. Cette classe est conçue pour être le point de contact unique qui permet de contrôler les modes audio sous-jacents sur les deux plateformes. Sur Android, elle contrôle l’AudioManager, notamment le mode audio, la source audio, le type de contenu, l’utilisation et les appareils de communication. Sur iOS, elle contrôle l’application AVAudioSession et détermine si voiceProcessing est activé.

Important : N’interagissez pas avec AVAudioSession ou AudioManager directement à l’aide du SDK de diffusion en temps réel IVS ou pendant qu’il est actif. Cela pourrait entraîner des pertes de son, ou ce dernier pourrait être enregistré ou lu sur le mauvais appareil.

Avant de créer votre premier DeviceDiscovery ou votre premier objet Stage, vous devez configurer la classe StageAudioManager.

Android (Kotlin)
StageAudioManager.getInstance(context).setPreset(StageAudioManager.UseCasePreset.VIDEO_CHAT) // The default value val deviceDiscovery = DeviceDiscovery(context) val stage = Stage(context, token, this) // Other Stage implementation code
iOS (Swift)
IVSStageAudioManager.sharedInstance().setPreset(.videoChat) // The default value let deviceDiscovery = IVSDeviceDiscovery() let stage = try? IVSStage(token: token, strategy: self) // Other Stage implementation code

Si rien n’est défini sur StageAudioManager avant l’initialisation d’une instance DeviceDiscovery ou Stage, le préréglage VideoChat s’applique automatiquement.

Préréglages de mode audio

Le SDK de diffusion en temps réel fournit trois préréglages, chacun est adapté aux cas d’utilisation courants, comme décrit ci-dessous. Pour chaque préréglage, nous traitons cinq catégories clés qui différencient les préréglages les uns des autres.

La catégorie Variateur de volume se réfère au type de volume (volume multimédia ou volume d’appel) qui est utilisé ou modifié via les boutons de volume physiques de l’appareil. À noter que cela affecte le volume lors du changement de mode audio. Par exemple, si le volume de l’appareil est réglé au maximum en utilisant le préréglage Chat vidéo. le passage au préréglage Abonnement seul entraîne un niveau de volume différent de celui du système d’exploitation, ce qui peut entraîner un changement de volume important sur l’appareil.

Chat vidéo

Il s’agit du préréglage par défaut. Il permet à l’appareil local d’avoir une conversation en temps réel avec les autres participants.

Problème connu sur iOS : si vous utilisez ce préréglage sans connecter de microphone, le son passe par l’écouteur plutôt que par le haut-parleur de l’appareil. Utilisez ce préréglage uniquement en combinaison avec un microphone.

Catégorie Android iOS
Annulation de l’écho

Activées

Activées

Variateur de volume

Volume d’appel

Volume d’appel

Sélection du microphone

Limité en fonction du système d’exploitation. Les microphones USB peuvent ne pas être disponibles.

Limité en fonction du système d’exploitation. Les microphones USB et Bluetooth peuvent ne pas être disponibles.

Les casques Bluetooth qui gèrent à la fois les entrées et les sorties devraient fonctionner, comme les AirPods.

Sortie audio

Tout périphérique de sortie devrait fonctionner.

Limité en fonction du système d’exploitation. Les casques filaires peuvent ne pas être disponibles.

Qualité audio

Moyenne/basse. Cela ressemblera à un appel téléphonique, et non à une lecture multimédia.

Moyenne/basse. Cela ressemblera à un appel téléphonique, et non à une lecture multimédia.

S’abonner uniquement

Ce préréglage est conçu pour que vous puissiez prévoir de vous abonner à d’autres participants à la diffusion, mais que vous ne diffusez pas vous-même. Il privilégie la qualité audio et prend en charge tous les périphériques de sortie disponibles.

Catégorie Android iOS
Annulation de l’écho

Désactivées

Désactivées

Variateur de volume

Volume multimédia

Volume multimédia

Sélection du microphone

N/A, ce préréglage n’est pas conçu pour la diffusion.

N/A, ce préréglage n’est pas conçu pour la diffusion.

Sortie audio

Tout périphérique de sortie devrait fonctionner.

Tout périphérique de sortie devrait fonctionner.

Qualité audio

Élevée. Tout type de média doit apparaître clairement, y compris la musique.

Élevée. Tout type de média doit apparaître clairement, y compris la musique.

Studio

Ce préréglage est conçu pour fournir un abonnement de haute qualité tout en conservant la possibilité de diffuser. Le matériel d’enregistrement et de lecture doit assurer l’annulation de l’écho. Ici, un cas d’utilisation serait de se servir d’un microphone USB et d’un casque filaire. Le SDK conservera un son de la plus haute qualité tout en s’appuyant sur la séparation physique de ces appareils pour éviter qu’ils ne génèrent de l’écho.

Catégorie Android iOS
Annulation de l’écho

L’annulation de l’écho de la plateforme est désactivée, mais l’annulation de l’écho du logiciel peut toujours se produire si StageAudioConfiguration.enableEchoCancellation a la valeur true.

Désactivées

Variateur de volume

Volume multimédia dans la plupart des cas. Volume des appels lorsqu’un microphone Bluetooth est connecté.

Volume multimédia

Sélection du microphone

N’importe quel microphone devrait fonctionner.

N’importe quel microphone devrait fonctionner.

Sortie audio

Tout périphérique de sortie devrait fonctionner.

Tout périphérique de sortie devrait fonctionner.

Qualité audio

Élevée. Les deux parties doivent être en mesure d’envoyer de la musique et de l’entendre clairement de l’autre extrémité.

Lorsqu’un casque Bluetooth est connecté, la qualité audio baisse en raison de l’activation du mode Bluetooth SCO.

Élevée. Les deux parties doivent être en mesure d’envoyer de la musique et de l’entendre clairement de l’autre extrémité.

Lorsqu’un casque Bluetooth est connecté, la qualité audio peut baisser en raison de l’activation du mode Bluetooth SCO, en fonction du casque.

Cas d’utilisation avancés

Outre les préréglages, les SDK de diffusion en temps réel iOS et Android permettent de configurer les modes audio de la plateforme sous-jacente :

Remarque : lors de l’utilisation de ces méthodes audio du kit SDK, il est possible de mal configurer la session audio sous-jacente. Par exemple, utiliser l’option .allowBluetooth sur iOS en combinaison avec la catégorie .playback crée une configuration audio invalide, empêchant le kit SDK d’enregistrer ou de lire de l’audio. Ces méthodes doivent être utilisées uniquement lorsqu’une application a des exigences spécifiques pour la session audio qui ont été validées.

Android (Kotlin)
// This would act similar to the Subscribe Only preset, but it uses a different ContentType. StageAudioManager.getInstance(context) .setConfiguration(StageAudioManager.Source.GENERIC, StageAudioManager.ContentType.MOVIE, StageAudioManager.Usage.MEDIA); val stage = Stage(context, token, this) // Other Stage implementation code
iOS (Swift)
// This would act similar to the Subscribe Only preset, but it uses a different mode and options. IVSStageAudioManager.sharedInstance() .setCategory(.playback, options: [.duckOthers, .mixWithOthers], mode: .default) let stage = try? IVSStage(token: token, strategy: self) // Other Stage implementation code

Annulation de l’écho sur iOS

L’annulation de l’écho sur iOS peut être contrôlée indépendamment via IVSStageAudioManager ainsi que par sa méthode echoCancellationEnabled. Cette méthode permet de contrôler si le traitement vocal est activé sur les nœuds d’entrée et de sortie de AVAudioEngine utilisés par le kit SDK. Il est important de bien comprendre l’effet de la modification manuelle de cette propriété :

  • La propriété AVAudioEngine est prise en compte uniquement si le microphone du kit SDK est actif ; cela est nécessaire, car iOS exige que le traitement vocal soit activé à la fois sur les nœuds d’entrée et de sortie simultanément. En général, cela se fait en utilisant le microphone retourné par IVSDeviceDiscovery pour créer un IVSLocalStageStream à publier. Alternativement, le microphone peut être activé sans être utilisé pour publier, en lui associant un IVSAudioDeviceStatsCallback. Cette approche alternative est utile si une annulation d’écho est nécessaire lors de l’utilisation d’une source audio personnalisée basée sur un microphone, au lieu du microphone du kit SDK IVS.

  • L’activation de la propriété AVAudioEngine nécessite un mode .videoChat ou .voiceChat. Demander un mode différent perturbe le cadre audio sous-jacent d’iOS, ce qui peut entraîner une perte audio.

  • L’activation de AVAudioEngine active automatiquement l’option .allowBluetooth .

Les comportements peuvent varier selon l’appareil et la version d’iOS.

Sources audio personnalisées pour iOS

Des sources audio personnalisées peuvent être utilisées avec le kit SDK en utilisant IVSDeviceDiscovery.createAudioSource. Lors de la connexion à une scène, le kit SDK de diffusion en temps réel IVS gère toujours une instance AVAudioEngine interne pour la lecture audio, même si le microphone du kit SDK n’est pas utilisé. En conséquence, les valeurs fournies à IVSStageAudioManager doivent être compatibles avec l’audio provenant de la source audio personnalisée.

Si la source audio personnalisée utilisée pour diffuser enregistre à partir du microphone, mais est gérée par l’application hôte, l’annulation d’écho du kit SDK ci-dessus ne fonctionnera pas, sauf si le microphone géré par le kit SDK est activé. Pour contourner cette exigence, consultez la section Annulation de l’écho sur iOS.

Diffusion via Bluetooth sur Android

Sur Android, le SDK revient automatiquement au préréglage VIDEO_CHAT lorsque les conditions suivantes sont remplies :

  • La configuration attribuée n’utilise pas la valeur d’utilisation VOICE_COMMUNICATION.

  • Un microphone Bluetooth est connecté à l’appareil.

  • Le participant local diffuse sur une scène.

Il s’agit d’une limitation du système d’exploitation Android en ce qui concerne la manière dont les casques Bluetooth sont utilisés pour l’enregistrement audio.

Intégration avec d’autres SDK

Comme iOS et Android ne prennent en charge qu’un seul mode audio actif par application, des conflits peuvent survenir si votre application utilise plusieurs SDK qui nécessitent le contrôle du mode audio. Lorsque vous êtes confronté à de tels conflits, il existe des stratégies de résolution courantes à essayer ; elles sont expliquées ci-dessous.

Faites correspondre les valeurs du mode audio

À l’aide des options de configuration audio avancées du SDK IVS ou des fonctionnalités de l’autre SDK, faites en sorte que les deux SDK s’alignent sur les valeurs sous-jacentes.

Agora

iOS

Sur iOS, le fait de demander au SDK Agora de garder la AVAudioSession active l’empêchera de se désactiver pendant que le SDK de diffusion en temps réel IVS l’utilise.

myRtcEngine.SetParameters("{\"che.audio.keep.audiosession\":true}");

Android

Évitez d’appeler setEnableSpeakerphone sur RtcEngine ; appelez enableLocalAudio(false) pendant la diffusion grâce au SDK de diffusion en temps réel IVS. Vous pouvez appeler enableLocalAudio(true) à nouveau lorsque le SDK IVS ne diffuse pas.