11import AVFoundation
2+ import AVKit
23
34open class AVFoundationPlayback : Playback , AVPlayerItemInfoDelegate {
45 open class override var name : String { " AVPlayback " }
@@ -21,7 +22,12 @@ open class AVFoundationPlayback: Playback, AVPlayerItemInfoDelegate {
2122 }
2223
2324 var itemInfo : AVPlayerItemInfo ?
24- private var playerLayer : AVPlayerLayer !
25+ private var playerLayer : AVPlayerLayer ! {
26+ willSet {
27+ guard let layer = newValue else { return }
28+ setupPictureInPicture ( layer: layer)
29+ }
30+ }
2531 private var playerStatus : AVPlayerItem . Status = . unknown
2632 private var isStopped = false
2733 private var timeObserver : Any ?
@@ -204,6 +210,8 @@ open class AVFoundationPlayback: Playback, AVPlayerItemInfoDelegate {
204210 return playbackType == . live ? isDvrAvailable : !duration. isZero
205211 }
206212
213+ private var pictureInPictureController : AVPictureInPictureController !
214+
207215 @available ( * , unavailable)
208216 public required init ? ( coder _: NSCoder ) {
209217 fatalError ( " init(coder:) has not been implemented " )
@@ -795,3 +803,31 @@ open class AVFoundationPlayback: Playback, AVPlayerItemInfoDelegate {
795803 }
796804 }
797805}
806+
807+ extension AVFoundationPlayback : AVPictureInPictureControllerDelegate {
808+ func setupPictureInPicture( layer: AVPlayerLayer ) {
809+ if AVPictureInPictureController . isPictureInPictureSupported ( ) {
810+ pictureInPictureController = AVPictureInPictureController ( playerLayer: layer)
811+ pictureInPictureController? . delegate = self
812+ print ( " ### \( #function) " )
813+ }
814+ else {
815+ print ( " ### Picture in Picture Supported: \( AVPictureInPictureController . isPictureInPictureSupported ( ) ) " )
816+ }
817+ }
818+
819+ public func pictureInPictureController( _ pictureInPictureController: AVPictureInPictureController ,
820+ restoreUserInterfaceForPictureInPictureStopWithCompletionHandler completionHandler: @escaping ( Bool ) -> Void ) {
821+ completionHandler ( true )
822+ }
823+
824+ public func pictureInPictureControllerWillStartPictureInPicture( _ pictureInPictureController: AVPictureInPictureController ) {
825+ print ( " ### \( #function) " )
826+ trigger ( Event . disableMediaControl)
827+ }
828+
829+ public func pictureInPictureControllerDidStopPictureInPicture( _ pictureInPictureController: AVPictureInPictureController ) {
830+ print ( " ### \( #function) " )
831+ trigger ( Event . enableMediaControl)
832+ }
833+ }
0 commit comments