iOS/Framework

AVFoundation (2) [AVPlayer, AVPlayerItem]

Hamp 2024. 10. 21. 21:23
반응형

 

이전 AVKit 에서 우리는 미디어 데이터를 재생할 때 별도의 커스텀이 없는 UI를 사용할 때는 AVKit을 이용했다.

 

이번 학습에서는 커스텀 UI를 통해 미디어 데이터를 다뤄보자.

 

AVPlayer란?

정의

 오디오 및 비디오 콘텐츠를 
재생하는데  다양한 제어를 위한 인터페이스를 제공한다. 

 

class AVPlayer : NSObject

 

역할

1. 비디오 및 오디오 재생

  • 로컬 파일뿐만 아니라 네트워크 스트리밍 콘텐츠도 재생할 수 있다

2. 미디어 제어

  • 재생, 일시 정지, 앞으로/뒤로 탐색 등의 기본적인 미디어 제어 기능을 제공한다.

3.시간에 따른 재생 제어

  • 특정 시간으로 점프하거나 현재 재생 시간을 확인할 수 있습니다.

4. 네트워크 스트리밍 지원

  • HTTP Live Streaming (HLS)과 같은 스트리밍 프로토콜을 사용하여 인터넷을 통해 비디오나 오디오를 스트리밍할 수 있다.

5. 비동기 재생 준비

  • AVPlayer는 미디어 파일을 비동기적으로 로드하고 준비하여, 로딩이 완료되기 전에 재생이 가능하다.

특징

 

  • AVPlayer 객체는 AVAsset의 전반적인 playback(녹음, 녹화, 재생)  을 조절하는데 사용
  • AVPlayer 객체가 AVPlayerItem을 이용, AVPlayerItem이 AVAsset을 사용하는 구조다.
  • AVPlayer는 한 번에 하나의 미디어 데이터만 재생할 수 있어 여러 미디어를 순서대로 재생하고 싶으면 AVQueuePlayer를 이용

AVPlayerItem란?

정의

AVPlayer에서 재생할 미디어의 한 개체를 나타내는 클래스다.

 

class AVPlayerItem : NSObject

 

 

 

역할

1. 미디어 트랙 관리

  • 오디오, 비디오, 자막 트랙과 같은 다양한 미디어 트랙을 관리한다.
  • 필요에 따라 특정 트랙을 활성화하거나 비활성화할 수 있다.

2. 재생 상태 추적

  • 미디어 파일이 준비되는 상태, 버퍼링 상태, 재생이 끝나는 시점을 추적할 수 있다.

3. 타임옵저버

재생 시간을 관찰하고 특정 시간에 이벤트를 발생시키는 기능을 제공한다.

 

특징

  • AVPlayerItem은 미디어 파일의 상태나 재생 관련 정보를 관리하며 AVPlayer와 함께 미디어 재생을더 세밀하게
    제어할 수 있게 해준다.
  • AVPlayerItem 사용하는 주요 이유는 재생할 미디어의 상태를 추적하거나 미디어의 일부 속성을 설정 있기 때문이다
  • 또한 여러 항목을 순차적으로 재생할 유용하며, 재생 상태, 버퍼링 상태 등을 모니터링할 있다.

정리하면 AVAsset은 정적인 상태 관리 (총 재생, 시간, 생성,날짜) AVPlayerItem은 동적인 상태 관리
(재생 상태,
현재까지 재생된 시간 )을 관리한다.

 

AVPlayer와 AVPlayerItem은 비시각적인 객체이기 때문에 화면에 영상 출력이 불가능 , 시각적으로 보여주기위해
앞서 배운 AVKit의 AVPlayerViewController를 이용하거나 커스텀이 필요할 경우  AVPlayerLayer을 이용한다.

 


CMTime란?

A structure that represents time.

 

역할

Core Media 프레임워크에서 제공하는 시간 관련 구조체로, 비디오나 오디오 파일에서 시간을 다루기 위한 형식이다.

 

특징

  • CMTime은 특히 AVFoundation에서 오디오 및 비디오 파일의 타임스탬프를 처리하거나, 재생 시간을 조작할 때 자주 사용된다.
  • 부동소수점의 부정확성으로 인한 디테일한 시간의 작업이 필요한 미디어 재생에서의 문제점을 해결하기 위해 사용된다.

구성

1. value

  • 시간의 숫자적인 값을 나낸다. 정수로 표현되며, 실제 시간은 value/timescale로 계산된다.

2.timescale

  • 시간의 단위를 정의하는 값
  • 예를 들어, timescale이 600이면 1초를 600단위로 나누어 표현할 수 있다.

3. flags

  • 시간이 유효한지, 음수인지 등을 나타내는 플래그 값이다.

4. epoch

  • 큰 값으로 표현되는 시간에 사용되며, 주로 복잡한 시간 계산에서 사용된다.

 

참고

 

AVPlayer | Apple Developer Documentation

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

developer.apple.com

 

 

AVQueuePlayer | Apple Developer Documentation

An object that plays a sequence of player items.

developer.apple.com

 

 

CMTime | Apple Developer Documentation

A structure that represents time.

developer.apple.com

 

반응형