Создавание простого приложения устройства записи QTKit
В этой главе Вы создаете простое приложение устройства записи QTKit. Когда завершено, Ваше устройство записи QTKit позволит Вам получать видеопоток и записывать вывод того потока к фильму в формате QuickTime. Для реализации этого устройства записи Вы будете удивлены тем, как немного строк кода Objective C необходимо записать.
Ваше приложение устройства записи будет иметь простой запуск и кнопки остановки, позволяющие Вам выводить и отображать свои полученные файлы в QuickTime Player. Для этого проекта Вы нуждаетесь в iSight камере, или встроенной, или включили Ваш Mac.
В создавании Вашего приложения устройства записи QTKit, как описано в этом учебном руководстве, Вы работаете по существу со следующими тремя объектами получения QTKit:
QTCaptureSession
. Основной интерфейс для получения мультимедийных потоков.QTCaptureMovieFileOutput
. Выходное место назначения для aQTCaptureSession
возразите, что записи получили носители к файлам фильма в формате QuickTime.QTCaptureDeviceInput
. Входной источник для устройств хранения данных, таких как камеры и микрофоны.
Моделируйте устройство записи
Вместо того, чтобы просто вскочить в Интерфейсного Разработчика и создать Ваш прототип там, визуализируйте элементы сначала в эскизе эскиза, думая об элементах дизайна, которые Вы хотите включить в приложение.
В этом прототипе Вы используете три простых объекта Какао: представление получения QuickTime и две кнопки управления, чтобы запуститься и остановить фактический процесс записи. Это стандартные блоки для Вашего приложения. После того, как Вы изобразили схематически их, можно начать думать, как поднять трубку их в Интерфейсном Разработчике и что кодирует Вас потребность в Вашем проекте XCode заставить это произойти.
Создайте проект Используя Xcode 3.2
Выполните те же шаги, которые Вы выполнили, когда Вы создали и создали MyMediaPlayer
приложение, описанное в Создавании Простого Приложения Медиапроигрывателя QTKit.
Создать проект:
Xcode 3.2 запуска и выбирает File> New Project.
Когда новое окно проекта появится, выберите Cocoa Application и нажмите Choose.
Назовите MyRecorder проекта и перейдите к расположению, где Вы хотите, чтобы приложение XCode создало папку проекта. Окно проекта XCode появляется, как показано здесь.
Добавьте платформу QTKit к своему проекту MyRecorder.
Из Меню действий в Вашем проекте XCode выберите Add> Add to Existing Frameworks.
В
/System/Library/Frameworks
каталог, выбратьQTKit.framework
.Нажмите панель Target «MyMediaPlayer» Info и проверьте, что Вы соединились с QTKit.framework и Типом
Required
выбран.
Это завершает первую последовательность шагов в Вашем проекте. В следующей последовательности Вы определяете действия и выходы в XCode прежде, чем работать с Интерфейсным Разработчиком.
Назовите файлы проекта и импортируйте заголовки QTKit
Теперь, когда Вы уже моделировали свое приложение устройства записи QTKit, по крайней мере в грубой форме с ясно определенной моделью данных, можно определить, какие действия и выходы должны быть реализованы. В этом случае у Вас есть a QTCaptureView
объект, который является подклассом NSView
, и две простых кнопки, чтобы запуститься и остановить запись Вашего полученного мультимедийного контента.
Выберите File> New File. В панели прокрутите вниз и выберите Cocoa> класс Objective-C, включающий
<Cocoa/Cocoa.h>
заголовочные файлы.Назовите свой файл реализации
MyRecorderController.m
. Проверьте элемент в поле ниже для именования файла объявленияMyRecorderController.h
.В Вашем
MyRecorderController.h
файл, добавляет необходимый оператор импорта QTKit.#import <QTKit/QTKit.h>
Определите действия и выходы, которые Вы хотите
Теперь начните добавлять выходы и действия.
В Вашем
MyRecorderController.h
файл, добавляет переменная экземпляраmCaptureView
, который указывает наQTCaptureView
возразите как выход.IBOutlet QTCaptureView *mCaptureView;
Определите два действия, чтобы запустить и прекратить записывать.
- (IBAction)startRecording:(id)sender;
- (IBAction)stopRecording:(id)sender;
В этой точке, коде в Вашем
MyRecorderController.h
файл должен быть похожим на это:#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface MyRecorderController : NSObject {
IBOutlet QTCaptureView *mCaptureView;
}
- (IBAction)startRecording:(id)sender;
- (IBAction)stopRecording:(id)sender;
@end
Откройтесь
MyRecorderController.m
файл и добавляет следующие действия, вместе с необходимыми фигурными скобками.- (IBAction)startRecording:(id)sender
{
}
- (IBAction)stopRecording:(id)sender
{
}
Спасите обоих Ваш
MyRecorderController.h
иMyRecorderController.m
файлы. Иначе, когда Вы идете для работы в Интерфейсном Разработчике, приложение не будет знать оMyRecorderController
класс.
Это завершает второй этап Вашего проекта. Теперь используйте Интерфейсного Разработчика 3.2 для построения пользовательского интерфейса для проекта.
Создайте пользовательский интерфейс
Теперь Вы создаете и реализуете различные элементы пользовательского интерфейса в своем проекте.
Разработчик интерфейса запуска 3.2.
В Вашем окне проекта XCode откройтесь
MainMenu.xib
файл.В Интерфейсном Разработчике 3.2, найдите библиотеку объектов.
Установите окно предварительного просмотра.
Прокрутите вниз, пока Вы не найдете объект Представления Получения QuickTime.
QTCaptureView
объект предоставляет Вам экземпляр подкласса представления для отображения предварительного просмотра видеовыхода, полученного сеансом получения.Перетащите
QTCaptureView
возразите в свое окно и измените размеры объекта соответствовать окну, предусматривание пространства для этих двух Запускается и Кнопки остановки в Вашем устройстве записи QTKit.Щелкните по объекту в окне.
Установите автокалибровку для объекта в панели Capture View Size, как проиллюстрировано ниже.
Определите атрибуты окна своего Окна MyRecorder.
Проверьте средства управления, появление, поведение, и элементы памяти проверяются, как показано на иллюстрации.
Создайте Запуск и Кнопки остановки для Окна MyRecorder.
В Библиотеке выберите Кнопочное управление и перетащите его к Окну.
Введите текст
Start
и копируйте кнопку для создания другой кнопки какStop
.
Установите автокалибровку для своих кнопок (как показано на иллюстрации) путем нажатия кнопки и щелчка по Button Size Inspector.
Добавьте контроллер и назовите его.
В Библиотеке прокрутите вниз и выберите синее управление кубом, которое является объектом (
NSObject
) можно инстанцировать как контроллер.Перетащите объект в Ваш
MainMenu.xib
окно.Выберите объект и введите его имя как
My Recorder Controller
. Тогда щелкните по информационному значку в Инспекторе.При щелчке по полю Class Identity введите первые несколько букв имени класса в текстовое поле. Интерфейсный Разработчик автоматически заполняет его для Вас.
MyRecorderController
объект появляется. Если Вы сохранили и свое объявление и файлы реализации, как указано в, Определяют Действия и Выходы, которые Вы Хотите, Интерфейсный Разработчик автоматически обновляетMyRecorderController
класс указан в Вашем файле реализации XCode. Чтобы проверить и подтвердить это, обновление произошло, нажмите Return. Если идентифицировать поле автоматически не обновляется, Вы, возможно, должны указать вручную, что это - aMyRecorderController
объект.
Установите предварительный просмотр полученного видеовыхода
В следующей фазе Вашего проекта Вы продолжаете работать с Интерфейсным Разработчиком и XCode, чтобы создать и реализовать различные элементы в Вашем проекте. Из-за бесшовной интеграции между Интерфейсным Разработчиком и XCode, Ваш код будет работать более эффективно и с меньше наверху.
В Интерфейсном Разработчике поднимите трубку
MyRecorderController
возразите противQTCaptureView
объект.Перетащите управление от
MyRecorderController
возразите в своем файле пера противQTCaptureView
объект.Прозрачная панель появляется, выводя на экран
IBOutlet
переменная экземпляра,mCaptureView
, то, что Вы указали в своем файле объявления.
Щелкните по Интерфейсному выходу Разработчика
mCaptureView
обеспечить электричеством два объекта.
Соедините проводом запуск и кнопки остановки
Теперь Вы готовы добавить свои кнопки Start и Stop и обеспечить электричеством их в Вашем окне MainMenu.nib.
Перетащите управление каждый Запуск и Кнопки остановки от окна до
MyRecorderController
объект.Щелкните
startRecording:
метод в прозрачной панели Received Actions для соединения Кнопки запуска.Аналогично, щелкните
stopRecording:
метод в панели Received Actions для соединения Кнопки остановки.
Теперь поднимите трубку окно и
MyRecorderController
возразите как делегат.Перетащите управление соединение от окна до
MyRecorderController
возразите и щелкните по выходу, соединив два объекта.Чтобы проверить корректное обеспечение электричеством объекта окна к объекту делегата выберите Window и щелкните по значку Window Connections Inspector.
Проверьте, что Вы правильно обеспечили электричеством свои выходы и получили действия.
Выберите Мой Контроллер Устройства записи, возражают и щелкают по значку My Recorder Controller Connections.
Проверьте панель My Recorder Controller Identity Inspector для подтверждения выходов класса и групповых исков.
Щелкните
MainMenu.xib
файл, чтобы проверить, что Интерфейсный Разработчик и XCode сотрудничали для синхронизации действий и выходов, которые Вы указали.Маленький зеленый свет появляется в левом нижнем углу
MainMenu.xib
файл рядом сMyRecorder.xcodeproj
подтвердить эту синхронизацию.Сохраните свой файл пера.
Проверьте, что Ваше приложение QTKit MyRecorder появляется как показано на иллюстрации ниже.
Вы теперь завершили свою работу в Интерфейсном Разработчике 3.2. В этой следующей последовательности шагов Вы возвращаетесь к своему проекту XCode и добавляете несколько строк кода и в Вашем объявлении и в файлах реализации, чтобы создать и скомпилировать приложение.
Завершите реализацию класса MyRecorderController
Завершать реализацию MyRecorderController
класс, необходимо определить переменные экземпляра, указывающие на сеанс получения, а также на объекты ввода и вывода. В Вашем проекте XCode Вы добавляете переменные экземпляра к объявлению интерфейса.
Обновите Ваш
MyRecorderController.h
файл объявления:@interface MyRecorderController : NSObject {
QTCaptureSession *mCaptureSession;
QTCaptureMovieFileOutput *mCaptureMovieFileOutput;
QTCaptureDeviceInput *mCaptureDeviceInput;
Полный код для Вашего файла объявления должен быть похожим на это:
#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface MyRecorderController : NSObject {
IBOutlet QTCaptureView *mCaptureView;
QTCaptureSession *mCaptureSession;
QTCaptureMovieFileOutput *mCaptureMovieFileOutput;
QTCaptureDeviceInput *mCaptureDeviceInput;
}
- (IBAction)startRecording:(id)sender;
- (IBAction)stopRecording:(id)sender;
@end
На остающихся шагах Вы изменяете
MyRecorderController.m
файл реализации. Эти шаги располагаются в логическом, хотя не обязательно твердый, упорядочить.Создайте сеанс получения.
- (void)awakeFromNib
{
mCaptureSession = [[QTCaptureSession alloc] init];
Подключите вводы и выводы к сеансу.
BOOL success = NO;
NSError *error;
Найдите устройство и создайте ввод устройства. Тогда добавьте его к сеансу.
QTCaptureDevice *device = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
if (device) {
success = [device open:&error];
if (!success) {
}
mCaptureDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:device];
success = [mCaptureSession addInput:mCaptureDeviceInput error:&error];
if (!success) {
// Handle error
}
Создайте вывод файла ролика и добавьте его к сеансу.
mCaptureMovieFileOutput = [[QTCaptureMovieFileOutput alloc] init];
success = [mCaptureSession addOutput:mCaptureMovieFileOutput error:&error];
if (!success) {
}
[mCaptureMovieFileOutput setDelegate:self];
Укажите опции сжатия с идентификатором с размером для видео и качеством для аудио.
NSEnumerator *connectionEnumerator = [[mCaptureMovieFileOutput connections] objectEnumerator];
QTCaptureConnection *connection;
while ((connection = [connectionEnumerator nextObject])) {
NSString *mediaType = [connection mediaType];
QTCompressionOptions *compressionOptions = nil;
if ([mediaType isEqualToString:QTMediaTypeVideo]) {
compressionOptions = [QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptions240SizeH264Video"];
} else if ([mediaType isEqualToString:QTMediaTypeSound]) {
compressionOptions = [QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsHighQualityAACAudio"];
}
[mCaptureMovieFileOutput setCompressionOptions:compressionOptions forConnection:connection];
Свяжите представление получения в пользовательском интерфейсе с сеансом.
[mCaptureView setCaptureSession:mCaptureSession];
}
Запустите выполнение сеанса получения.
[mCaptureSession startRunning];
}
Обработайте закрытие окна и уведомьте для Вашего устройства ввода данных, и затем остановите сеанс получения.
- (void)windowWillClose:(NSNotification *)notification
{
[mCaptureSession stopRunning];
[[mCaptureDeviceInput device] close];
}
Освободите память.
- (void)dealloc
{
[mCaptureSession release];
[mCaptureDeviceInput release];
[mCaptureMovieFileOutput release];
[super dealloc];
}
Реализация запускает и останавливает действия и указывает выходное место назначения для Ваших носителей с записанными данными, в этом случае фильм в формате QuickTime (
.mov
) в Вашем/Users/Shared
папка.- (IBAction)startRecording:(id)sender
{
[mCaptureMovieFileOutput recordToOutputFileURL:[NSURL fileURLWithPath:@"/Users/Shared/My Recorded Movie.mov"]];
}
- (IBAction)stopRecording:(id)sender
{
[mCaptureMovieFileOutput recordToOutputFileURL:nil];
}
Закончите записывать и затем запустите свою запись как фильм в формате QuickTime на Вашем Рабочем столе.
- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error
{
[[NSWorkspace sharedWorkspace] openURL:outputFileURL];
}
Создайте и скомпилируйте свое приложение устройства записи
После сохранения проекта нажмите Build и Go. После компиляции щелкните по Кнопке запуска для записи, и Кнопка остановки, чтобы прекратить записывать. Вывод Вашего полученного сеанса сохраняется как фильм в формате QuickTime по пути, который Вы указали в этом примере кода.
Используя простую iSight камеру, у Вас теперь есть возможность получения и носителей записи в определенном размере и качестве звука и затем выводе Вашей записи к фильму в формате QuickTime.
Сводка
В этой главе, как программист, Вы фокусировались на создании приложения устройства записи с помощью трех объектов получения: QTCaptureSession
, QTCaptureMovieFileOutput
и QTCaptureDeviceInput
. Они были существенными стандартными блоками для Вашего проекта. Вы учились как:
Моделируйте и разработайте модель данных и контроллеры для Вашего проекта в грубом эскизе прежде, чем создать фактический пользовательский интерфейс.
Определите два определенных действия IB как кнопки, чтобы запустить и прекратить записывать.
Создайте пользовательский интерфейс с помощью
QTCaptureView
плагин от библиотеки Interface Builder средств управления.Обеспечьте электричеством кнопки управления для своего пользовательского интерфейса.
Укажите опции сжатия с идентификатором для размера Вашего зарегистрированного видео и по качеству Вашего аудио.
Сборка и запущенный приложение устройства записи, с помощью iSight камеры в качестве устройства ввода данных.