https://developer.apple.com/documentation/avfoundation/avplayer
An object that provides the interface to control the player’s transport behavior.
플레이어의 트랜스포트 동작을 제어하기 위한 인터페이스를 제공하는 객체입니다.
class AVPlayer : NSObject
플레이어는 미디어 에셋의 재생 및 타이밍을 관리하는 컨트롤러 객체입니다. AVPlayer
인스턴스를 사용해서 로컬 및 리모트 파일 기반 미디어를 재생할 수 있으며, 퀵타임 무비, MP3 오디오 파일, HTTP 라이브 스트리밍을 사용하는 오디오시각 미디어와 같은 것들이 대표적입니다.
한 시점에 단일 미디어 에셋을 재생하기 위해 플레이어를 사용할 수 있습니다. replaceCurrentItem(with:)
메소드를 사용해서 추가적인 미디어 에셋들을 재생하기 위해 플레이어 인스턴스를 재사용할 수 있습니다. 하지만 한 시점에 하나의 미디어 에셋 재생만을 관리할 수 있습니다. 프레임워크는 AVQueuePlayer
라고 하는 클래스의 서브클래스 역시 제공하고 있으며, 연속적으로 재생되는 미디어 에셋의 큐를 생성하거나 관리하기 위해 사용할 수 있습니다.
AVAsset
클래스를 통해서 AVFoundation
이 모델링한 미디어 에셋 재생을 위해 AVPlayer
를 사용할 수도 있습니다. AVAsset
은 듀레이션 혹은 생성 시점과 같은 미디어의 정적 특성만을 모델링할 수 있으며, AVPlayer
를 사용한 재생에는 적합하지 않습니다. 에셋을 재생하려면 AVPlayerItem
에서 찾을 수 있는 동적 카운터파트의 인스턴스를 생성해야 합니다. 이 객체는 AVPlayer
의 인스턴스에 의해 재생되는 자산의 타이밍 및 표시 상태를 모델링합니다. 자세한 내용은 AVPlayerItem
레퍼런스를 살펴보시기 바랍니다.
AVPlayer
는 상태가 연속적으로 변화하는 동적 객체입니다. 플레이어의 상태를 관찰하려면 두 가지 접근 방식을 통해 관찰이 가능합니다.
currentItem
혹은 재생 rate와 같은 플레이어의 여러 동적 속성 상태 변화를 관찰하려고 할 때 KVO(key-value observing)를 사용할 수 있습니다.AVPlayer
는 시간 변화를 관찰하기 위해 두 메소드를 제공합니다.addPeriodicTimeObserver(forInterval:queue:using:)
addBoundaryTimeObserver(forTimes:queue:using:)
AVPlayer
및 AVPlayerItem
은 비시각적 객체입니다. 즉 에셋의 비디오를 나타낼 수는 없다는 것을 의미합니다. 비디오 컨텐트를 스크린에 나타나도록 하려면 두 가지 접근법을 사용할 수 있습니다.
AVKit
프레임워크의 AVPlayerViewController
를, macOS에서는 AVPlayerView
클래스를 사용해서 비디오 컨텐트를 제공하는 것이 최선의 방법입니다. 이 클래스들은 비디오 컨텐트를 제공함과 동시에 재생 제어 및 다른 미디어 기능 역시 제공합니다.AVPlayerLayer
를 사용해야 합니다. 이 레이어는 뷰의 레이어 혹은 직접 레이어 계층구조에 추가해서 설정할 수 있습니다. AVPlayerView
및 AVPlayerViewController
와 다르게 플레이어 레이어는 어떠한 재생 제어도 제공하지 않으며, 시각적 컨텐트만을 스크린테 나타냅니다. 재생, 일시정지, 미디어 추적을 위한 트랜스포트 컨트롤은 직접 구현해야 합니다.AVKit
혹은 AVPlayerLayer
를 사용해 시각적 컨텐트를 제공함과 동시에 AVSynchronizedLayer
를 사용하면 플레이어의 시간에 동기화된 애니메이션 컨텐트를 제공할 수도 있습니다. 동기화된 레이어를 사용해서 레이어 하위트리에 플레이어 타이밍을 제공할 수 있습니다. 코어애니메이션에서 커스텀 효과를 빌드하기 위해 AVSynchronizedLayer
를 사용할 수도 있으며, 플레이어의 현재 AVPlayerItem
타이밍을 사용해 동기화할 수도 있습니다.