Skip to content
This repository was archived by the owner on Jan 16, 2023. It is now read-only.

Commit 8654150

Browse files
helbertgsagripinogabriel
authored andcommitted
chore: test picture in picture
1 parent ae3614d commit 8654150

File tree

1 file changed

+37
-1
lines changed

1 file changed

+37
-1
lines changed

Sources/Clappr/Classes/Plugin/Playback/AVFoundationPlayback.swift

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import AVFoundation
2+
import AVKit
23

34
open 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

Comments
 (0)