[Swift] AVPlayer, 비디오 사이즈 재설정

안녕하세요 정말 오랜만에.. 블로그 포스팅을 하네요 ㅋㅋㅋ 일을 시작하게 되면서 블로그에 시간을 쓰기가 어렵네요.. 😥 사실 상 제가 블로그를 운영하는 목적이 기술을 공유한다는 느낌보단 습득한 지식에 대한 기록이 더 크다고 생각해요.

노션으로 기록을 계속 하고 있었지만, 다급하게 링크만 넣는 경우도 많아서 확실한 정리가 필요하다고 생각해요 누군가가 제 블로그를 보고 삽질을 멈추길 기도합니다.. ㅋㅋㅋ

AVPlayer 비디오 사이즈

이게 정말 난감한 상황이에요.. 저는 그냥 player 재생만하면 view 사이즈에 맞게 알아서 맞춰서 재생될 줄 알았는데, 역시나 아니죠…

AVPlayLayer에서 videoGravity를 설정해줘야 view frame에 맞춰서 비디오가 재생됩니다.

참고 url

videoGravity 3가지 속성

videoGravity에는 3가지 속성이 있어요

  • static let resize: AVLayerVideoGravity
    • The video should be stretched to fill the layer’s bounds.
  • static let resizeAspect: AVLayerVideoGravity
    • The player should preserve the video’s aspect ratio and fit the video within the layer’s bounds.
  • static let resizeAspectFill: AVLayerVideoGravity
    • The player should preserve the video’s aspect ratio and fill the layer’s bounds.

이렇게 resize, resizeAspect, resizeAspectFill 입니다. 음.. 사실 이게 이미지 한번이라도 넣어보신분들이면 대충 어떤건지 아실거라고 생각이 듭니다..

그래도 한 번 영어를 해석해보자면, resize는 layer bound에 꽉차게 설정되는 거고, resizeAspect는 비디오의 비율을 유지시키고 layer bound에 맞게(fit) 설정, 마지막으로 resizeAspectFill은 비디오의 비율은 지키지만 layer bound에 꽉차게 설정합니다.

표현이 조금 아쉬우신 분들은 한 번 3가지 전부 바꿔가면서 빌드해보세요 ㅋㅋㅋ 가장 좋은 방법입니다. 물론 빌드 시간이 오래걸리면 좀 손해겠지만요.. ㅎㅎ

코드

코드는 아래와 같습니다. 음.. 저는 UIView를 상속받은 custom class를 만들어서 적용을 했습니다.

이 방식은 참고 url 걸어둔 것을 확인하시면 됩니다. 간단하니까 걱정하지말아주세요.

    self.AVPlayerView.player = AVPlayer(url: url)
    self.AVPlayerView.playerLayer.videoGravity = .resize

부디 제 블로그를 보고 해결하셨으면 좋겠습니다. 감사합니다!