Невозможно воспроизвести файлы mp4 в фоновом режиме - PullRequest
0 голосов
/ 16 февраля 2019

Я получаю странную ошибку при попытке воспроизвести фоновый звук

Я сделал следующее:

Возможности ✅

Рамки ✅

Мой код:

var player = AVPlayer()
var  playerViewController = AVPlayerViewController()
override func viewDidLoad() {
    super.viewDidLoad()

    do {
        try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
        print("Playback OK")
        UIApplication.shared.beginReceivingRemoteControlEvents()
        addPlayerNotifications()
        try AVAudioSession.sharedInstance().setActive(true)
        print("Session is Active")

    } catch {
        fatalError(error.localizedDescription)
    }

}

addPlayerNotifications():

func addPlayerNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(playerItemDidPlayToEnd), name: .AVPlayerItemDidPlayToEndTime, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(applicationWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(applicationDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
}

Тем не менее, это приложение с вкладками при переключении на соответствующий раздел, я получаю сбой с этой ошибкой:

Тема 1: Неустранимая ошибка: Операция не может быть завершена.(OSStatus error -50.) В этой строке: fatalError(error.localizedDescription)

IMG

Еще более странно,

Этот кодработает на:

Симулятор ✅

Физический iPhone X (iOS 12.4.1) ❌

В другом проекте Xcode без панели вкладок ✅

Это простая панель вкладокс 2 контроллерами представления.Я действительно не знаю, что я делаю неправильно

1 Ответ

0 голосов
/ 16 февраля 2019

Я бы предложил вызвать эту функцию с isOn = false при переходе в фоновый режим и true при переходе с переднего плана.Это отключит воспроизведение трека, но сохранит звук.

func setPlayerMediaCharacteristic(isOn: Bool) {
    guard let currentPlayerItem = playerViewController.player?.currentItem else { return }

    for track in currentPlayerItem.tracks where track.assetTrack.hasMediaCharacteristic(.visual) {
        track.isEnabled = isOn
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...