iosobjective-cavplayeravplayerviewcontrolleravplayeritem

AVPlayerViewController stops after returning from full screen


I have an AVPlayerViewController which I initialize with an AVPlayer and some AVPlayerItem (iOS 10, Xcode 8, Objective C). The AVPlayerViewController is presented "inline" inside some subview, and everything works perfectly with the native playback controls.

When I press the native fullscreen button, it also works ok and switches to full screen mode (with Done button on top left).

My problem is when I press the Done button to return from full screen, the player for some reason stops playing, resets itself, and if I check .currentItem, I see it's nil.

What's happening here? Why can't AVPlayerViewController maintain its AVPlayerItem in between switching from/to full screen?


Solution

  • Since it looks like the current behavior of AVPlayerViewController is to pause when exiting full screen, we can call play() when exiting by implementing the delegate:

    class VideoView {
    
        private var playerViewController: AVPlayerViewController?
    
        func something() {
    
            playerViewController = AVPlayerViewController()
    
            // Other setups
    
            playerViewController?.delegate = self
        }
    }
    
    extension VideoView: AVPlayerViewControllerDelegate {
    
        func playerViewController(_ playerViewController: AVPlayerViewController, willEndFullScreenPresentationWithAnimationCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    
            // The system pauses when returning from full screen, we need to 'resume' manually.
            coordinator.animate(alongsideTransition: nil) { transitionContext in
                self.playerViewController?.player.play()
            }
        }
    }