Implementierung der "Klingelton abspielen"-Logik
Wir brauchen eine Methode, die den Vonage-Audiostream pausiert und den Standard-iOS-Audioplayer startet.
Da das iPhone-Audiosystem ein globales Singleton ist, können wir nicht gleichzeitig einen Klingelton und den Vonage-Stream abspielen, ohne dass Audio-Artefakte entstehen. Daher beenden wir die Erfassung/Wiedergabe von Vonage-Audio vor der Wiedergabe des Klingeltons.
Fügen Sie diese Methode zu Ihrer AudioDeviceRingtone Klasse:
func playRingtone(from url: URL) {
// 1. Pause audio
// These methods stop the Vonage audio unit from accessing the hardware
_ = stopCapture()
_ = stopRendering()
// 2. Stop & replace existing audio player
if let player = audioPlayer {
player.stop()
audioPlayer = nil
}
// 3. Initialize the AVAudioPlayer
do {
audioPlayer = try AVAudioPlayer(contentsOf: url)
audioPlayer?.delegate = self
// Loop indefinitely
audioPlayer?.numberOfLoops = -1
// 4. Setup Vibration Timer
if vibratesWithRingtone {
vibrateTimer = Timer.scheduledTimer(timeInterval: vibrateFrequencySeconds,
target: self,
selector: #selector(buzz(_:)),
userInfo: nil,
repeats: true)
}
// 5. Play the audio
audioPlayer?.play()
} catch {
print("Ringtone audio player initialization failure \(error)")
audioPlayer = nil
}
}
Benutzerdefinierter Audiotreiber
Erfahren Sie, wie Sie einen benutzerdefinierten Audiotreiber verwenden können, um die Audiodaten des Herausgebers und der Abonnenten anzupassen. Sie werden den benutzerdefinierten Audiotreiber verwenden, wenn Sie das Audio starten und stoppen und Ihre eigene Audiodatei abspielen möchten. Wenn Sie etwas anderes als das SDK-Standardverhalten für Live-Videochats mit Audio machen möchten, verwenden Sie benutzerdefinierte Audiotreiber.