Pilote audio personnalisé (iOS)
Vue d'ensemble
Le SDK OpenTok pour iOS vous permet de configurer un pilote audio personnalisé pour les éditeurs et les abonnés. Vous pouvez utiliser un pilote audio personnalisé pour personnaliser le flux audio des émetteurs et des abonnés. Vous utiliserez ce pilote audio personnalisé lorsque vous souhaiterez démarrer ou arrêter l'audio, ainsi que pour lire votre propre fichier audio. Chaque fois que vous souhaitez effectuer une opération quelconque sur l'audio, autre que le comportement par défaut du SDK pour le chat vidéo en direct, vous devrez utiliser des pilotes audio personnalisés.
Configuration de votre projet
Le code de cette section se trouve dans la section Sonneries dans l'échantillon dépôt « opentok-ios-sdk-samples ». Si ce n'est pas déjà fait, vous devrez cloner le dépôt dans un répertoire local — vous pouvez le faire à l'aide de la ligne de commande :
git clone https://github.com/opentok/opentok-ios-sdk-samples.git
Ouvrez le projet dans Xcode pour suivre les étapes
Découverte du code
Cette application d'exemple utilise le pilote audio personnalisé, défini par l'OTDefaultAudioDevice inclus dans le SDK OpenTok pour iOS. Ce pilote audio est utilisé à la fois par les émetteurs et les abonnés. Dans cette application, le flux de l'abonné est identique à celui de l'émetteur (il s'agit d'un flux auto-abonné). Nous commençons par publier, puis nous arrêtons la capture audio de l’émetteur, ce qui nous permet de lire une sonnerie exclusivement sur un AVAudioPlayer d’Apple. Lorsque l’abonné se connecte (10 secondes après la publication du flux par l’application), la lecture de la sonnerie s’arrête. Le pilote audio personnalisé reprend alors la capture et la restitution audio.
La classe `OTAudioDeviceRingtone` hérite de `OTDefaultAudioDevice`. La majeure partie du traitement audio de bas niveau est effectuée dans `OTDefaultAudioDevice`. Celle-ci utilise les Audio Units d'Apple pour traiter, enregistrer et lire des données audio. OTDefaultAudioDevice prend également en charge le Bluetooth, gère les changements d’itinéraire, etc. Ce tutoriel n’aborde pas ces fonctionnalités avancées ; il se contente de montrer une utilisation simple du protocole de cycle de vie OTAudioDevice pour démarrer et arrêter la lecture audio.
Si vous souhaitez effectuer des traitements audio liés à un appareil (iPhone), tels que l'activation de CallKit, la lecture de fichiers MP3, de sonneries ou le traitement de trames audio, etc., vous devez utiliser des pilotes audio personnalisés. Pour plus de détails, consultez le projet « Custom-Audio-Driver » dans le dépôt opentok-ios-sdk-samples.
Si vous souhaitez uniquement capturer, traiter et lire du son image par image, vous pouvez utiliser les transformateurs audio WebRTC, qui offrent une grande simplicité d'utilisation. Pour plus de détails, consultez le projet « Media-Transformers » dans le dépôt « opentok-ios-sdk-samples ».
Application de sonneries
Une sonnerie est un fichier audio externe lu à l’aide de l’API AVAudioPlayer d’Apple Audio. Le système audio de l’iPhone étant un objet singleton global, la lecture de la sonnerie sans interrompre notre flux audio entraîne un chevauchement des sons. L’application doit donc d’abord arrêter la capture de l’audio de l’éditeur, puis lire la sonnerie, avant de réactiver la capture et le rendu audio lorsqu’un abonné se connecte. Nous initialisons l’application Ringtone comme suit :
- (instancetype)initWithRingtone:(NSURL *)url {
self = [super init];
if (self) {
ringtoneURL = url;
}
return self;
}
La sonnerie (représentée sous forme d'URL) sera lue en boucle à l'aide des API AVAudioPlayer. Le code suivant illustre le déroulement des opérations d'arrêt, de lecture et de démarrage :
- (void)playRingtoneFromURL:(NSURL*)url
{
[self stopCapture];
[self stopRendering];
// Stop & replace existing audio player
if (_audioPlayer) {
[_audioPlayer stop];
_audioPlayer = nil;
}
NSError* error = nil;
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
if (error) {
NSLog(@"Ringtone audio player initialization failure %@", error);
_audioPlayer = nil;
return;
}
[_audioPlayer setDelegate:self];
// Tell player to loop indefinitely
[_audioPlayer setNumberOfLoops:-1];
// setup timer to vibrate device with some frequency
if (_vibratesWithRingtone) {
_vibrateTimer =
[NSTimer scheduledTimerWithTimeInterval:VIBRATE_FREQUENCY_SECONDS
target:self
selector:@selector(buzz:)
userInfo:nil
repeats:YES];
}
// finally, begin playback
[_audioPlayer play];
}
Méthodes du cycle de vie de OTAudioDevice
Les [self startCapture] La méthode lance la capture audio de l'éditeur, et la [self startRendering] Cette méthode lance la lecture audio pour l'abonné.
De même, le [self stopCapture] Cette méthode empêche l'éditeur de capturer, et la [self stopRendering] Cette méthode empêche l'abonné d'afficher son contenu audio. Dans l'application d'exemple, ces méthodes redéfinies ne font pas grand-chose, si ce n'est appeler la méthode parente.
Notre module audio personnalisé expose trois méthodes d'aide liées aux sonneries, comme suit :
#pragma mark - Exposed interface methods
- (void)startRingtone {
if (_audioPlayer == nil) {
[self playRingtoneFromURL:ringtoneURL];
}
}
- (void)stopRingtone {
// Stop Audio
[_audioPlayer stop];
_audioPlayer = nil;
// Stop vibration
[_vibrateTimer invalidate];
_vibrateTimer = nil;
[self startCapture];
[self startRendering];
}
- (BOOL)isRingTonePlaying {
return _audioPlayer != nil;
}
Ces méthodes sont utilisées dans le ViewController. Après la publication de la vidéo, le doPublish La méthode lance la sonnerie. Lorsque le flux en auto-abonnement s'établit, le subscriberDidConnectToStream arrête la sonnerie.
Félicitations ! Vous venez de terminer le tutoriel sur les pilotes audio personnalisés pour iOS.
Vous pouvez continuer à tester et à modifier le code que vous avez développé ici, ou consulter le Prochaines étapes ci-dessous.
Prochaines étapes
Une fois que vous aurez terminé cette étape, poursuivez le développement et l'amélioration de votre application OpenTok à l'aide des ressources utiles suivantes :
- Notions de base sur la Video API — Si ce n'est pas déjà fait, prenez quelques minutes pour découvrir le fonctionnement exact d'OpenTok
- Exemples de code — une sélection d'applications types qui explorent diverses fonctionnalités et cas d'utilisation d'OpenTok
- Guides du développeur — documentation détaillée sur toutes les fonctionnalités d'OpenTok
- Tutoriels supplémentaires — guides pas à pas pour la mise en œuvre d'autres fonctionnalités et cas d'utilisation d'OpenTok
- Référence du SDK iOS — découvrez les méthodes et événements spécifiques associés au SDK iOS d'OpenTok