恢复音乐之后,再去另一个视图控制器



我正在尝试构建一个音乐应用程序。当我留在音乐视图控制器中时,音乐正在播放。我还设置了音乐背景模式。音乐正在以背景模式播放,但是当我转到另一个视图控制器时。音乐重新开始。问题是什么?

这是我尝试的

  //this is global variable 
    var player : AVPlayer?
    var playerItem:AVPlayerItem?
override func viewDidLoad() {
            super.viewDidLoad()
           musicplayer()
           play()
    }

 func musicplayer(){
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
            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)
        }

    }

这是我的播放器

    func play(){
    let musicUrl = totalAlbumList[myIndex].audiofile
            if let mm = musicUrl {
                var url: URL!
                url = URL(string: mm)
                playerItem = AVPlayerItem(url: url)
                player = AVPlayer(playerItem: playerItem)
                player?.volume = 1.0
                player?.rate = 1.0
                player?.play()
}

如果您想在所有类中播放音乐,请放置您的Avplayer和与Singleton类中的播放器相关的所有代码。

背景模式只有在应用程序处于后台模式并且您的UiviewController正在运行时才会有所帮助。使用下面的课程播放音乐。

//
//  MusicPlayer.swift
//  MusicPlayer
//
//  Created by Lakhwinder Singh on 11/09/17.
//  Copyright © 2017 lakh. All rights reserved.
//
import UIKit
import AVFoundation
class MusicPlayer: NSObject {
    //Constant varialbe of class
    static let player = MusicPlayer()
    //this is global variable
    var player : AVPlayer?
    var playerItem:AVPlayerItem?
    func initPlayer(){
        do {
            try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
            try AVAudioSession.sharedInstance().overrideOutputAudioPort(AVAudioSessionPortOverride.speaker)
            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)
        }
    }
    func playMusic(_ musicUrl: String?) {
        if let mm = musicUrl {
            var url: URL!
            url = URL(string: mm)
            playerItem = AVPlayerItem(url: url)
            player = AVPlayer(playerItem: playerItem)
            player?.volume = 1.0
            player?.rate = 1.0
            player?.play()
        }
    }
}

只需在您的AppDelegate中的代码下面调用代码以初始化播放器。

   func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        MusicPlayer.player.initPlayer()
        return true
    }

并在您的班级中使用此代码。

MusicPlayer.player.playMusic(totalAlbumList[myIndex].audiofile)

最新更新