web-dev-qa-db-ja.com

iOS11でスワイプするとAVPlayerViewControllerの黒い画面

AVPlayerViewControllerを使用して、iPad-Appでビデオファイル(H.264、AAC、MP4-Container)を再生しています。すべてがiOS10で機能しています。また、iOS11でもビデオが正しく再生されます。

しかし、iOS 11では、任意の方向にスワイプし始めると、すぐにビデオが黒くなり、オーディオもミュートされます。また、下部のタイムラインの横に読み込みインジケーターが表示されます。

また、allowsPictureInPicturePlaybackプロパティを無視するため、iOS11では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)
7
fl034

間違いを見つけました。「完了」を押したときにAirplayビデオの再生を閉じるために、次のコードを使用しました。

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

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

しかし、iOS 11では、Appleは、スワイプジェスチャを介してビデオプレーヤーを閉じる機能を追加しました。したがって、スワイプすると、viewWillAppear関数が呼び出されます。このコードをviewDidAppear内に配置すると、これが修正され、AirPlayが保持されます。 -修正。

6
fl034