-
Tune up your AirPlay audio experience
Learn how you can upgrade your app's AirPlay audio experience to be more robust and responsive. We'll show you how to adopt enhanced audio buffering with AVQueuePlayer, explore alternatives when building a custom player in your app, and share best practices.
Capítulos
- 0:42 - AirPlay Overview
- 1:43 - Enhanced audio buffering
- 3:54 - Add support to your app
Recursos
Vídeos relacionados
WWDC23
-
Buscar neste vídeo...
-
-
4:00 - Set the audio type
let audioSession = AVAudioSession.sharedInstance() try audioSession.setCategory(. playback ,xmode: . default , policy:.longFormAudio ) -
7:23 - AVQueuePlayer
let player = AVQueuePlayer() let url = URL(string: "http://www.examplecontenturl.com") let asset = AVAsset(url: url) let item = AVPlayItem(asset: asset) player.insert(item, after: nil) player.play() -
8:28 - Add the audio renderer to the render synchronizer
let serializationQueue = DispatchQueue(label: "sample.buffer.player.serialization.queue") let audioRenderer = AVSampleBufferAudioRenderer() let renderSynchronizer = AVSampleBufferRenderSynchronizer() renderSynchronizer.addRenderer(audioRenderer) -
8:50 - Enqueue audio data
serializationQueue.async { [weak self] in guard let self = self else { return } // Start processing audio data and stop when there's no more data. self.audioRenderer.requestMediaDataWhenReady(on: serializationQueue) { [weak self] in guard let self = self else { return } while self.audioRenderer.isReadyForMoreMediaData { let sampleBuffer = self.nextSampleBuffer() // Returns nil at end of data. if let sampleBuffer = sampleBuffer { self.audioRenderer.enqueue(sampleBuffer) } else { // Tell the renderer to stop requesting audio data. audioRenderer.stopRequestingMediaData() } } } // Start playback at the natural rate of the media. self.renderSynchronizer.rate = 1.0 }
-