Добавление аудиовхода и поддержки камеры DV
Если Вы работали через последовательность шагов, обрисованных в общих чертах в предыдущей главе, Вы теперь готовы расширить функциональность своего приложения устройства записи QTKit.
В этой главе Вы добавляете возможность аудиовхода к своему приложению устройства записи, а также поддержку ввода от камер DV. Это выполняется только с дюжиной строк кода Objective C с включенной обработкой ошибок.
Добавьте код для расширения класса MyRecorderController
Добавьте возможность аудиовхода и видеовход от камер DV:
Xcode 3.2 запуска и открытый Ваш проект MyRecorder.
Щелкните
MyRecorderController.h
файл объявления.Замените
mCaptureDeviceInput
переменная экземпляра с этими переменными экземпляра.QTCaptureDeviceInput *mCaptureVideoDeviceInput;
QTCaptureDeviceInput *mCaptureAudioDeviceInput;
Это переменные аудиоустройства и устройства ввода видеосигнала, позволяющие Вам записать аудио, а также видео от внешних камер DV.
В этой точке Ваш код должен быть похожим на это:
#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface MyRecorderController : NSObject {
IBOutlet QTCaptureView *mCaptureView;
QTCaptureSession *mCaptureSession;
QTCaptureMovieFileOutput *mCaptureMovieFileOutput;
QTCaptureDeviceInput *mCaptureVideoDeviceInput;
QTCaptureDeviceInput *mCaptureAudioDeviceInput;
}
- (IBAction)startRecording:(id)sender;
- (IBAction)stopRecording:(id)sender;
@end
Измените методы в реализации
Теперь откройте Ваш MyRecorderController.m
файл реализации.
Прокрутите вниз к начинающемуся блоку кода
QTCaptureDevice *videoDevice
.Найдите устройство ввода видеосигнала, такое как iSight камера, и откройте ее.
QTCaptureDevice *videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeVideo];
success = [videoDevice open:&error];
Если Вы не можете найти или открыть устройство ввода видеосигнала, попытайтесь найти и открыть мультиплексированное устройство ввода видеосигнала, такое как камера DV.
Обратите внимание на то, что в мультиплексированном видео, аудиотреки и видеотреки смешаны вместе.
if (!success) {
videoDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeMuxed];
success = [videoDevice open:&error];
}
if (!success) {
[videoDevice = nil;
}
if (videoDevice) {
Добавьте поддержку аудио от устройства аудиовхода до сеанса получения.
Обратите внимание на то, что Вы добавили аудио тип
QTMediaTypeSound
к видеоустройству для обработки работы по дому получения аудиопотока в сеансе получения.mCaptureVideoDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:videoDevice];
success = [mCaptureSession addInput:mCaptureVideoDeviceInput error:&error];
if (!success) {
}
if (![videoDevice hasMediaType:QTMediaTypeSound] && ![videoDevice hasMediaType:QTMediaTypeMuxed]) {
QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound];
success = [audioDevice open:&error];
if (!success) {
audioDevice = nil;
}
if (audioDevice) {
mCaptureAudioDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
success = [mCaptureSession addInput:mCaptureAudioDeviceInput error:&error];
if (!success) {
}
}
}
Создайте вывод файла ролика и добавьте его к сеансу.
mCaptureMovieFileOutput = [[QTCaptureMovieFileOutput alloc] init];
success = [mCaptureSession addOutput:mCaptureMovieFileOutput error:&error];
if (!success) {
}
Свяжите представление получения в UI с сеансом.
[mCaptureView setCaptureSession:mCaptureSession];
[mCaptureSession startRunning];
}
}
Окно дескриптора заключительные уведомления для Вашего устройства вводится.
- (void)windowWillClose:(NSNotification *)notification
{
[mCaptureSession stopRunning];
if ([[mCaptureVideoDeviceInput device] isOpen])
[[mCaptureVideoDeviceInput device] close];
if ([[mCaptureAudioDeviceInput device] isOpen])
[[mCaptureAudioDeviceInput device] close];
}
Освободите память для своих объектов получения.
- (void)dealloc
{
[mCaptureSession release];
[mCaptureVideoDeviceInput release];
[mCaptureAudioDeviceInput release];
[mCaptureMovieFileOutput release];
[super dealloc];
}
Добавьте, что они запускают и прекращают записывать действия.
- (IBAction)startRecording:(id)sender
.
.
.
- (IBAction)stopRecording:(id)sender
}
Укажите выходное место назначения для своих носителей с записанными данными, в этом случае, фильма в формате QuickTime.
Вставьте блок кода в IB
startRecording:
иstopRecording:
действия на предыдущем шаге.
{
[mCaptureMovieFileOutput recordToOutputFileURL:[NSURL fileURLWithPath:@"/Users/Shared/My Recorded Movie.mov"]];
}
{
[mCaptureMovieFileOutput recordToOutputFileURL:nil];
- (void)captureOutput:(QTCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL forConnections:(NSArray *)connections dueToError:(NSError *)error
{
[[NSWorkspace sharedWorkspace] openURL:outputFileURL];
}
@end
Теперь создайте и скомпилируйте свое расширенное приложение устройства записи QTKit. После запуска приложения можно начать получать аудио от iSight камеры или аудио/видео от камеры DV. Вывод снова зарегистрирован как фильм в формате QuickTime и затем автоматически открыт в QuickTime Player на Вашем рабочем столе.