brunch

You can make anything
by writing

C.S.Lewis

by 이준원 Jun 03. 2018

미디어 프로그래밍을 시작할 iOS 개발자에게

AVFoundation framework 소개

Intro


요즘 핫하다하는 서비스들은 보면 대부분 미디어 기반 서비스임을 알 수 있습니다. 

요즘 서비스에 대해 나오는 아티클을 보면, 유투브, 넷플릭스가 상당히 자주 나오는것을 느낄수 있습니다. 


실제로, 넷플릭스 컨텐츠의 중독자로서(저는 주로 애플티비를 통해 넷플릭스를 시청) 

관심 컨텐츠 모두 시청하고나서도 습관적으로 넷플릭스를 자기 전에 켠다던지.. 

너무 편안함 때문에, 한달에 넷플릭스님에게 드리는 돈이 하나도 아깝지 않은... 

새로운 에피소드들을 목놓아 기다리고 있는 내모습에, 예전 비디오 테이프 시절, 비디오 가게에 새로 나온 비디오를 위해 용돈을 차곡차곡 모을때의 설렘이 느껴지기도 합니다. 


유투브 또한 티비 프로그램 처럼 잘 편집되어 있지 않더라고, 새로운 배울거리를 위한 학습, 혹은 영감을 받을 용도로 자주 보고 있습니다. 


이외에도, 스포티파이, 훌루 등 각광 받아지고 있는 서비스들이 미디어 기반 비지니스입니다. 

이런 메이저 미디어 비지니스 서비스 외에도, 뮤지컬리(미국), 콰이(중국), 스푼(한국), 아프리카(한국), VLive(한국) 등 핫하다고 하는 서비스들이 미디어 비지니스에 기반하고 있습니다. 


이런 미디어 기반 서비스얘기를 줄줄이 하는 이유는, 개발자 입장에서 점점 미디어 서비스를 위한 기반 지식이 중요해지겠다는 것을 많이 느끼기 때문입니다. 

특히, iOS 개발자 입장에서는 미디어 프로그래밍을 위해서는 AVFoundation 이란 프레임웍(쉽게 생각하면, 미디어 서비스를 위핸 필요한 도구를 모아놓은 공구함 같은 녀석)을 필연적으로 사용해야 합니다. 


이번글에서는,  Apple AVFoundation Programming Guide 의 Intro 부분 내용을 요약함으로써 AVFoundation 의 Framework 겉핧기를 해보고자 합니다. 



AVFoundation


Introduction 

About AVFoundation 

- 미디어 아이템에 대해서 재생 및 생산에 사용


Framework architecture

For Simple Task

- 재생:  AVKit 사용

- 비디오 녹음:  UIImagePickerController 사용


At a Glance

Two facets of API 

- Video 

- Audio


Representing and  Using Media with AVFoundation 

- AVAsset

    - 미디오를 표현하는 클래스

    - 실제 미디어 포맷(like mp4, mp3, mov…etc) 에 묵여 있지 않음

    - 개별 미디어 데이터는 트랙이라는 녀석으로 관리됨

    - 일단 미디어를 표현하기위한 추상적인 녀석이지 바로 가져다 쓸수 있는것은 아님

- Playback

    - asset을 미디어를 표현하기 위한 추상적인 클래스로 분리하고, 실제 영상 재생이나 컨트롤 되는것은 playerItem으로 관리

    - player(eg. avplayer )를 이용해서 playerItem(eg. avplayeritem)을 재생 함

- Reading, Writing, and Recording Assets

    - 인코딩 및 추출: Export Session(단순), Asset Reader(고급), Asset Writer(고급)

        - 음성 데이터를 표현하기 위해서 Asset Reader(고급) 사용

- Thumbnails

    - 섬네일 생성:  AVAssetImageGenerator 사용

- Editing 

    - create new assets: 

        - Compositions 사용

        - sample buffer 또는 asset writer 이용할수도 있음

    - add, remove, reorder: Mutable Compositions 사용

    - Composition 은 아직 메모리에 있기때문에 파일로 만들기 위해서는 export session을 이용해서 추출해야함

- Still and Video Media Capture

    - Capture Session를 이용해서 디바이스(cam, mic)를 통해 녹화되는 미디어 데이터를 관리 할수 있음

    - Capture Session는  인풋 디바이스(cam)에서 아웃풋 디바이스(display) 까지의 미디어 데이터 흐름을 관리함

    - 결국 미디어 데이터 흐름을 관리하는게 핵심



Concurrent Programming with AVFoundation 

- AVFoundation 에서 호출되는 콜백들은 해당 작업이 이루어지는 곳에서 호출됨(예를 들면, 특정 스레드에서 미디어가 재생되고 있다면, 해당 스레드에서 미디어가 끝나는 콜백 호출이 된다거나, 이런경우 UI update를 위해서는 mainthread로 넘겨주어야함)

- 노티피케이션과 스레딩을 위한 2가지 가이드 

    - UI관련 노티는 메인스레드에서 발생해야한다. 

    - 특정 큐가 필요한 클래스 또는 메소드는 해당 큐에서 노티를 발생시킬것임(위에 언급한 것처럼, 해당 노티가 UI 관련해서 필요한 노티면, 메인스레드로 올려줘야함)

- 봐두면 좋을 코드

    - https://developer.apple.com/library/content/samplecode/AVCam/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010112-Intro-DontLinkElementID_2


Prerequisites

- 기본 미디어 재생을 위해 볼만한것 : https://developer.apple.com/documentation/avkit


감사합니다. 



같은 내용이지만, 미디엄에도.. ㅎㅎ

https://medium.com/@cafielo/summary-of-avfoundation-intro-guide-ec7cd1aa74e8


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari