我试图从应用程序外部控制我的音频播放器, 我开始了一个av音频会话,但它没有在后台播放(在swift 3上运行正常),
do{
myPlayer = AVPlayer(url: url!)
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayback
)
do {
try audioSession.setActive(true)
}
}
catch {
print(error)
}
}
答案 0 :(得分:8)
因此,您正在构建一个使用AVPlayer
在后台播放音频的应用。您应该使用MPNowPlayingInfoCenter
在锁定屏幕和控制中心上显示歌曲的元数据,并使用MPRemoteCommandCenter
来控制锁定屏幕和控制中心上的上一个/下一个/播放/暂停操作。
AVKit
和MediaPlayer
依赖项。使用AVPlayer
:
AVPlayerItem
guard let url = URL(string: "http://your.website.com/playlist.m3u8") else {
return
}
player = AVPlayer(url: url)
设置AVAudioSession
:
private func setupAVAudioSession() {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
debugPrint("AVAudioSession is Active and Category Playback is set")
UIApplication.shared.beginReceivingRemoteControlEvents()
setupCommandCenter()
} catch {
debugPrint("Error: \(error)")
}
}
设置InfoCenter
和RemoteCommandCenter
:
private func setupCommandCenter() {
MPNowPlayingInfoCenter.default().nowPlayingInfo = [MPMediaItemPropertyTitle: "Your App Name"]
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.playCommand.isEnabled = true
commandCenter.pauseCommand.isEnabled = true
commandCenter.playCommand.addTarget { [weak self] (event) -> MPRemoteCommandHandlerStatus in
self?.player.play()
return .success
}
commandCenter.pauseCommand.addTarget { [weak self] (event) -> MPRemoteCommandHandlerStatus in
self?.player.pause()
return .success
}
}
您可以将setupAVAudioSession()
方法放在viewDidLoad()
方法中,也可以放在您需要的任何其他位置。
如果您需要在MPNowPlayingInfoCenter
这里放置更多信息,请列出所有可用属性:General Media Item Property Keys | Apple Developer Documentation