이전 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
- 큰 값으로 표현되는 시간에 사용되며, 주로 복잡한 시간 계산에서 사용된다.
참고
'iOS > Framework' 카테고리의 다른 글
[ 부스트 캠프 ] Shook 서비스 플레이어 만들기 (0) | 2024.12.01 |
---|---|
AVFoundation (4) [AVAudioSession] (3) | 2024.10.22 |
AVFoundation (3) [AVPlayerLayer] (1) | 2024.10.22 |
AVKit (4) | 2024.10.21 |
AVFoundation (1) [AVAsset] (1) | 2024.10.21 |