美文网首页
AVPlayer 音乐播放后台播放,以及锁屏主题设置

AVPlayer 音乐播放后台播放,以及锁屏主题设置

作者: 秋叶红90 | 来源:发表于2021-04-14 01:00 被阅读0次
IMG_721B7D8F30BA-1.jpeg

AVPlayer 音乐播放后台播放,以及锁屏主题设置

AppDelegate 类里添加代码

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        
        //开启接收远程事件
        application.beginReceivingRemoteControlEvents()
        /// 结束远程事件
                //        UIApplication.shared.endReceivingRemoteControlEvents()
        
        return true
    }

接受远程控制的按钮切换

/// 接受远程控制的按钮切换
    override func remoteControlReceived(with event: UIEvent?) {
        if event?.type == UIEvent.EventType.remoteControl {
            switch event?.subtype {
            case .remoteControlPause:
                PlayerManager.shared.playerPause()
            case .remoteControlPlay:
                //播放
                PlayerManager.shared.playerPlay()
            case .remoteControlPreviousTrack:
                //前一首
                PlayerManager.shared.playPrevious()
            case .remoteControlNextTrack:
                //下一首
                PlayerManager.shared.playNext()
            default:
                break
            }
            PlayerManager.shared.updateLockedScreenMusic()
        }
    }

创建PlayerManager 单利类管理播放器AVPlayer

import MediaPlayer
import AVKit
import UIKit

class PlayerManager: NSObject {
    //歌曲加载状态
    enum MusicLoadStatus {
        case none      //默认
        case loadding  //加载中
        case readyToPlay //准备播放
        case completed   //播放完成
        case failed    //播放失败
    }
    //歌词加载状态
    enum LrcLoadStatus {
        case none      //默认
        case loadding  //加载中
        case completed   //完成
        case failed    //失败
    }
    //歌曲播放模式
    enum PlayerCycle: Int {
        /**单曲循环*/
        case single = 0
        /**顺序播放*/
        case order = 1
        /**随机播放*/
        case random = 2
    }
    
    static let shared = PlayerManager()
    /*播放器*/
    var player:AVPlayer = AVPlayer.init()
    var session = AVAudioSession.sharedInstance()
    
    override init() {
        super.init()
        // --- 支持后台播放 plist 配置对应的key
        //        <key>UIBackgroundModes</key>
        //        <array>
        //            <string>audio</string>
        //        </array>
        try? session.setCategory(.playback)
        try? session.setActive(true, options: [])
//        //播放完毕的通知
//        NotificationCenter.addObserver(observer: self, selector: #selector(playerItemDidPlayToEndTime(_:)), name: Notification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)
//        //耳机插入和拔掉通知
//        NotificationCenter.addObserver(observer: self, selector: #selector(audioRouteChangeListener(_:)), name: AVAudioSession.routeChangeNotification, object: nil)
    }
    
    /// 网络或者本地路径
    func play(url:String) {
        var itemUrl:URL?
        if url.hasPrefix("http") {
            itemUrl = URL.init(string: "url")
        }else{
            itemUrl = URL.init(fileURLWithPath: url)
        }
        if let l = itemUrl {
            let item = AVPlayerItem.init(url: l)
            self.player.replaceCurrentItem(with: item )
            self.player.play()
        }
        
        
    }
    /// 暂停
    func playerPause() {
        
    }
    /// 播放
    func playerPlay() {
        
    }
    
    /// 前一首
    func playPrevious() {
        
    }
    
    /// 下一首
    func playNext() {
        
    }
    /// 更新锁屏的音乐名字和字幕
    func updateLockedScreenMusic() {
        
    }
    /// 锁屏主题设置
    func configNowPlayingCenter() {
       
        var info:[String:Any] = [:];
        
           //音乐的标题
        info[MPMediaItemPropertyTitle] =
           "折子戏";
        //音乐的艺术家
        let author = "黄忠";
        info[MPMediaItemPropertyArtist] =
            author;
        // 当前播放的进度
        info[MPNowPlayingInfoPropertyElapsedPlaybackTime] =
            10;
         
           //音乐的播放速度
        info[MPNowPlayingInfoPropertyPlaybackRate] =
            1;
          
           //音乐的总时间
        info[MPMediaItemPropertyPlaybackDuration] =
            100;
          
           //音乐的封面
        let artwork = MPMediaItemArtwork.init(boundsSize: CGSize.init(width: 200, height: 200)) { (size) -> UIImage in
            return UIImage.init(named: "12.jpg")!
        };
        info[MPMediaItemPropertyArtwork] =
            artwork;
          
           //完成设置
        MPNowPlayingInfoCenter.default().nowPlayingInfo = info
        
    }
}


其中允许后台播放的这句代码很关键

 // --- 支持后台播放 plist 配置对应的key
        //        <key>UIBackgroundModes</key>
        //        <array>
        //            <string>audio</string>
        //        </array>
        try? session.setCategory(.playback)
        try? session.setActive(true, options: [])

锁屏主题设置

/// 锁屏主题设置
    func configNowPlayingCenter() {
       
        var info:[String:Any] = [:];
        
           //音乐的标题
        info[MPMediaItemPropertyTitle] =
           "折子戏";
        //音乐的艺术家
        let author = "黄忠";
        info[MPMediaItemPropertyArtist] =
            author;
        // 当前播放的进度
        info[MPNowPlayingInfoPropertyElapsedPlaybackTime] =
            10;
         
           //音乐的播放速度
        info[MPNowPlayingInfoPropertyPlaybackRate] =
            1;
          
           //音乐的总时间
        info[MPMediaItemPropertyPlaybackDuration] =
            100;
          
           //音乐的封面
        let artwork = MPMediaItemArtwork.init(boundsSize: CGSize.init(width: 200, height: 200)) { (size) -> UIImage in
            return UIImage.init(named: "12.jpg")!
        };
        info[MPMediaItemPropertyArtwork] =
            artwork;
          
           //完成设置
        MPNowPlayingInfoCenter.default().nowPlayingInfo = info
        
    }

相关文章

网友评论

      本文标题:AVPlayer 音乐播放后台播放,以及锁屏主题设置

      本文链接:https://www.haomeiwen.com/subject/gughlltx.html