nyancoder

WWDC 2021 - What's new in AVKit 본문

WWDC/WWDC 2021

WWDC 2021 - What's new in AVKit

nyancoder 2021. 7. 8. 02:25

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10290/

 

Picture in Picture

  • 사용자가 다른 작업을 하면서 동시에 비디오를 계속 시청할 수 있는 기능이 Picture in Picture입니다.
  • 비디오를 계속 보면서 중간에 메시지에 대한 답장을 하는 식의 동작을 할 수 있습니다.

  • 올해에는 사용자가 홈 화면으로 이동했을 때에도 PiP 화면이 동작하는 기능이 추가되었습니다.
  • 이 동작을 활성화하려면 AVPlayerViewController나 AVPictureInPictureController의 canStartPictureInPicture AutomaticallyFromInline 속성을 true로 설정하면 됩니다.
  • AVPlayerViewController를 사용하여 비디오를 재생하는 경우에는 추가적인 수정이 필요하지 않습니다.

  • AVPlayerViewController를 사용하지 않는 경우에는 AVPictureInPictureController를 사용하여 구성할 수 있습니다.
  • 앱의 오디오 세션 카테고리를 playback으로 구성하고 PiP 백그라운드 모드를 활성화해야 합니다.
  • 그다음 AVPictureInPictureController를 만들고 playerLayer를 전달하는 것입니다.
  • 이후 사용자가 PIP 전환을 시도할 때, PiP 시작 또는 중지를 호출하면 됩니다.

  • AVSampleBufferDisplayLayer에 대해서도 동일한 PiP지원이 추가되었습니다.
  • AVPlayerLayer 또는 AVSampleBufferDisplayLayer를 사용하여 ContentSource를 생성한 뒤 AVPictureInPictureController에 전달하여 생성할 수 있습니다.

  • PiP에서의 재생은 AVPlayer에서 관리되지 않기 때문에 PiP UI를 적절히 표시하기 위해서 AVPictureInPictureSampleBufferPlaybackDelegate를 통해 정보를 받아야 합니다.
  • 사용자가 PiP UI에서 제어하려고 하면 적절한 이벤트가 Delegate로 전달됩니다.

  • setPlaying 함수는 사용자가 PiP 창에서 Play / Pause 버튼을 누르면 호출됩니다.
  • skipByInterval 함수는 사용자가 +15 / -15로 건너뛰는 버튼을 누를 때 호출됩니다.

  • timeRangeForPlayback 함수를 사용하면 현재 재생 가능한 시간 범위 반환할 수 있습니다.
  • 한정된 시간 범위를 리턴할 때는 항상 현재 재생되고 있는 시간이 포함되어야 합니다.
  • 라이브 콘텐츠를 나타내려면 지속 시간이 무제한인 시간 범위를 리턴해야 합니다.

  • didTransitionToRenderSize 함수는 핀치 투 줌 (pinch-to-zoom)과 같이 PIP 창의 크기가 변경될 때 호출됩니다.
  • 변경된 화면 크기에 적절한 미디어를 선택하여 불필요한 디코딩 연산을 줄일 수 있습니다.

  • isPlaybackPaused 함수는 주기적으로 호출되며, 일시 중지 또는 재생 상태를 PiP UI에 전달하기 위해 리턴합니다.

 

Mac full screen experience

  • 이전 버전에서는 동영상 플레이어의 전체 화면 버튼을 누르면 해당 프로그램 윈도를 가득 채웠습니다.

  • 새 macOS Monterey에서는 전체 화면 버튼을 누를 경우 화면을 가득 채우게 됩니다.

  • 기본 macOS 전체 화면 환경과 마찬가지로 사용자는 앱 창으로 다시 스 와이프 할 수 있습니다.
  • 원본 비디오 대신 자리 표시자가 표시되어 콘텐츠가 전체 화면으로 재생 중임을 나타냅니다.

  • 사용자가 동영상이 있는 페이지를 벗어나더라도 재생이 유지되도록 하기 위해서 willBeginFullScreenPresentation 이벤트를 받을 때 viewController를 전달받아 참조를 유지해야 합니다.
  • 그렇지 않은 경우 페이지를 벗어나면 전체 화면 재생이 종료됩니다.

  • 사용자가 전체 화면을 종료하면 willEndFullScreenPresentation 콜백을 받습니다.
  • 이때 참조를 유지하던 playerViewController를 해제할 수 있습니다.

  • macOS에서도 동일하게 새 playerViewDelegate를 사용하여 처리할 수 있습니다.
  • playerViewWillExitFullScreen 콜백을 받을 때까지 playerView의 참조를 유지하여 재생 상태를 유지할 수 있습니다.

  • 사용자가 전체 화면을 종료하면 restoreUserInterface 콜백이 수신됩니다.
  • 이때 원한다면 동영상이 포함된 원본 페이지로 이동할 수 있습니다.
  • 결괏값은 가능항 빨리 반환해야 화면의 전환이 지연되지 않습니다.
  • 리턴 값을 false를 반환하면 복원이 실패했거나 불가능하다는 것을 나타내므로, 애니메이션 없이 전체 화면을 종료합니다.

 

목차: https://nyancoder.tistory.com/2

Comments