hhh*_*hhh 1 audio avfoundation ios swift
我正试图从应用程序外部控制我的音频播放器,我开始了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)
}
}
Run Code Online (Sandbox Code Playgroud)
因此,您正在构建一个使用后台播放音频的应用AVPlayer.您应该使用MPNowPlayingInfoCenter在锁定屏幕和控制中心上显示歌曲的元数据,并用于MPRemoteCommandCenter控制锁定屏幕和控制中心上的上一个/下一个/播放/暂停操作.
AVKit和MediaPlayer依赖.设置你AVPlayer的AVPlayerItem:
guard let url = URL(string: "http://your.website.com/playlist.m3u8") else {
return
}
player = AVPlayer(url: url)
Run Code Online (Sandbox Code Playgroud)
设置你的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)")
}
}
Run Code Online (Sandbox Code Playgroud)
设置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
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将setupAVAudioSession()方法放在viewDidLoad()方法中,也可以放在需要它的任何其他位置.
如果您需要在MPNowPlayingInfoCenter此处放置更多信息,请列出所有可用属性:常规媒体项属性键| Apple开发人员文档
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |