AVPlayer

Horus-iOS·2022년 6월 16일
0

https://developer.apple.com/documentation/avfoundation/avplayer

An object that provides the interface to control the player’s transport behavior.

플레이어의 트랜스포트 동작을 제어하기 위한 인터페이스를 제공하는 객체입니다.

Declaration

class AVPlayer : NSObject

Overview

플레이어는 미디어 에셋의 재생 및 타이밍을 관리하는 컨트롤러 객체입니다. AVPlayer 인스턴스를 사용해서 로컬 및 리모트 파일 기반 미디어를 재생할 수 있으며, 퀵타임 무비, MP3 오디오 파일, HTTP 라이브 스트리밍을 사용하는 오디오시각 미디어와 같은 것들이 대표적입니다.

한 시점에 단일 미디어 에셋을 재생하기 위해 플레이어를 사용할 수 있습니다. replaceCurrentItem(with:) 메소드를 사용해서 추가적인 미디어 에셋들을 재생하기 위해 플레이어 인스턴스를 재사용할 수 있습니다. 하지만 한 시점에 하나의 미디어 에셋 재생만을 관리할 수 있습니다. 프레임워크는 AVQueuePlayer라고 하는 클래스의 서브클래스 역시 제공하고 있으며, 연속적으로 재생되는 미디어 에셋의 큐를 생성하거나 관리하기 위해 사용할 수 있습니다.

AVAsset 클래스를 통해서 AVFoundation이 모델링한 미디어 에셋 재생을 위해 AVPlayer를 사용할 수도 있습니다. AVAsset은 듀레이션 혹은 생성 시점과 같은 미디어의 정적 특성만을 모델링할 수 있으며, AVPlayer를 사용한 재생에는 적합하지 않습니다. 에셋을 재생하려면 AVPlayerItem에서 찾을 수 있는 동적 카운터파트의 인스턴스를 생성해야 합니다. 이 객체는 AVPlayer의 인스턴스에 의해 재생되는 자산의 타이밍 및 표시 상태를 모델링합니다. 자세한 내용은 AVPlayerItem 레퍼런스를 살펴보시기 바랍니다.

AVPlayer는 상태가 연속적으로 변화하는 동적 객체입니다. 플레이어의 상태를 관찰하려면 두 가지 접근 방식을 통해 관찰이 가능합니다.

  • General State Observations: currentItem 혹은 재생 rate와 같은 플레이어의 여러 동적 속성 상태 변화를 관찰하려고 할 때 KVO(key-value observing)를 사용할 수 있습니다.
  • Timed State Observations: KVO는 일반적인 상태 관찰에 적합하지만, 플레이어의 시간과 같은 연속적으로 변화하는 상태를 관찰하기에는 적합하지 않습니다. AVPlayer는 시간 변화를 관찰하기 위해 두 메소드를 제공합니다.
    • addPeriodicTimeObserver(forInterval:queue:using:)
    • addBoundaryTimeObserver(forTimes:queue:using:)
      이 메소드들은 주기적으로 혹은 경계별로 각각의 시간 변화를 관찰할 수 있도록 해줍니다. 변화가 발생하면 플레이어의 UI 상태 업데이트와 같은 액션을 취할 수 있도록 이 메소드 내에서 콜백 블록 혹은 클로저를 호출하시기 바랍니다.

AVPlayerAVPlayerItem은 비시각적 객체입니다. 즉 에셋의 비디오를 나타낼 수는 없다는 것을 의미합니다. 비디오 컨텐트를 스크린에 나타나도록 하려면 두 가지 접근법을 사용할 수 있습니다.

  • AVKit: iOS 및 tvOS에서는 AVKit 프레임워크의 AVPlayerViewController를, macOS에서는 AVPlayerView 클래스를 사용해서 비디오 컨텐트를 제공하는 것이 최선의 방법입니다. 이 클래스들은 비디오 컨텐트를 제공함과 동시에 재생 제어 및 다른 미디어 기능 역시 제공합니다.
  • AVPlayerLayer: 플레이어에 대한 커스텀 인터페이스를 빌드하려면 AVPlayerLayer를 사용해야 합니다. 이 레이어는 뷰의 레이어 혹은 직접 레이어 계층구조에 추가해서 설정할 수 있습니다. AVPlayerViewAVPlayerViewController와 다르게 플레이어 레이어는 어떠한 재생 제어도 제공하지 않으며, 시각적 컨텐트만을 스크린테 나타냅니다. 재생, 일시정지, 미디어 추적을 위한 트랜스포트 컨트롤은 직접 구현해야 합니다.

AVKit 혹은 AVPlayerLayer를 사용해 시각적 컨텐트를 제공함과 동시에 AVSynchronizedLayer를 사용하면 플레이어의 시간에 동기화된 애니메이션 컨텐트를 제공할 수도 있습니다. 동기화된 레이어를 사용해서 레이어 하위트리에 플레이어 타이밍을 제공할 수 있습니다. 코어애니메이션에서 커스텀 효과를 빌드하기 위해 AVSynchronizedLayer를 사용할 수도 있으며, 플레이어의 현재 AVPlayerItem 타이밍을 사용해 동기화할 수도 있습니다.

0개의 댓글