-
[Apple Dev Reference] AVPlayer앱등이에게 살충제를 뿌린다./Apple Dev Reference 2018. 11. 2. 21:58
Declaration
class AVPlayer: NSObject
Overview
Note
하나의 AV미디어를 재생하기 위해 사용한다.
replaceCurrentItem(with:)를 사용하면 현재 재생하고 있는 미디어를 다른 미디어로 교체할 수 있다.
AVPlayer의 서브클래스인 AVQueuePlayer를 사용하면 여러개의 미디어를 큐에 담아 연속적으로 재생할 수 있다.
AVPlayer는 미디어의 재생과 타임을 관리할 수 있는 컨트롤러다.
로컬에 있거나 리모트에 있는 file-based 미디어를 재생할 수 있다. QuickTime 비디오, MP3오디오, HTTP Live Streaming 등
AVPlayer에 미디어를 재생하려면 AVFoundation에 있는 모델 클래스, AVAsset을 사용해야 한다.
AVAsset은 미디어의 static한 데이터를 갖고 있다. duration, creation date, own, suitable for playback 등
AVAsset을 AVPlayer에서 실행하려면 AVPlayerItem이라는 객체를 생성해야 한다. 이 모델에는 AVPlayer의 미디어 재생 시간, presentation state등이 있다.
AVPlayer는 상태변화가 계속 일어나는 dynamic객체다.
AVPlayer의 상태변화를 Observe하는 방법은 두 가지가 있다.
1. General State Observations
Key-value observing(KVO)를 사용하여 플레이어의 currentItem, playback rate등의 상태를 Observe할 수 있다.
KVO를 위한 register, unregister는 항상 메인스레드에서 해야 한다. AVFoundation은 observeValue(forKeyPath:of:change:context:)를 메인 스레드에서 호출하기 때문이다.
2. Timed State Observations
KVO가 대부분의 상황에 적절한 방법이지만, 플레이 타임같은 계---속 바뀌는 상태 Observe에는 적합하지 않다. AVPlayer는 시간을 Observe하는 두 개의 메소드를 제공한다.
- addPeriodicTimeObserver(forInterval:queue:using:)
- addBoundaryTimeObserver(forTimes:queue:using:)
AVPlayer와 AVPlayerItem은 nonvisual객체다. 즉, 이 둘만 있다고 해서 스크린에 비디오가 재생되지는 않는다.(화면에 띄울 View 또는 Layer가 필요하겠죠?)
화면에 영상을 재생시키는 방법은 두 가지가 있다.
1. AVKit
AVKit프레임워크의 AVPlayerViewController를 사용하는게 가장 쉽고 편하다.(macOS에서는 AVPlayerView)
기본적인 비디오 컨트롤도 제공된다.
2. AVPlayerLayer
만약 재생화면을 커스터마이징 하고자 한다면, AVPlayerLayer를 사용하자.
CALayer의 서브클래스다. 비디오 컨트롤이 제공되지 않기 때문에 알아서 만들어야 한다.
출처: https://developer.apple.com/documentation/avfoundation/avplayer
'앱등이에게 살충제를 뿌린다. > Apple Dev Reference' 카테고리의 다른 글
[AVFoundation] Observing the Playback Time (동영상의 재생시간 Observe하기) (0) 2018.11.06 [AVFoundation] About the Asset Model (AVAsset에 관하여) (0) 2018.11.06 [Apple Dev Reference - Advanced Swift] Initialization (1) (0) 2016.10.24 [Apple Dev Reference] Nullability and Objective-C (0) 2016.05.22 [Apple Dev Reference - Swift] Nonescaping Closures (0) 2016.05.22