Несколько аудио воспроизводятся одновременно из центра управления уведомлениями - PullRequest
0 голосов
/ 01 июня 2018

У меня есть сценарий, когда я проигрываю один аудиофайл и перемещаюсь в центр управления, он работает нормально, но если вернуться к просмотру контроллера (там вызывается player.pause ()) и вернулся и попытался использовать другие файлы, он работаетна том же контроллере, но в центре управления предыдущий файл также воспроизводится одновременно.

Может быть из-за объектов AVPlayer, мой обработчик вызывался несколько раз.

MPRemoteCommandCenter.shared().playCommand.addTarget { (playEvent) -> MPRemoteCommandHandlerStatus in
        let currentItem = self.player.currentItem
        self.player.replaceCurrentItem(with: currentItem)
        if self.player.isPlaying {
            self.player.pause()
        }else{
            self.player.play()
        }
        self.updateInfo()
        self.btnAudioPlay.setImage(#imageLiteral(resourceName: "pause"), for: .normal)
        return .success
    }

MPRemoteCommandCenter.shared().pauseCommand.addTarget { (pauseEvent) -> MPRemoteCommandHandlerStatus in
        if self.player.isPlaying {
            self.player.pause()
        }else{
            self.player.play()
        }
        self.updateInfo()
        self.btnAudioPlay.setImage(#imageLiteral(resourceName: "play"), for: .normal)
        return .success
    }

func updateInfo() {
    let image = UIApplication.shared.icon!
    let mediaArtwork = MPMediaItemArtwork(boundsSize: image.size) { (size: CGSize) -> UIImage in
        return image
    }

    let nowPlayingInfo: [String: Any] = [
        MPMediaItemPropertyAlbumTitle: self.subTilteForAudioPlayer,
        MPMediaItemPropertyTitle: self.titleForAudioPlayer,
        MPMediaItemPropertyArtwork: mediaArtwork,
        MPMediaItemPropertyPlaybackDuration:  Float(CMTimeGetSeconds((player.currentItem?.asset.duration)!)) ,
        MPNowPlayingInfoPropertyElapsedPlaybackTime: Float(CMTimeGetSeconds(player.currentTime()))
    ]
    MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
}

1 Ответ

0 голосов
/ 13 июня 2018

Аудиоплеер инициализируется каждый раз, он появляется на одном экране, поэтому в Центре уведомлений воспроизводятся несколько звуков.

player = nil

приведенный выше код работает для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...