在iOS 11上滑动时AVPlayerViewController黑屏

时间:2017-09-20 12:15:41

标签: swift video ios11 avplayerviewcontroller

我正在使用AVPlayerViewController在iPad-App上播放视频文件(H.264,AAC,MP4-Container)。 一切都在iOS 10中运行。而且在iOS 11中它正确播放视频。

但是在iOS 11中,当我开始向任何方向滑动时,它会立即使视频变黑并使音频静音。它还会在底部的时间轴旁边显示一个加载指示器。

它也会忽略allowsPictureInPicturePlayback属性,因此它不会在iOS 11上显示PIP-Button。

这是我使用的代码:

avPlayerController = AVPlayerViewController()
avPlayerController?.showsPlaybackControls = true
avPlayerController?.allowsPictureInPicturePlayback = true
avPlayerController?.player = AVPlayer(url: videoUrl as URL)
avPlayerController?.player?.play()            

self.present(self.avPlayerController!, animated: true, completion: nil)            

avPlayerController?.player?.actionAtItemEnd = AVPlayerActionAtItemEnd.none
NotificationCenter.default.addObserver(self, selector: #selector(onVideoCompleted), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.avPlayerController!.player?.currentItem)

此功能可在视频结束时关闭视频播放器:

func onVideoCompleted(notification:Notification) {
    self.avPlayerController?.player = nil
    self.avPlayerController?.dismiss(animated: true, completion: nil)
}

当屏幕黑屏时,我会在控制台中看到它:

AVOutputDeviceDiscoverySession (FigRouteDiscoverer) 
>>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl 
outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery 
mode to DiscoveryMode_Presence (client: MyAppName)

1 个答案:

答案 0 :(得分:6)

好的,我发现了错误: 要在按“完成”时关闭Airplay视频播放,我使用了以下代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    if avPlayerController?.isBeingDismissed ?? false {
        avPlayerController?.player = nil
    }
}

但是在iOS 11中,Apple添加了一项功能,可通过轻扫手势关闭视频播放器。因此,当我滑动时,viewWillAppear函数被调用。 将此代码放在viewDidAppear中修复此问题并保留AirPlay-Fix。