2

I have a view with layer(AVPlayerLayer) that contains video player(AVPlayer).

I used code from developer.apple.com to show video on the screen.

@implementation PlayerView
+ (Class)layerClass {
    return [AVPlayerLayer class];
}
- (AVPlayer*)player {
    return [(AVPlayerLayer *)[self layer] player];
}
- (void)setPlayer:(AVPlayer *)player {
    [(AVPlayerLayer *)[self layer] setPlayer:player];
}
@end

How i can get size of the video in playerview.frame? I can't use videoGravity for fill entire frame of the view, because i need to display landscape and portrait video.

Cœur
  • 37,241
  • 25
  • 195
  • 267
Andrey Banshchikov
  • 1,558
  • 2
  • 15
  • 27

2 Answers2

2

You can use videoRect property of the AVPlayerLayer. You can read more about it in the documentation.

Vahan Babayan
  • 723
  • 7
  • 21
0

2022 SwiftUI Approach

struct PlayerViewController: UIViewControllerRepresentable {
    
    private let avController =  AVPlayerViewController()
    var videoURL: URL?
    private var player: AVPlayer {
        return AVPlayer(url: videoURL!)
    }
    
    //  HERE 
    func getVideoActualSize() -> CGRect {
        self.avController.videoBounds
    }

    func makeUIViewController(context: Context) -> AVPlayerViewController {
        avController.modalPresentationStyle = .fullScreen
        avController.player = player
        avController.player?.play()
        return avController
    }

    func updateUIViewController(_ playerController: AVPlayerViewController, context: Context) {}
}
Mamad Farrahi
  • 394
  • 1
  • 5
  • 20