настроить MPRemoteCommandCenter в watchOS, теперь играющих с WKAudioFilePlayer - PullRequest
0 голосов
/ 15 октября 2018

Я работаю над приложением, которое воспроизводит звук в Apple Watch;Все работает нормально изнутри приложения.Я пытаюсь настроить MPRemoteCommandCenter в «Now Playing», чтобы изменить следующий / предыдущий трек на 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, работающие нормально.

Проблемачто я не использую локальные аудиофайлы! .. Я транслирую файлы 'm3u8', используя wowza, который работал только с WKAudioFilePlayer.И если я попытался выполнить потоковую передачу, используя AVAudioPlayer, я получаю эту ошибку

Операция не может быть завершена.(Ошибка OSStatus 2003334207.)

Так что моя проблема сейчас в том, чтобы настроить MPRemoteCommandCenter при использовании WKAudioFilePlayer или найти способ потоковой передачи с помощью AVAudioPlayer ??

...