如何播放音频在后台斯威夫特? [英] How to Play Audio in Background Swift?

查看:166
本文介绍了如何播放音频在后台斯威夫特?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

正如你看到我流音频广播。但是,当我preSS home键和退出应用程序流站和我听不到。我如何可以继续在后台流,并从锁屏听呢?

ViewController.Swift

 进口的UIKit
进口AVFoundation
进口的MediaPlayer
进口GoogleMobileAds
    一流的ViewController:UIViewController的,GADInterstitialDelegate {        @IBOutlet弱VAR exitMapButton:UIButton的!
        @IBOutlet弱VAR radarMap:UIWebView的!
        VAR间质性:的GADInterstitial!
        FUNC createAndLoadInterstitial() - > {的GADInterstitial
            VAR间质性=的GADInterstitial(adUnitId设置:CA-APP-酒馆2782958552分之5378899862041789)
            interstitial.delegate =自
            interstitial.loadRequest(的GADRequest())
            返回间质性
        }        GetAd出现FUNC(){
            如果(self.interstitial.isReady)
            {
                self.interstitial。presentFromRootViewController(个体经营)
                self.interstitial = self.createAndLoadInterstitial()
            }
        }
        @IBOutlet弱VAR ataturkButton:UIButton的!
        @IBOutlet弱VAR sabihaButton:UIButton的!
        @IBOutlet弱VAR esenbogaButton:UIButton的!
        @IBOutlet弱VAR weatherButton:UIButton的!
        @IBOutlet弱VAR statusLabel:的UILabel!
        @IBOutlet弱VAR为playButton:UIButton的!
        @IBOutlet弱VAR webViewButton:UIButton的!
        VAR googleBannerView:GADBannerView的!
覆盖FUNC viewDidLoad中(){
            super.viewDidLoad()
        }
类PlayerAv {
            VAR audioLink:字符串?
            VAR球员:AVPlayer
            的init(链接:字符串){
                self.audioLink =链接
                self.player = AVPlayer(网址:NSURL(字符串:链接))
            }
        }
        VAR myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltba.pls)
        变种setTowerState =        @IBAction FUNC sliderValueChanged(发件人:UISlider){
            VAR CurrentValue的=浮动(sender.value)
            的println(CurrentValue的)
            myPlayer.player.volume = CurrentValue的
        }
        @IBAction FUNC getWeatherWindow(发件人:AnyObject){
            。UIApplication.sharedApplication()的OpenURL(NSURL(字符串: \"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(定向天气页)
        }
        @IBAction FUNC changeToAtaturk(){
            myPlayer.player.pause()
            myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltba.pls)
            myPlayer.audioLink ==
            的println(\\(myPlayer.audioLink) - A)
            playButton.setTitle(暂停,forState:UIControlState.Normal)
            myPlayer.player.play()
            setTowerState =阿塔图尔克
            statusLabel.text =状态:播放,LTBA
        }
        @IBAction FUNC changeToEsenboga(){
            myPlayer.player.pause()
            myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltac.pls)
            的println(\\(myPlayer.audioLink) - A)
            playButton.setTitle(暂停,forState:UIControlState.Normal)
            myPlayer.player.play()
            setTowerState =伯卡
            statusLabel.text =状态:播放,LTAC
        }
        @IBAction FUNC changeToSabiha(){
            myPlayer.player.pause()
            myPlayer = PlayerAv(链接:http://www.liveatc.net/play/ltfj.pls)
            的println(\\(myPlayer.audioLink) - A)
            playButton.setTitle(暂停,forState:UIControlState.Normal)
            myPlayer.player.play()
            setTowerState =萨比哈
            statusLabel.text =状态:播放,LTFJ
        }
        覆盖FUNC didReceiveMemoryWarning(){
            super.didReceiveMemoryWarning()
            可以重新创建任何资源的处置//。
        }
        @IBAction FUNC为playButton pressed(发件人:AnyObject){
            切换()
        }
        拨动FUNC(){
            如果playButton.titleLabel?==的.text播放{
                playRadio()
                的println(播放)
                statusLabel.text =状态:玩
            }其他{
                pauseRadio()
                的println(暂停)
                statusLabel.text =状态:暂停
            }
        }
        FUNC playRadio(){
            myPlayer.player.play()
            playButton.setTitle(暂停,forState:UIControlState.Normal)
        }
        FUNC pauseRadio(){
            myPlayer.player.pause()
            playButton.setTitle(播放,forState:UIControlState.Normal)
        }
    }


解决方案

您需要设置你的应用程序功能的背景模式(音频和AirPlay)和您AVAudioSession类别设置为AVAudioSessionCategoryPlayback并设置其激活

更新: X $ C $ 7.0Ç(AppStore的)•斯威夫特2.0

  {做
    尝试AVAudioSession.sharedInstance()。setCategory(AVAudioSessionCategoryPlayback)
    打印(AVAudioSession分类播放OK)
    做{
        尝试AVAudioSession.sharedInstance()。SETACTIVE(真)
        打印(AVAudioSession是活动)
    }赶上让误差NSError {
        打印(error.localizedDescription)
    }
}赶上让误差NSError {
    打印(error.localizedDescription)
}

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: "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)
        }
    }

解决方案

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

Update: Xcode 7.0 (AppStore) • Swift 2.0

do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    print("AVAudioSession Category Playback OK")
    do {
        try AVAudioSession.sharedInstance().setActive(true)
        print("AVAudioSession is Active")
    } catch let error as NSError {
        print(error.localizedDescription)
    }
} catch let error as NSError {
    print(error.localizedDescription)
}

这篇关于如何播放音频在后台斯威夫特?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆