iOS/Framework

AVFoundation (1) [AVAsset]

Hamp 2024. 10. 21. 17:38
반응형

부스트 캠프의 여정이 어느새 마무리 단계인 그룹미션이 어느새 다음 주로 다가왔다.

이번주부터 1주일 정도 개인 공부를 할 수 있는 시간이 있어서 나는 평소에 관심있던 스트리밍쪽 기술을 공부해보려고한다.

스트리밍 쪽 공부를 하기 위해 가장 기본이 되는 기술이 AVFoundation이라고 많이 추천을 해주셨다. 

 

이번에 한번 깊이 공부해보자.

 

AVFoundation이란?

AVFoundation이란 apple 생태계에서 미디어와 관련된 모든 측면을 다룰 수 있는 
매우 유연하고 확장 가능한 프레임워크이다.

Work with audiovisual assets, control device cameras, process audio, and configure system audio interactions.

 

역할

1. 미디어 재생 (Playback)

  • AVPlayerAVPlayerViewController를 사용하여 비디오와 오디오 파일을 재생할 수 있다.
  • 네트워크 스트리밍 콘텐츠, 로컬 파일, HTTP 라이브 스트리밍(HLS) 지원한다.

2. 오디오/비디오 녹화 (Recording)

  • AVCaptureSessionAVCaptureDevice를 통해 카메라 및 마이크 입력을 제어하고 녹화할 수 있다.
  • 녹화된 미디어를 실시간으로 처리하거나 저장할 수 있다.

3. 미디어 편집 (Editing)

  • AVAsset을 사용하여 비디오와 오디오 클립을 다루고, 자르기, 병합, 트랙 추가 등의 작업을 할 수 있다.
  • AVMutableComposition을 사용하여 여러 트랙을 결합하거나 비디오에 오디오를 추가할 수 있다.

4. 실시간 미디어 처리 (Realtime Processing)

  • AVCaptureVideoDataOutputAVCaptureAudioDataOutput을 사용해 실시간으로
    미디어 데이터를 처리하고 필터를 적용할 수 있다.
  • Metal이나 Core Image와 같은 기술을 사용해 비디오 프레임에 실시간 효과를 적용할 수 있다.

5. 메타데이터 관리 (Metadata)

  • 미디어 파일에 저장된 메타데이터를 추출하거나 추가할 수 있다. 예를 들어, 동영상의 자막을 추가하거나 편집할 수 있다.

6. 파일 포맷 및 인코딩

  • AVAssetExportSession을 사용하여 비디오 파일을 다른 포맷으로 변환하거나 압축할 수 있다.
  • H.264, HEVC, AAC와 같은 다양한 코덱을 지원합니다.

7. 동기화 및 타이밍 제어 (Synchronization\;and\;Timing)

  • CMTimeCMTimeRange를 사용하여 시간 기반의 미디어 처리나 비디오 클립 사이의 정확한 동기화 작업을 할 수 있다.

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을 그대로 상속받은 것을 볼 있다. 


참고

 

AVFoundation | Apple Developer Documentation

Work with audiovisual assets, control device cameras, process audio, and configure system audio interactions.

developer.apple.com

 

 

AVAsset | Apple Developer Documentation

An object that models timed audiovisual media.

developer.apple.com

 

 

AVAsynchronousKeyValueLoading | Apple Developer Documentation

A protocol that defines the interface to load media data asynchronously.

developer.apple.com

 

반응형