Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to play audio in background with Swift?

As you see I'm streaming an audio broadcast. But when I press the home button and exit the app streaming stops or I cannot hear. How can I continue streaming in background and listen it from lock screen?

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: "adUnitID-XXXX")             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://somewebsite.com/abc.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://somewebpage.com")!)             println("Directed to weather page")         }         @IBAction func changeToAtaturk() {             myPlayer.player.pause()             myPlayer = PlayerAv(link: "http://somewebsite.com/abc.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://somewebsite.com/def.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://somewebsite.com/efg.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)         }     } 
like image 933
do it better Avatar asked May 16 '15 20:05

do it better


People also ask

How do you play music in the background on iOS?

Go to Settings > Accessibility > Audio/Visual > Background Sounds, then turn on Background Sounds. Set any of the following: Sound: Choose a sound; the audio file downloads to your iPhone.

How do I enable background play?

Open the settings by tapping the triple-dot icon, then tapping “Settings”. You'll need to scroll down through the settings to find the options page for enabling background video playback. Background video playback is the top option in the controls section, simply tap it to view the options page.

How do you play background music?

From the Home screen, tap Apps > Music Player . Tap a song in your library to listen to it. Tap the Menu Key > Settings and checkmark the Show notification option so that the music controller is displayed on the Notifications panel.

What is background audio playback?

As spotted by XDA folks, Netflix is testing background audio playback mode on Android. It is a mode dedicated to allowing users to listen to the audio of shows and movies without the need for watching them.


1 Answers

You need to set your app Capabilities Background Modes (Audio and AirPlay) and set your AVAudioSession category to AVAudioSessionCategoryPlayback and set it active

From Xcode 11.4 • Swift 5.2

do {     try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])     print("Playback OK")     try AVAudioSession.sharedInstance().setActive(true)     print("Session is Active") } catch {     print(error) } 

enter image description here

like image 167
Leo Dabus Avatar answered Sep 18 '22 12:09

Leo Dabus