부스트 캠프의 여정이 어느새 마무리 단계인 그룹미션이 어느새 다음 주로 다가왔다.
이번주부터 1주일 정도 개인 공부를 할 수 있는 시간이 있어서 나는 평소에 관심있던 스트리밍쪽 기술을 공부해보려고한다.
스트리밍 쪽 공부를 하기 위해 가장 기본이 되는 기술이 AVFoundation이라고 많이 추천을 해주셨다.
이번에 한번 깊이 공부해보자.
AVFoundation이란?
AVFoundation이란 apple 생태계에서 미디어와 관련된 모든 측면을 다룰 수 있는
매우 유연하고 확장 가능한 프레임워크이다.
Work with audiovisual assets, control device cameras, process audio, and configure system audio interactions.
역할
1. 미디어 재생 (Playback)
- AVPlayer와 AVPlayerViewController를 사용하여 비디오와 오디오 파일을 재생할 수 있다.
- 네트워크 스트리밍 콘텐츠, 로컬 파일, HTTP 라이브 스트리밍(HLS) 지원한다.
2. 오디오/비디오 녹화 (Recording)
- AVCaptureSession과 AVCaptureDevice를 통해 카메라 및 마이크 입력을 제어하고 녹화할 수 있다.
- 녹화된 미디어를 실시간으로 처리하거나 저장할 수 있다.
3. 미디어 편집 (Editing)
- AVAsset을 사용하여 비디오와 오디오 클립을 다루고, 자르기, 병합, 트랙 추가 등의 작업을 할 수 있다.
- AVMutableComposition을 사용하여 여러 트랙을 결합하거나 비디오에 오디오를 추가할 수 있다.
4. 실시간 미디어 처리 (Realtime Processing)
- AVCaptureVideoDataOutput과 AVCaptureAudioDataOutput을 사용해 실시간으로
미디어 데이터를 처리하고 필터를 적용할 수 있다. - Metal이나 Core Image와 같은 기술을 사용해 비디오 프레임에 실시간 효과를 적용할 수 있다.
5. 메타데이터 관리 (Metadata)
- 미디어 파일에 저장된 메타데이터를 추출하거나 추가할 수 있다. 예를 들어, 동영상의 자막을 추가하거나 편집할 수 있다.
6. 파일 포맷 및 인코딩
- AVAssetExportSession을 사용하여 비디오 파일을 다른 포맷으로 변환하거나 압축할 수 있다.
- H.264, HEVC, AAC와 같은 다양한 코덱을 지원합니다.
7. 동기화 및 타이밍 제어 (Synchronization\;and\;Timing)
- CMTime과 CMTimeRange를 사용하여 시간 기반의 미디어 처리나 비디오 클립 사이의 정확한 동기화 작업을 할 수 있다.
8. 사진 촬영 (Photo Capture)
- AVCapturePhotoOutput을 사용해 고화질 사진을 찍고, 다양한 카메라 설정을 조정할 수 있다.
- HDR, 플래시, 초점 등의 기능을 제어할 수 있다.
AVAsset이란?
AVFoundation에서 사용되는 미디어 자산을 나타내는 핵심 클래스다.
class AVAsset : NSObject
오디오나 비디오 파일, 혹은 네트워크 스트림과 같은 미디어의 정보(메타데이터)를 읽고 처리하는 데 사용된다.
AVAsset은 미디어 데이터를 직접적으로 다루기보다는 그 데이터를 설명하는 객체로, 동영상, 오디오 트랙, 자막,
메타데이터 등의 미디어 파일에 대한 정보를 제공한다.
역할
url로 미디어를 객체화하는 역할
특징
1. 불변 객체
- AVAsset 자체는 불변 객체입니다. 즉, 이 클래스는 미디어의 상태나 내용을 직접 수정할 수 없다.
- 미디어의 읽기 작업에만 사용되며, 편집을 원할 경우에는 다른 클래스를 사용해야 한다.
2. 미디어 데이터에 대한 정보 제공
- 미디어 파일의 트랙, 시간 범위, 메타데이터와 같은 중요한 정보를 제공한다.
예를 들어, 비디오 파일에 몇 개의 오디오 트랙이 있는지, 각 트랙의 길이는 얼마인지 등을 알 수 있다.
3. 비동기적 속성 로딩
- AVAsset은 미디어 자원의 정보(예: 비디오 길이, 트랙 정보 등)를 비동기적으로 로드한다.
- 미디어 데이터는 용량이 크기 때문에 데이터를 효율적으로 불러올 수 있도록, 필요할 때만 해당 정보를 읽어들이는 방식이다.
- 이 기능을 구현하기 위해 AVAsynchronousKeyValueLoading을 프로토콜을 채택한다,
- media data를 비동기적으로 load할 수 있게 만들어주는 인터페이스 를 정의한 프로토콜이다.
4. 파일, URL 및 스트림 지원
- AVAsset은 로컬 파일뿐만 아니라, 원격 URL이나 스트리밍 콘텐츠도 처리할 수 있다.
- AVAsset을 사용할 때 URL을 통해 사용될 때, 현재 iOS18에서 ⚠️deprecated 되어 AVURLAsset으로 대체할 수 있다.
- 정의 부분을 보면 AVAsset을 그대로 상속받은 것을 볼 있다.
참고
'iOS > Framework' 카테고리의 다른 글
[ 부스트 캠프 ] Shook 서비스 플레이어 만들기 (0) | 2024.12.01 |
---|---|
AVFoundation (4) [AVAudioSession] (3) | 2024.10.22 |
AVFoundation (3) [AVPlayerLayer] (1) | 2024.10.22 |
AVFoundation (2) [AVPlayer, AVPlayerItem] (0) | 2024.10.21 |
AVKit (4) | 2024.10.21 |