AVFoundation (1) [AVAsset]

2024. 10. 21. 17:38·iOS/Framework
반응형

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

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


참고

 

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

 

반응형

'iOS > Framework' 카테고리의 다른 글

소셜 로그인 구현하기  (1) 2025.01.03
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
'iOS/Framework' 카테고리의 다른 글
  • AVFoundation (4) [AVAudioSession]
  • AVFoundation (3) [AVPlayerLayer]
  • AVFoundation (2) [AVPlayer, AVPlayerItem]
  • AVKit
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (309) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (38)
        • swift (32)
        • python (5)
        • Kotlin (1)
      • iOS (132)
        • UIKit (37)
        • Combine (1)
        • SwiftUI (32)
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (15) N
        • 어노테이션 (3) N
        • 튜토리얼 (11)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (2) N
        • 이론 (2) N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Spring
    AVFoundation
    SwiftUI
    CS
    IOS
    protocol
    Tuist
    dispatch
    boostcamp
    Swift
    dfs
    concurrency
    lifecycle
    GIT
    프로그래머스
    UIKit
    property
    백준
    dp
    투포인터
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
AVFoundation (1) [AVAsset]
상단으로

티스토리툴바