기타/iOS 기초

[iOS Swift AVFoundation] 1편. AVFoundation 개요 - AVKit

studying develop 2022. 7. 15. 01:59

드디어 iOS에서 미디어 파일을 다루어볼 기회가 생겼다. 

그러기 위해서는 기본적으로 AVFoundation을 알아야 한다.

내가 하고자한건 일단, 녹음 기능과 재생 기능을 구현하였다.

 

 

[iOS Swift AVFoundation] 1편. 미디어 파일을 다루려면? - AVKit

[iOS Swift AVFoundation] 2편. 음성파일 재생 하기 - AVPlayer, PlayBack

 


하지만 하다보니 AVFoundation이라는 녀석이 궁금해짐.

import AVFoundation

https://developer.apple.com/documentation/avfoundation

 

Apple Developer Documentation

 

developer.apple.com

1. AVFoundation 개요

AVFoundation은 음성 에셋들, 폰의 카메라, 오디오 처리 그리고 시스템의 오디오 인터액션을 설정한다 함.

 

AVFoundation은 큰 기능은, 음성 파일에 대해 자세히 분석하고, 재생하고, 캡처(녹음), 그리고 음성 파일을 처리(편집) 할 수 있다 함.


2. AVFoundation과 AVKit의 구조

AVFoundation 구조

여기서 중요한 포인트는 AVKit은 UIKit처럼 하이레벨 인터페이스이고, AVFoundation은 로우레벨 인터페이스로

더 커스텀한 기능을 구현하기 위해서는 AVFoundation을 다루면 된다.

 

밑에서 위의 기능들을 더 자세히 알아보자.

 


Common, AVFoundation의 공통 일반사항

 
Media Assets
Load media assets from files and streams to inspect their attributes, tracks, and embedded metadata.
 
Media Reading and Writing
Read images from video, export to alternative formats, and perform sample-level reading and writing of media data.
 
Media Types and Utilities
Identify the types of content and file formats that AVFoundation supports.
 
Video Settings
Configure video processing settings using standard key and value constants.
 
Audio Settings
Configure audio processing settings using standard key and value constants.
 
 
 
목차와 세부 내용을 통해 기능을 알아보면
 
1. 미디어 에셋
파일에서 미디어 항목을 추출하고, 속성, 트랙(?), 그리고 메타데이터를 분석할 수 있다함
분석할 수 있다는 의미는, 일단 에셋(파일)에서 읽을 수 있다는 의미 아닐까? 읽는것도 중요하니까...
그리고 추가로 하면서 알게된건데, 미디어 파일을 Url로 관리하더라, 되게 효율적인 방식이긴 한듯.
 
2. 미디어에 대한 읽기와 쓰기
비디오로 부터 이미지를 읽고 추출할 수 있다. 심지어 다른 포맷으로.
비디오에서 이미지를 추출하고 파일 형식을 바꿀 수 있다는건데 종종 필요한 기능이긴한듯.
캡처도 사실 약간 그런거 아닌가?
 
그리고 상세히 보니까, 비디오도 파일 형식 변환이 가능하다. mp3 -> m4a 이런건듯.
 
추가로 미디어 쓰기에 속하는데, MPEG-4 files을 프래그먼트화 해서 HTTP 라이브 스트리밍으로 보내기도 가능함.
 
자막달기도 가능한데, 이게 자동 자막인가? 하고 알아보니
 
물론 아닌거 같고, 자막에 대한 데이터 객체 정의가 되어있고, 자막이 달리는 위치, 자막이 달리는 타이밍등을 정할 수 있다.
 
3. 미디어 타입과 유틸리티들
AVFoundation의 도움으로 미디어의 콘텐츠 타입을 식별하고, 파일 형식을 식별한다.
반드시 필요한 기능이긴함.
유틸리티의 기능을 보니 CGRect만드는 기능 하나같은데, 이쪽은 딱히 data 타입과 api가 많이 보이진 않음
 
4. 비디오 세팅
표준 키와 상수 값을 사용하여, 비디오 처리 세팅을 설정한다.
 
자세히 보니, 조리개 (aperture)라 부르는데, 비디오에 대한 폭, 높이, 상하 오프셋등에 접근이 가능하다.
아예 픽셀 단위로도, 접근이 가능하다.
비디오 코덱에 대한 이름 통해 코덱에 접근하거나, 코덱의 타입을 묘사한다.
비디오 세팅에는 색상 속성이 매우 중요해 보이는데, 
 
Setting Color Properties for a Specific Resolution
이런것도 있는데, 영상의 색상에 대한 조절을 할 수 있는건가?
문서를 보니 After specifying the AVVideoColorPropertiesKey, you must specify a color primary, transfer function, and Y’CbCr matrix. 
 
아마도, 내가 뭔가를 정해야 되는거 같다. 왜지?;
 
막상 보니 비슷 기능들 같은데, 클라이언트가 처리할 수 있는 색상의 범위에 대한 정보도 있다. 
그리고 클라이언트의 주요 색상 정보도 있다. 정보를 수정해야 되는건지, 파악용인지 모르겠음;;
 
Compression, 압축에 대한 속성도 조절이 가능해 보인다.
압축에 대한 다양한 설정이 있는데, JPEG compression도 가능하고, dictionary of compression properties에도 접근이 가능하다는데, 압축에 대한 방법은 차차 알아봐야될듯.
 
스케일링, 즉 비율에 대한 세팅도 가능해 보인다.
 
5. 오디오 세팅 - 내가 일단 관심을 가지는 분야다.
 
일단 보이는 기능들을 써보면
오디오 형식에 대한 묘사가 가능하다는데, 즉 형식을 읽거나 변경하는게 가능할듯.
오디오 채널들의 역할을 설명하는 객체도 있음 - 이거 공부하다 궁금한게, 오디오 채널? 이라는게 뭐지??
오디오 채널의 레이아웃 구조를 설명하는 객체도 있음 - ??
선형 PCM 형식 세팅하기... - ??먼...
형식 세팅하기 - 오디오 녹음, 재생기에 모두 적용되는 형식을 정해준다 함.
 
sample rate conversion settings - 영어로 해야 의미 전달 잘되는듯,,.. 샘플 레이트를 정의하는 상수인듯, 오디오 품질과 관련 있는듯?
 
enum AVAudioQuality - 인코딩과 컨벌젼을 위한 오디오 샘플 레이트를 특정짓는다함, 일단 나는 인코딩과 컨벌전이 왜 필요한지 잘 모름;
 
Encoder Settings - 오디오 녹음 클래스를 위한 오디오 인코더 세팅들이 필요하다 함.
 
Time Pitch Algorithm Settings - time pitch algorithms가 뭐지?, 이걸 정의한다는거 같은데.
 
 
Encoder Bit Rate Strategy Values - 가능한 bit rate strategy 값들을 표현하는듯.
 
AVAUDIOENGINE_HAVE_AUDIOUNIT: INT32 이 변수는 오디오 엔진이 오디오 유닛들을 사용할 수 있는지 알려준다함. - 오디오 유닛은 뭐지;?
 

 

정리해보니 일단 큰틀에서 무슨 기능이 있는지 알겠는데, 이만큼 4배정도 더 있다. 4편으로 나누어서 확인해보자. ㅎㅎ;


 

2번편에서는 아래를 다룹니다. 

[iOS Swift AVFoundation] 2편. 음성파일 재생 하기 - AVPlayer, Playback

Playback

Media Playback
Manage the playback of media assets and interstitial content, independent of how you present that content in your interface.
 
Streaming and AirPlay
Stream content wirelessly to other devices using AirPlay, and handle requests involving FairPlay-protected assets.
 
Offline Playback and Storage
Download streamed content to disk to allow offline playback, and define policies to automatically remove downloaded assets.
 
Sample Buffer Playback
Create custom controllers to play and synchronize the timing of sample buffer streams.