본문 바로가기

스위프트

[AVFoundation] AVFoundation에서 자주 쓰이는 객체들에 관하여

AVFoundation

애플 네이티브 프레임워크로 오디오비주얼 에셋들/디바이스 카메라 제어/오디오 처리/시스템 오디오 인터렉션 설정등을

할 수 있는 API 혹은 객체를 제공하는 프레임워크이다.

애플 플랫폼에서 오디오비주얼 미디어를 처리/캡처링/플레이/검사를 하기 위한 Tasks의 넓은 집합을

함께 압축한 몇몇 주요 기술들의 영역을 혼합한 프레임워크이다.

 

Video Effects

표준 비디오 트랜지션 효과들을 정의하고

미디어 타임(비디오 혹은 오디오 타임)과 함께 레이어 애니메이션을 동기화하거나

커스텀 비디오 컴포지터들을 생성한다.

 

Core Animation Integration

CoreAnimation은 보통 스레드 디버깅에서 CA라고 불리는 약자의 풀 네임으로

비주얼 요소들을 애니메이팅/혼합/렌더링하는 애플 프레임워크이다.

자세한 건 다른 포스팅에서 정리하고

CoreAnimation Framework를 통해 비디오 이펙트를 적용하는 기능을 제공하는 API를

확인하면 될 것 같다.

 

AVVideoCompositionCoreAnimationTool

비디오 컴포지션으로 Core Animation을 통합시키는 데 사용되는 객체

어떠한 애니메이션들도 비디오의 타임라인에서 번역되어질 수 있으나

리얼 타임은 불가능하다.

그래서 당신은 반드시 아래의 요소를 셋해야한다.

1. 애니메이션의 beginTime 프로퍼티를 0이 아닌 AVCoreAnimationBeginTimeAtZero로 셋 해라.

(0 값은 코어 애니메이션에서 CACurrentMediaTime()으로 대체된다.)

2. 애니메이션들의 isRemovedOnCompletion을 false로 셋해라. 그러면 그들은 자동적으로 제거되지 않을 것이다.

3. UIView객체와 혼합된 레이어의 사용을 피해라.

 

Built-In Video Compositiong

AVVideoComposition

시간 내 특정한 포인트들에서 비디오 프레임들을 어떻게 구성하는 지 묘사하는 객체이다.

만약 당신이 빌트-인 비디오 컴포지터를 사용하면

비디오 컴포지터에 포함된 인스트럭션은 각 비디오 소스에 대한

공간 변형/불투명도 값/크롭 사이즈를 특정할 수 있다.

이 값들은 선형 램핑 메서드들을 지원함으로써 시간 내내 변화할 수 있다.

당신은 AVVideoCompositing 프로토콜을 채택함으로써 커스텀 비디오 컴포지터를 생성할 수 있다.

시스템은 비디오 재생동안 비디오 소스들의 각각을 위한 픽셀 버퍼를 커스텀 비디오 컴포지터와 함께 제공한다.

그리고 임의의 그래픽적 동작을 비주얼 아웃풋 생성을 위해 그들위해서 수행할 수 있다.

AVMutableVideoComposition

AVVideoComposition과 동일한 내용에

수정 가능한 비디오 컴포지션 서브클래스이다.

AVVideoCompositionInstruction

컴포지터에 의해 수행되는 동작

AVVideoComposition 객체가 유지관리하는 AVVideoComposition의 컴포지션을 수행하는

Instructions의 배열이다.

Media Reading and Writing

AVAssetReaderVideoCompositionOutput

에셋의 하나 혹은 다수의 트랙들로부터 혼합된 비디오 프레임들을 읽는 객체이다.

 

[프로퍼티]

var videoComposition: AVVideoComposition?

아웃풋을 위해 사용되는 비디오 컴포지션

값은 AVVideoComposition 객체이며 소스 에셋의 타임라인을 통해

각 소스 트랙으로부터 읽은 비디오 프레임들의 비주얼 정렬을 특정화한다.

 

var customVideoCompositor: AVVideoCompositing?

만약 커스텀화된 비디오 컴포지터가 존재하지 않을 경우 nil이거나

내부 비디오 컴포지터가 있을 때 사용한다.

 

var videoTracks: [AVAssetTrack]

구성화된 비디오를 읽은 아웃픗들로부터의 트랙들

대상 에셋 리더의 에셋에 의해 소유된 AVAssetTrack 객체들을 포함하는 배열이다.