Building a Simple QTKit Capture Application
OSXDEV
QTKit Capture Programming Guide로 이동
이 챕터에서는, QuickTime Kit 프레임워크의 최신 버전에서 사용할 수 있는 새로운 캡처 클래스와 메소드 활용법을 시범 보이는, 단순하지만 강력한 어플리케이션인 QTKit 캡처 플레이어를 만들 것 이다. 완성되면 , QTKit 캡처 플레이어 어플리케이션은 비디오 스트림을 캡처하고 그 미디어를 퀵타임 무비로 레코드 할 수 있게 된다. 이 캡처 플레이어를 구현하는 데 20~30 줄 이상의 Objective-C 코드를 쓸 필요가 없다.
통합 개발 환경(IDE)로 Xcode 3와 함께 인터페이스 빌더 3을 사용하면, QuickTime Kit 프레임워크를 작업하는 게 얼마나 쉬운지 알 수 있을 것이다. 이 예제에서, 인터페이스 빌더 3에서 사용가능한 컨트롤 라이브러리가 제공하는 새로운QTKit 캡처 컨트롤을 사용하게 될 것이다. QTKit 캡처 컨트롤은 어플리케이션의 사용자 인터페이스 디자인을 수향하는 데 있어서 대부분의 일을 수행할 것이다.
이 가이드의 단계들을 따라 가다보면, start와 stop버튼을 더함으로서, 퀵타임 무비 캡처를 컨트롤하는 기능을 제대로 하는 캡처 플레이어 어플리케이션을 만들 수 있으며, 캡처한 파일을 출력하고 퀵타임 플레이어에서 디스플레이 하도록 할 수 있다. 이 프로젝트를 위해, iSight카메라나 당신의 매킨토시에 내장되어 있거나 연결되어 있어야 한다. Mac OS X의 최신 버전인 Mac OS X v10.5가 당신의 컴퓨터에 설치되어 있어야 한다.
QTKit 캡처 어플리케이션을 만드는 과정에서, 다음의 세 클래스를 사용하게 될 것이다.
- QTCaptureSession. 미디어 스트림을 캡처하는 주 인터페이스.
- QTCaptureMovieFileOutput. 캡처된 미디어를 퀵타임 무비 파일로 쓰는 QTCaptureSession 오브젝트의 출력 목적지.
- QTCaptureDeviceInput. 카메라나 마이크 같은 미디어 장치를 위한 입력 소스.
이 튜토리얼의 목적 달성을 위해서, 캡처 클래스들에 있는 메소드들을 모두 완전히 이해할 필요는 없다. QTKit 프레임워크에 대한 지식을 넓혀감에 따라, QTKit API의 클래스들의 집합을 구성하는 메소드, 통지, 어트리뷰트, 상수 그리고 타입들 에 대해 자세히 설명해 놓은 QuickTime Kit Framework Reference를 참조할 것이다.
목차 |
[편집] First Steps
코코아와 Xcode를 사용해 본 적이 있다면, 모든 코코아 어플리케이션이 프로젝트로 시작한다는 것을 알 것이다. 프로젝트는 단순히 말하자면 코드 파일, 프레임워크, 라이브러리, 어플리케이션의 사용자 인터페이스, 사운드 , 이미지와 같이 어플리케이션에 사용되는 모든 요소들에 대한 저장고라 할 수 있다. 당신의 프로젝트를 만들고 관리하기 위해 Xcode를 사용한다.
QTKit 캡처 플레이어 어플리케이션은 코코아와 퀵타임을 처음 접하는 개발자들에게 좋은 학습 예제가 될 수도 있다. 이미 코코아를 알고 있다면, 이 캡처 플레이어 어플리케이션을 얼마나 쉽고 큰 수고 없이 만들어내는지에 대해 크게 놀라지 않을 것이다.
[편집] 필요한 것
QTKit 캡처 플레이어 프로젝트를 시작하기 전에, Max OS X v10.5를 사용하고 있는지를 확인하고 다음 아이템들이 시스템에 설치되어 있는지를 확인한다.
- Xcode 3와 인ㅌ페이스 빌더 3. 프로젝트를 빌드하기 위해 Xcode 2.2를 사용할 수도 있지만, 가능한 기능들을 최대한 이용하기 위해서는, Xcode 3를 써야 할 것이다. 또한, 인터페이스 빌더 3은 당신의 어플리케이션의 사용자 인터페이스를 만드는 데 새로운 패러다임을 제공할 것이다. 팔레트는 더 이상 제공되지 않고; 훨씬 더 쉽고 효율적으로 사용자 인터페이스의 구성요소들을 연결할 수 있도록 디자인된 컨트롤들의 라이브러리를 사용하게 될 것이다. 결국, 당신은 풍부하고 해로운 컨트롤들의 라이브러리를 이용해서 보다 빠르게 어플리케이션을 만들 수 있을 것이다.
- QuickTime Kit 프레임워크. Mac OS X v10.5의 System/Library/Frameworks 디렉토리에 QTKit.framework라는 이름으로 있다.
- iSignt 카메라가 컴퓨터에 연결되어 있어야 한다.
| 중요: 여기와 다음 챕터에서 논의하는 내용에 대한 샘플코드는 Sample Code: QuickTime Cocoa에서 MyRecorder라는 이름으로 다운로드 받을 수 있다. |
| 노트: MyRecorder 샘플코드는, 이 챕터에서 설명된 바와 같이, QTMediaTypeMuxed 타입인 DV 카메라는 지원하지 않고, QTMeidaTypeVideo만 지원할 것이다. 이 프로그래밍 가이드의 다음 챕터인 "“Adding Audio Input and DV Camera Support,”에서 DV카메라를 이용하고 QTMediaTypeMuxed 타입을 사용하는 법을 설명할 것이다. |
[편집] 캡처 플레이어의 프로토타입
Interface Builder는 어플리케이션의 윈도우, 메뉴 그리고 뷰를 지정할 수 있게 하며, Xcode는 그 뒤에 숨은 비헤비어를 정의한다. Interface Builder는 당신의 사용자 인터페이스안의 아이템들을 설정하는 데 필요한 기본적인 지원을 한다. 그 이후, 어플리케이션을 만드는 대부분의 작업은 Xcode에서 일어난다.
어플리케이션을 디자인 할때는 , Xcode에서 데이터 모델을 정의하는 것에서 부터 출발한다. 사용할 데이터 모델을 만들었으면, Interface Builder를 이용해 데이터를 표시할 수 있는 기본적인 윈도우, 메뉴 그리고 뷰를 만든다. 당신의 디자인의 복잡한 정도에 따라, 커스텀 뷰나 컨트롤이 필요할 수도 있으며, Interface Builder와 연동하여 nib파일에 추가할 수 있다.
컨트롤러 오브젝트를 만들고 유저 인터페이스의 데이터 모델에 묶는 것은 디자인 과정의 마지막 단계이다.
물론, 바로 뛰어들어서 인터페이스 빌더에서 윈도우와 메뉴를 조합하는 것으로 시작할 수도 있다. 그러나,최신버전인 인터페이스 빌더 3의 사용에 있어서, 당신의 어플리케이션이 원하는 비헤비어를 잘 이해하는 것이 중요하다. 어플리케이션의 데이터 모델을 알고, 그 데이터에 어떠한 동작이 일어날 지를 안다면, 정보를 최종 사용자에게 전달하기 위해 디자인 요소들을 묶어나가는 데에 도움을 줄 것이다.
QTKit 캡처 어플리케이션의 러프 스케치를 만드는 것으로 부터 시작해 보자. 어플리케이션에 어떤 디자인 요소들을 넣을 것인지를 고민해 보자. 인터페이스 빌더로 넘어가 프로토 타입을 거기에서 만드는 것보다는, 러프 스케치 안에 그 요소들을 시각화 해야 할 것이다. 그림 2-1 처럼.
그림 2-1 QTKit 캡처 어플리케이션의 프로토 타입 스케치
이 디자인 프로토 타입을 이용해, 세가지 간단한 오브젝트 - 캡처 뷰와 두개의 컨ㅌ롤 버튼-으로 출발할 수 있다. 그것들은 당신의 어플리케이션의 빌딩 블럭이 될 것이다. 스케치가 끝났으면, 그것들을 인터페이스 빌더에서 어떻게 연결시킬지와 Xcode 프로젝트에서 각각의 동작을 위해 필요한 코드를 고민하기 시작해야 한다.
[편집] Create the Project Using Xcode 3
프로젝트를 만들기 위해선 아래와 같이 해라:
1. 그림 2-2 에서 처럼 Xcode3을 실행시키고 File > New Project를 선택해라.
2. 프로젝트 윈도우가 나타나면 Cocoa Application을 선택한다.
3. 프로젝트명을 MyRecorder로 하고 당신이 원하는 프로젝트 폴더 경로로 설정한다. Xcode 프로젝트 윈도우가 나타나면 그림 2-3 과 같을 것 이다.
4. 그리고 다음엔 당신의 MyRecorder 프로젝트에 QuickTime Kit 프레임워크를 추가해야한다.
[편집] Create the User Interface Using Interface Builder 3
다음 단계의 프로젝트에서 당신은 어떻게 Interface Builder와 Xcode가 매끄럽게 함께 협력해서 당신의 프로젝트안에서 보다 효과적이고 부하가 적게 다양한 요소들을 만들고 구현하는지 볼 것이다.
1. Interface Builder 3 (그림 2-4)를 열고 Xcode 프로젝트 윈도우의 MainMenu.nib 파일을 Interface Builder 3 아이콘 위로 드래그한다. Xcode3와 Interface Builder 3가 새롭게 통합되었기 때문에, MyrecorderController.h 파일에서 선언한 액션들과 아웃렛들이 동기적으로 Interface Builder 3에서 업데이트 되어 있는 것을 볼 수 있을 것이다. 이것은 당신이 nib파일을 열고 Interface Builder 3에서 사용가능한 컨트롤의 라이브러리로 작업을 시작할 때 나타난다.
그림 2-4 새로운 Interface Builder 3의 아이콘
2.Interface Builder 3에서, 새로운 컨트롤들의 라이브러리를 볼 수 있을 것이다. 그림 2-5처럼, QuickTime Capture View 컨트롤이 보일 때까지 아래로 스크롤한다.
그림 2-5 라이브러리의 QuickTime Capture View
QTCaptureView 오브젝트는 캡처 세션에 의해 캡처되고 있는 비디오 아웃풋의 프리뷰를 디스플레이 할 수 있는 뷰 서브클래스의 인스턴스를 제공한다.
3. QTCaptureView 오브젝트를 QTKit 캡처 플레이어의 윈도우로 드래그 하고 Start와 Stop 버튼 두개가 들어갈 수 있는 여유를 남겨두고 윈도우에 맞게 크기를 조정한다.
4. Tool > Inspector를 선택한다. Identity Inspector에서, 인포메이션("i') 아이콘을 클릭한다. Class 필드 안을 클릭하면 그림 2-6에서와 같이, QTCaptureView 오브젝트가 나타난다.
그림 2-6 크기 조정된 QTCaptureView 오브젝트와 Identity Inspector에 있는 그 클래스 아이덴티티
5. 그림 2-7과 같이, Capture View Size Inspector에서 오브젝트의 자동크기조절을 설정한다.
그림 2-7 QTCaptureView 오브젝트의 자동크기조절 설정
6. 그림 2-8처럼, MyRecorder 윈도우의 어트리뷰트를 설정한다.
그림 2-8 인스펙터에서 윈도우 어트리뷰트 정의
7. 그림 2-9처럼, 라이브러리에서 푸시 버튼 컨트롤을 선택하고 윈도우로 드래그 한다. Start라고 입력하고 그 버튼을 복제해서 Stop이라는 다른 버튼을 만든다. 자동크기조절에서, 두 버튼 모두 바닥과 오른쪽 외곽면에 대해 스트럿(고정쇠)를 설정하고, 내부 스트럿은 손대지 않고 둔다.
그림 2-9 Start와 Stop 푸시 버튼의 설정
8. 그림 2-10과 같이, 버튼을 선택하고 Button Size Inspector를 클릭해서 버튼들에 대한 자동크기조절
을 설정한다.
그림 2-10 Start와 Stop 버튼에 대한 자동크기조절의 설정
9. 그림 2-11처럼, 라이브러리를 아래로 스크롤해서 파란색 정육면체를 선택한다. 당신의 컨트롤러로 인스턴스화 할 수 있는 오브젝트(NSObject)이다.
그림 2-11 당신의 컨트롤러를 위한 파란색 큐브 오브젝트
10. 그림 2-12와 같이, 그 오브젝트를 MainMenu.nib으로 드래그한다.
그림 2-12 컨트롤러로 인스턴스화한 오브젝트
11. 오브젝트를 선택하고 그 이름을 My Recorder Controller로 입력한다. 그 후 인스펙터에서 인포메이션 아이콘을 클릭한다. 클레스 아이덴티티 필드를 클릭하면, MyRecorderController 오브젝트가 나타날 것이다. Interface Builder는 자동으로 당신이 Xcode 구현파일에서 지정한 MyRecorderController 클래스를 업데이트 해 왔다. 클래스 아이덴티티 필드에 클래스의 이름을 입력할 필요가 없다. 업데이트가 일어난 것을 확인하기 위해 리턴을 누른다. 아이덴티티 필드가 자동으로 업데이트 되지 않았다면, 당신이 직접 MyRecorderController 오브젝트라고 지정해 줘야 한다.













