Benutzerdefinierter Audiotreiber (iOS)
Übersicht
Mit dem OpenTok iOS SDK können Sie einen benutzerdefinierten Audiotreiber für Publisher und Subscriber einrichten. Mit einem benutzerdefinierten Audiotreiber können Sie den Audio-Stream von Sendern und Empfängern anpassen. Sie verwenden den benutzerdefinierten Audiotreiber, wenn Sie den Ton starten und stoppen sowie Ihre eigene Audiodatei abspielen möchten. Wenn Sie „irgendetwas“ mit dem Ton tun möchten, das über das Standardverhalten des SDK für Live-Video-Chats hinausgeht, sollten Sie benutzerdefinierte Audiotreiber verwenden.
Einrichten Ihres Projekts
Der Code für diesen Abschnitt befindet sich in der Klingeltöne Probe in der Repo „opentok-ios-sdk-samples“. Falls Sie dies noch nicht getan haben, müssen Sie das Repo in ein lokales Verzeichnis klonen – dies können Sie über die Befehlszeile tun:
git clone https://github.com/opentok/opentok-ios-sdk-samples.git
Öffnen Sie das Projekt in XCode, um die Schritte nachzuvollziehen
Den Code erkunden
Diese Beispielanwendung verwendet den benutzerdefinierten Audiotreiber, der durch das im OpenTok iOS SDK enthaltene „OTDefaultAudioDevice“ definiert ist. Der Audiotreiber wird sowohl von Publishern als auch von Subscribern verwendet. In dieser App entspricht der Subscriber-Stream dem Publisher-Stream (ein selbstabonnierender Stream). Zunächst veröffentlichen wir den Stream, dann stoppen wir die Erfassung des Publisher-Audios, sodass wir einen Klingelton exklusiv auf einem Apple AVAudioPlayer abspielen können. Wenn der Subscriber beitritt (10 Sekunden, nachdem die App den Stream veröffentlicht hat), wird die Wiedergabe des Klingeltons beendet. Der benutzerdefinierte Audiotreiber kehrt dann zur Erfassung und Wiedergabe von Audio zurück.
Die Klasse „OTAudioDeviceRingtone“ erbt von „OTDefaultAudioDevice“. Der Großteil der Low-Level-Audioverarbeitung erfolgt in „OTDefaultAudioDevice“. Diese Klasse nutzt Apple Audio Units zur Verarbeitung, Aufnahme und Wiedergabe von Audio. OTDefaultAudioDevice unterstützt außerdem Bluetooth, verwaltet Routenänderungen usw. Dieses Tutorial behandelt diese erweiterten Funktionen nicht; es zeigt lediglich eine einfache Anwendung des OTAudioDevice-Lebenszyklusprotokolls zum Starten und Stoppen von Audio.
Wenn Sie gerätebezogene (iPhone) Audioverarbeitungsfunktionen wie die Aktivierung von CallKit, die Wiedergabe von MP3-Dateien und Klingeltönen sowie die Verarbeitung von Audio-Frames usw. nutzen möchten, sollten Sie benutzerdefinierte Audiotreiber verwenden. Weitere Informationen finden Sie im Projekt „Custom-Audio-Driver“ im Repository „opentok-ios-sdk-samples“.
Wenn Sie Audio ausschließlich Frame für Frame erfassen, verarbeiten und wiedergeben möchten, können Sie der Einfachheit halber WebRTC-Audio-Transformer verwenden. Weitere Informationen finden Sie im Projekt „Media-Transformers“ im Repository „opentok-ios-sdk-samples“.
Klingelton-App
Ein Klingelton ist ein externes Audiosignal, das mithilfe der Apple Audio AVAudioPlayer-API wiedergegeben wird. Da das iPhone-Audiosystem ein globales Singleton-Objekt ist, führt die Wiedergabe des Klingeltons, ohne unseren Audio-Flow anzuhalten, zu einer Vermischung der Töne. Daher muss die App zunächst die Erfassung des Publisher-Audios anhalten, dann den Klingelton abspielen und anschließend die Audioerfassung und -wiedergabe wieder aktivieren, sobald ein Subscriber beitritt. Wir initialisieren die Klingelton-App wie folgt:
- (instancetype)initWithRingtone:(NSURL *)url {
self = [super init];
if (self) {
ringtoneURL = url;
}
return self;
}
Der Klingelton (als URL dargestellt) wird mithilfe der AVAudioPlayer-APIs unbegrenzt abgespielt. Der folgende Code zeigt den Ablauf der Funktionen „Stopp“, „Wiedergabe“ und „Start“:
- (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];
}
Lebenszyklusmethoden von OTAudioDevice
Die [self startCapture] Die Methode startet die Audioaufnahme des Publishers, und die [self startRendering] Die Methode startet die Audiowiedergabe für den Abonnenten.
Ähnlich verhält es sich mit der [self stopCapture] Die Methode verhindert, dass der Publisher Daten erfasst, und die [self stopRendering] Die Methode verhindert, dass der Abonnent seine Audiodaten wiedergibt. Diese überschriebenen Methoden haben in der Beispiel-App keine große Funktion, außer die übergeordnete Methode aufzurufen.
Unser benutzerdefiniertes Audio stellt die folgenden drei Hilfsmethoden für Klingeltöne bereit:
#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;
}
Diese Methoden werden in der ViewController. Nach der Veröffentlichung des Videos hat die doPublish Die Methode startet den Klingelton. Wenn die Verbindung zum selbstabonnierten Stream hergestellt ist, wird die subscriberDidConnectToStream Methode wird der Klingelton gestoppt.
Herzlichen Glückwunsch! Du hast das Tutorial zum Erstellen eines benutzerdefinierten Audiotreibers für iOS abgeschlossen.
Du kannst den Code, den du hier entwickelt hast, weiter ausprobieren und anpassen oder dir die Nächste Schritte unten.
Nächste Schritte
Wenn Sie hier fertig sind, können Sie Ihre OpenTok-Application mit diesen hilfreichen Ressourcen weiter ausbauen und verbessern:
- Grundlagen der Video API – Falls Sie es noch nicht getan haben, nehmen Sie sich ein paar Minuten Zeit, um genau zu erfahren, wie OpenTok funktioniert.
- Code-Beispiele – eine Sammlung von Beispiel-Apps, die verschiedene OpenTok-Funktionen und Anwendungsfälle veranschaulichen
- Entwicklerhandbücher – ausführliche Dokumentation zu allen Funktionen und Merkmalen von OpenTok
- Weitere Tutorials – Anleitungen zur Implementierung weiterer OpenTok-Funktionen und Anwendungsfälle
- iOS-SDK-Referenz – Entdecken Sie die spezifischen Methoden und Ereignisse im Zusammenhang mit dem OpenTok iOS-SDK