Implementar la lógica "Reproducir tono de llamada
Necesitamos un método que detenga el flujo de audio de Vonage e inicie el reproductor de audio estándar de iOS.
Dado que el sistema de audio del iPhone es un singleton global, no podemos reproducir un tono de llamada y el flujo de Vonage simultáneamente sin que se produzcan artefactos de audio. Por lo tanto, dejamos de capturar/renderizar el audio de Vonage antes de reproducir el tono de llamada.
Añada este método a su AudioDeviceRingtone clase:
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
}
}
Controlador de audio personalizado
Aprenda a utilizar un controlador de audio personalizado para personalizar el audio de la transmisión del editor y del suscriptor. Utilizará el controlador de audio personalizado cuando desee iniciar y detener el audio reproducir su propio archivo de audio y hacer cualquier cosa fuera del comportamiento predeterminado del chat de vídeo en directo proporcionado por el SDK.