我在tvOS上有一个使用AVPlayerViewController
播放流媒体音频的应用。即使在后台运行时,这也可以正常工作。问题是当AppleTV进入睡眠状态并且唤醒时播放器被卡住,只有强制退出应用程序才能让我再次开始播放。
我的应用程序是否应该处理以恢复正常播放的事件?我应该在文档中寻找什么?
基本代码是:
override func viewDidLoad() {
super.viewDidLoad()
// loading details fron plist
if let stationInfo = readStationSettings() {
stationUrl = stationInfo["url"] as? String
stationName = stationInfo["name"] as? String
stationDescription = stationInfo["description"] as? String
stationImage = stationInfo["image"] as? UIImage
} else {
trackTitle = "Unable to find station details"
return
}
let videoURL = URL(string: stationUrl!)
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true, with: .notifyOthersOnDeactivation)
} catch let error as NSError {
print(error.localizedDescription)
}
playerItem = AVPlayerItem(url: videoURL!)
self.player=AVPlayer(playerItem: playerItem!)
playerLayer=AVPlayerLayer(player: player)
self.player?.play()
}
答案 0 :(得分:0)
我对iOS iPhone应用程序有同样的问题,我认为该解决方案可能会对您有所帮助。我正在使用AVPlayerViewController
在推送的视图控制器中显示视频。当全屏播放视频并且应用程序被发送到睡眠状态时,除非您退出应用程序,否则视频永远无法恢复播放。所以这实际上和你有同样的问题。
不幸的是,解决方案涉及在AVPlayerViewController
上调用私有函数,因为没有其他方法可以以我知道的任何其他方式退出全屏模式。我的AppDelegate包含播放器视图控制器的实例,当App重新启动活动模式时,会调用以下代码:
let appDelegate = UIApplication.getAppDelegate()
if let player = appDelegate.playerController.player {
if let cl = NSClassFromString("AVFullScreenViewController") {
for window in UIApplication.sharedApplication().windows {
if let pvc = window.rootViewController?.presentedViewController {
if pvc.isKindOfClass(cl) {
let dSel = NSSelectorFromString("exitFullScreenAnimated:completionHandler:")
if appDelegate.playerController.respondsToSelector(dSel) {
appDelegate.playerController.performSelector(dSel, withObject: false, withObject: nil)
}
break
}
}
}
}
player.pause()
appDelegate.playerController.player = nil
appDelegate.playerController.removeFromParentViewController()
appDelegate.playerController.navigationController?.popViewControllerAnimated(false)
}
此代码适用于Swift 2.3,因此您可能需要将其应用于其他Swift或Objective C版本。 请注意,这涉及调用私有API调用,这是一项有风险的业务。 无论如何,我希望这会有所帮助。
另请参阅Apple开发者论坛上的this thread