我正在开发一个在 Apple Watch 中播放音频的应用程序;从应用程序内部一切正常。我正在尝试设置MPRemoteCommandCenter
“正在播放”以将下一个/上一个曲目更改为skipForward/skipBackward并为暂停命令添加一个处理程序。
Now Playing 命令中没有任何变化,处理程序未被触发。
下面是一段代码:
播放方法
var player: WKAudioFilePlayer!
@IBAction func play() {
let avSession = AVAudioSession.sharedInstance()
try! avSession.setCategory(.playback, mode: .default, policy: .longForm, options: [])
let url = Bundle.main.url(forResource: "sample", withExtension: "mp3")!
let item = WKAudioFilePlayerItem(asset: WKAudioFileAsset(url: url))
player = WKAudioFilePlayer(playerItem: item)
do {
try avSession.setActive(true, options: .notifyOthersOnDeactivation)
player.play()
} catch {
print("Error")
}
}
遥控器设置方法:
func setupRemoteControls() {
// Get the shared MPRemoteCommandCenter
let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.skipForwardCommand.preferredIntervals = [NSNumber(value: 15)]
commandCenter.skipForwardCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
// skip forward
return .success
}
commandCenter.skipForwardCommand.isEnabled = true
commandCenter.skipBackwardCommand.preferredIntervals = [NSNumber(value: 15)]
commandCenter.skipBackwardCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
// skip backword
return .success
}
commandCenter.skipBackwardCommand.isEnabled = true
// Add handler for play Command
commandCenter.playCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
self.player.play()
return .success
}
// Add handler for Pause Command
commandCenter.pauseCommand.addTarget { (event) -> MPRemoteCommandHandlerStatus in
self.player.pause()
return .success
}
}
- 我正在调用
self.setupRemoteControls()
方法awake
。我也尝试将设置移动到ExtensionDelegate -> applicationDidFinishLaunching
我使用的 Apple 参考资料:
https://developer.apple.com/videos/play/wwdc2018/504/
:: 更新 ::
我发现在使用AVAudioPlayer
而不是WKAudioFilePlayer
设置时可以MPRemoteCommandCenter
正常工作。
我不使用本地音频文件的问题!...我使用 wowza 流式传输“m3u8”文件,该文件仅适用于WKAudioFilePlayer
. 如果我尝试使用流式传输,则会AVAudioPlayer
收到此错误
操作无法完成。(OSStatus 错误 2003334207。)
所以我现在的问题MPRemoteCommandCenter
是在仍在使用的同时进行配置WKAudioFilePlayer
,或者找到一种使用流式传输的方法AVAudioPlayer
??