2

我正在开发一个在 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/

https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/MediaPlaybackGuide/Contents/Resources/en.lproj/RefiningTheUserExperience/RefiningTheUserExperience.html


:: 更新 ::

我发现在使用AVAudioPlayer而不是WKAudioFilePlayer设置时可以MPRemoteCommandCenter正常工作。

我不使用本地音频文件的问题!...我使用 wowza 流式传输“m3u8”文件,该文件仅适用于WKAudioFilePlayer. 如果我尝试使用流式传输,则会AVAudioPlayer收到此错误

操作无法完成。(OSStatus 错误 2003334207。)

所以我现在的问题MPRemoteCommandCenter是在仍在使用的同时进行配置WKAudioFilePlayer,或者找到一种使用流式传输的方法AVAudioPlayer??

4

0 回答 0