티스토리 뷰
AVPlayer를 사용해볼 기회가 생겨서 문서를 정리해보려 합니다.
예전에 비디오 플레이어 프로젝트에 참여했을 때 썼던 기억이 있는데 1년 더 된 것 같네요.
공식문서에 설명된 내용을 정리해보겠습니다.
AVPlayer는 플레이어의 전송 동작을 제어하는 인터페이스를 제공하는 객체입니다.
AVPlayer는 재생과 미디어 자산(asset)의 타이밍을 관리하는 데 사용되는 컨트롤러 객체입니다.
AVPlayer를 사용하여 AVPlayerQuickTime영화 및 MP3 오디오 파일과 같은 로컬 및 원격 파일 기반 미디어와
HTTP 라이브 스트리밍(HLS)을 사용하여 제공되는 시청각 미디어도 재생할 수 있습니다.
AVPlayer는 한 번에 하나의 미디어 자산을 재생하기 위한 것입니다.
replaceCurrentItem(with:) 메서드를 사용하여 플레이어 인스턴스를 재사용하여 미디어 자산(asset)을 재생할 순 있지만
오직 단일 미디어 자산(asset)의 재생만을 관리합니다.
프레임워크 또한 AVPlayer의 서브 클래스 AVQueuePlayer를 제공합니다.
이는 순차적으로 재생되는 미디어 자산(asset)의 대기열을 만들고 관리하는 데 사용합니다.
AVPlayer는 AVFoundation의 모델 AVAsset클래스를 사용하여 미디어 자산(asset)을 재생합니다.
AVAsset은 duration 시간이나 생성 날짜와 같은 미디어의 정적인 측면만 모델링하여 이 자체로 AVPLayer를 재생하는 데는 적합하지 않습니다. 자산(asset)을 재생하기 위해서 AVPlayerItem 인스턴스를 만들어야 합니다. (동적 대응)
AVPlayer는 상태가 지속적으로 변경되는 동적인 객체입니다.
플레이어 상태를 관찰할 수 있는 두 가지 방법이 존재합니다.
일반 상태 관찰:
Key-value observing(KVO)를 사용하여 플레이어의 동적 특성(currentItem이나 재생 속도)의 상태 변화를 관찰(KVO)을 할 수 있습니다.
KVO는 일반적인 상태 관찰 상태에 적합합니다.
observeValue(forKeyPath:of:change:context:)
시간에 따른 상태 관찰:
플레이어의 시간과 같이 지속적으로 변화하는 상태를 관찰하는 것에 적합합니다.
addPeriodicTimeObserver(forInterval:queue:using:)
addBoundaryTimeObserver(forTimes:queue:using:)
이러한 방법을 사용하면 각각 주기적으로 경계별로 시간 변화를 관찰할 수 있습니다.
변경이 발생하면 메서드의 콜백 블록 또는 클로저를 호출해 UI상태 업데이트와 같은 작업을 수행할 수 있는 기회를 제공합니다.
AVPlayer 그리고 AVPlayerItem은 자체적으로 비디오를 화면에 나타낼 수 없습니다.
비디오 콘텐츠를 화면에 표시할 수 있는 두 가지 접근 방식이 있습니다.
AVKit:
비디오 콘텐츠를 표시하는 가장 좋은 방법은 iOS 및 tvOS의 AVKit프레임워크 AVPlayerViewController클래스
또는 macOS의 AVPlayerView 클래스를 사용하는 것입니다.
이러한 클래스는 재생 컨트롤 및 기타 미디어 기능과 함께 비디오 콘텐츠를 제공하여 재생할 수 있는 환경들을 제공해줍니다.
AVPlayerLayer:
플레이어에 대한 사용자 정의 인터페이스를 구축할 때 AVPlayerLayer를 사용합니다.
플레이어 레이어는 뷰의 백업 레이어로 설정하거나 레이어 계층 구조에 직접 추가할 수 있습니다.
AVPlayerView와 AVPlayerViewController과 다르게 재생 컨트롤을 표시하지 않습니다.
플레이어 재생 컨트롤 (재생, 정지, 탐색 기능)은 만드는 사람에게 달렸습니다.
AVKit 또는 AVPlayerLayer으로 표시되는 시각적인 컨텐츠와 함께 AVSynchronizedLayer를 사용해서 플레이어의 타이밍에 맞춰 동기화된 애니메이션 콘텐츠를 표시할 수 있습니다.
또한 AVSynchronizedLayer를 사용해서 Core Animation의 커스텀한 효과를 낼 수 있습니다.
아래와 같이 재생을 관리하기 위한 여러 함수, 변수 그리고 enum이 존재합니다.
이외에도 여러 함수 변수들이 존재하니 상황에 맞게 공식문서를 참고하시면서 개발하시면 좋을 것 같습니다.
resource:
'Tech > iOS' 카테고리의 다른 글
UIKit와 Foundation프레임워크 선언 (0) | 2020.12.28 |
---|---|
AVPlayerViewController 살펴보기 (0) | 2020.11.10 |
AVPlayer에서 플레이어 상태 파악하기 (0) | 2020.10.12 |
NSLineBreakMode byTruncatingHead,Tail,Middle비교 (0) | 2020.09.09 |
CollectionView 살펴보기4 (UICollectionViewCell) (0) | 2020.09.06 |
- Total
- Today
- Yesterday
- 독서
- 문자열
- swiftUI
- wwdc
- 스위프트UI
- 머신러닝
- Deep learning
- ReactiveX
- Animation
- 스위프트
- Xcode
- iOS SwiftUI
- leetcode
- SWIFT
- 책 후기
- objective-c
- swift5
- ios
- Algorithm
- objc
- 책 추천
- stanford SwiftUI
- string
- ARC
- RX
- 애니메이션
- 딥러닝
- 책
- 알고리즘
- rxswift
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |