Cómo reproducir audio en fondo Swift?

Como ve, estoy transmitiendo una transmisión de audio. Pero cuando presiono el botón de inicio y salgo de la aplicación, la transmisión se detiene o no puedo escuchar. ¿Cómo puedo continuar transmitiendo en segundo plano y escucharlo desde la pantalla de locking?

ViewController.Swift

import UIKit import AVFoundation import MediaPlayer import GoogleMobileAds class ViewController: UIViewController, GADInterstitialDelegate { @IBOutlet weak var exitMapButton: UIButton! @IBOutlet weak var radarMap: UIWebView! var interstitial: GADInterstitial! func createAndLoadInterstitial() -> GADInterstitial { var interstitial = GADInterstitial(adUnitID: "ca-app-pub-5378899862041789/2782958552") interstitial.delegate = self interstitial.loadRequest(GADRequest()) return interstitial } func getAd(){ if (self.interstitial.isReady) { self.interstitial.presentFromRootViewController(self) self.interstitial = self.createAndLoadInterstitial() } } @IBOutlet weak var ataturkButton: UIButton! @IBOutlet weak var sabihaButton: UIButton! @IBOutlet weak var esenbogaButton: UIButton! @IBOutlet weak var weatherButton: UIButton! @IBOutlet weak var statusLabel: UILabel! @IBOutlet weak var playButton: UIButton! @IBOutlet weak var webViewButton: UIButton! var googleBannerView: GADBannerView! override func viewDidLoad() { super.viewDidLoad() } class PlayerAv { var audioLink: String? var player: AVPlayer init(link: String) { self.audioLink = link self.player = AVPlayer(URL: NSURL(string: link)) } } var myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltba.pls") var setTowerState = "" @IBAction func sliderValueChanged(sender: UISlider) { var currentValue = Float(sender.value) println(currentValue) myPlayer.player.volume = currentValue } @IBAction func getWeatherWindow(sender: AnyObject) { UIApplication.sharedApplication().openURL(NSURL(string: "http://www.aviationweather.gov/adds/metars/?station_ids=ltac&std_trans=standard&chk_metars=on&hoursStr=most+recent+only&chk_tafs=on&submitmet=Submit")!) println("Directed to weather page") } @IBAction func changeToAtaturk() { myPlayer.player.pause() myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltba.pls") myPlayer.audioLink == "" println("\(myPlayer.audioLink!)--a") playButton.setTitle("Pause", forState: UIControlState.Normal) myPlayer.player.play() setTowerState = "ataturk" statusLabel.text = "Status: Playing, LTBA" } @IBAction func changeToEsenboga() { myPlayer.player.pause() myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltac.pls") println("\(myPlayer.audioLink!)--a") playButton.setTitle("Pause", forState: UIControlState.Normal) myPlayer.player.play() setTowerState = "esenboga" statusLabel.text = "Status: Playing, LTAC" } @IBAction func changeToSabiha() { myPlayer.player.pause() myPlayer = PlayerAv(link: "http://www.liveatc.net/play/ltfj.pls") println("\(myPlayer.audioLink!)--a") playButton.setTitle("Pause", forState: UIControlState.Normal) myPlayer.player.play() setTowerState = "sabiha" statusLabel.text = "Status: Playing, LTFJ" } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func playButtonPressed(sender: AnyObject) { toggle() } func toggle() { if playButton.titleLabel?.text == "Play" { playRadio() println("Playing") statusLabel.text = "Status: Playing" } else { pauseRadio() println("Paused") statusLabel.text = "Status: Paused" } } func playRadio() { myPlayer.player.play() playButton.setTitle("Pause", forState: UIControlState.Normal) } func pauseRadio() { myPlayer.player.pause() playButton.setTitle("Play", forState: UIControlState.Normal) } } 

Debes configurar los modos de fondo de las capacidades de la aplicación (Audio y AirPlay) y configurar tu categoría de la sesión de AVAudio en AVAudioSessionCategoryPlayback y configurarla como activa.

Desde Xcode 8.2.1 • Swift 3.0.2 en adelante

 do { try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers) print("Playback OK") try AVAudioSession.sharedInstance().setActive(true) print("Session is Active") } catch { print(error) } 

enter image description here