Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- AVFoundation
- NSUserActivity
- async
- Object Capture
- ProRAW
- DooC
- detent
- Physical Audio
- SF Symbols
- AR Quick Look
- SF Symbols 3.0
- WWDC 2021
- profile
- SWiFT
- MDM
- DriverKit
- METAL
- concurrency
- Reality Composer
- Xcode Cloud
- Hand Action Detect
- Hand Pose Detect
- Xcode Organizer
- User Enrollment
- swiftUI
- AppleEvent
- actor
- CoreML
- Mac
- App Clip
Archives
- Today
- Total
nyancoder
WWDC 2021 - What's new in AVKit 본문
원본 영상: 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를 반환하면 복원이 실패했거나 불가능하다는 것을 나타내므로, 애니메이션 없이 전체 화면을 종료합니다.
'WWDC > WWDC 2021' 카테고리의 다른 글
WWDC 2021 - What's new in SwiftUI (0) | 2021.07.11 |
---|---|
WWDC 2021 - Add intelligence to your widgets (0) | 2021.07.09 |
WWDC 2021 - What’s new in camera capture (0) | 2021.07.07 |
WWDC 2021 - Detect and diagnose memory issues (0) | 2021.07.06 |
WWDC 2021 - What’s new in AVFoundation (0) | 2021.07.05 |
Comments