在被SwiftUI中断后恢复AVPlayer



我正在使用AVPlayerAVPlayerItem构建一个广播流应用程序。我已经建立了我的应用程序,以便在后台继续播放广播,如下所示:

do {
try AVAudioSession.sharedInstance().setCategory(.playback)
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}

AVPlayer中断之后(例如,当用户接收到呼叫时(,AVPlayer不恢复播放。为了收听流媒体,我需要再次主动播放。

如何使用SwiftUI使AVPlayer在中断后自动恢复?(我找到了一些解决方案,但没有一个适合使用SwiftUI

谢谢!

没有任何与SwiftUI或一般UI相关的东西可以在中断后重新开始播放。

正如苹果文档中所说:

中断通知的第一个注册:

func registerForNotifications() {
NotificationCenter.default.addObserver(self,
selector: #selector(handleInterruption),
name: .AVAudioSessionInterruption,
object: AVAudioSession.sharedInstance())
}

然后像这样处理通知:

func handleInterruption(_ notification: Notification) {
guard let info = notification.userInfo,
let typeValue = info[AVAudioSessionInterruptionTypeKey] as? UInt,
let type = AVAudioSessionInterruptionType(rawValue: typeValue) else {
return
}
if type == .began {
// Interruption began, take appropriate actions (save state, update user interface)
}
else if type == .ended {
guard let optionsValue =
userInfo[AVAudioSessionInterruptionOptionKey] as? UInt else {
return
}
let options = AVAudioSessionInterruptionOptions(rawValue: optionsValue)
if options.contains(.shouldResume) {
// Interruption Ended - playback should resume
}
}
}

如果这没有帮助,你可以用其他不适用于你的解决方案更好地解释你所面临的问题。

SwiftUI

调用播放按钮上的.onReceive功能,如下所示:

.onReceive(NotificationCenter.default.publisher(for: AVAudioSession.interruptionNotification)) { event in
guard let info = event.userInfo,
let typeValue = info[AVAudioSessionInterruptionTypeKey] as? UInt,
let type = AVAudioSession.InterruptionType(rawValue: typeValue) else {
return
}
if type == .began {
// Interruption began, take appropriate actions (save state, update user interface)
}
else if type == .ended {
guard let optionsValue =
info[AVAudioSessionInterruptionOptionKey] as? UInt else {
return
}
let options = AVAudioSession.InterruptionOptions(rawValue: optionsValue)
if options.contains(.shouldResume) {
// Interruption Ended - playback should resume
player.play()
}
}
}

相关内容

  • 没有找到相关文章

最新更新