AVPlayerViewController在iOS 11上滑动时出现黑屏问题

7
我正在使用AVPlayerViewController播放iPad应用程序上的视频文件(H.264,AAC,MP4容器)。在iOS 10中一切正常。在iOS 11中,当我开始向任何方向滑动时,它会立即使视频变黑并静音。它还在底部时间轴旁边显示了一个加载指示器。此外,它忽略了allowsPictureInPicturePlayback属性,因此在iOS 11上不会显示PIP按钮。这是我使用的代码:
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个回答

6
好的,我发现了错误: 要在按“完成”时关闭Airplay视频播放,我使用了以下代码:
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

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

但是在iOS 11中,苹果添加了一个通过滑动手势关闭视频播放器的功能。因此,当我滑动时,viewWillAppear函数会被调用。 将这段代码放在viewDidAppear中可以解决问题并保留AirPlay修复功能。

我遇到了一个类似的问题,只有在从MPMoviePlayerViewController切换到AVPlayerViewController时才会发生。在点击MPMoviePlayer的“完成”按钮后,我会在控制台中收到以下错误消息: 将设备发现模式设置为DiscoveryMode_None(客户端:APPNAME)[播放]❗️无法排队任何项。 之后,即使我尝试通过将播放器设置为空来解决上述问题,AVPLayer视频也无法播放并且被冻结。这只会在设备通过AirPlay连接时发生。 - Kushal Ashok
谢谢您提供这个信息。我希望早知道iOS 11已经增加了这个功能。之前我一直在按照苹果发布的视频播放样例进行开发,在那个范例中他们也在视图将要出现的viewWillAppear 方法中终止了视频播放。 - Dan Morrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接