Настройка приложения медиапроигрывателя
В этой главе Вы далее расширяете возможности и производительность Вашего приложения медиапроигрывателя. Вы начинаете путем добавления собственных кнопок управления от библиотеки Interface Builder сменных средств управления. Эти кнопки позволяют Вам управлять воспроизведением фильма, не полагаясь на встроенные средства управления, доступные в QTMovieView
объект. Затем, Вы работаете с атрибутами фильма, позволяющими Вам лучше обработать дисплей и воспроизведение фильмов. Вы делаете это при помощи кода для установки представления, изменяющего размеры, который уважает размер и форматное соотношение выведенного на экран мультимедийного контента. В последнем разделе этой главы Вы реализуете, с QuickTime X, возможностями легкого медиапроигрывателя для более быстрого, более эффективного воспроизведения мультимедийного контента.
Глава основывается на понимании API QTKit, который Вы получили из предыдущих глав. Примеры кода, обсужденные в этой главе, полагаются на приложение медиапроигрывателя, которое Вы создали в Расширении Приложения Медиапроигрывателя.
Создайте пользовательские элементы управления для проекта MyMediaPlayer
Добавление пользовательских элементов управления для воспроизведения фильма к Вашему проекту медиапроигрывателя является относительно прямым. Вы определяете переменные экземпляра в своем файле объявления и затем запускаете Интерфейсного Разработчика, чтобы добавить средства управления от библиотеки доступных сменных средств управления и обеспечить электричеством игру и кнопки паузы к QTMovieView
объект для пользовательского элемента управления воспроизведения фильма.
При работе с демонстрационным проектом MyMediaPlayer, который Вы создали в Расширении Приложения Медиапроигрывателя на шагах, следующих, Вы создаете пользовательские элементы управления для своего приложения проигрывателя.
В Вашем проекте MyMediaPlayer Xcode откройтесь
MyDocument.h
файл объявления.Объявите
mMovie
переменная экземпляра, указывающая на aQTMovie
объект.Объявите
mMovieWindow
переменная экземпляра, указывающая наNSWindow
возразите как Интерфейсный выход Разработчика.IBOutlet NSWindow *mMovieWindow;
Объявите
mMovieView
переменная экземпляра, указывающая на aQTMovieView
Соедините интерфейсом с выходом Разработчика.IBOutlet QTMovieView *mMovieView;
В этой точке, коде в Вашем
MyDocument.h
файл должен быть похожим на это.#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface MyDocument : NSDocument
{
QTMovie *mMovie;
IBOutlet NSWindow *mMovieWindow;
IBOutlet QTMovieView *mMovieView;
}
@end
Сохраните свой файл.
Теперь Вы готовы добавить кнопки управления, необходимо настроить воспроизведение носителей содержания в проекте XCode.
Выберите Control Objects in Interface Builder
Добавить кнопки в Интерфейсном Разработчике:
Разработчик Интерфейса запуска 3.2 и открытый
MyDocument.xib
файл в Вашем окне проекта XCode.Измените размеры
QTMovieView
возразите в своем окне так, чтобы Вы предоставили пространство в нижней части для размещения Ваших кнопок управления.Выберите Tools> Library, чтобы открыть библиотеку Interface Builder средств управления и прокрутить вниз, пока Вы не найдете овальную кнопку (
NSButton
) средства управления Вам нужно для Вашего проекта.Выберите и перетащите две кнопки, которые можно назвать Игрой и Паузой в более низкую область окна.
Перетащите управление кнопку воспроизведения к
play:
действиеQTMovieView
возразите и кнопка Pause противpause:
действиеQTMovieView
объект обеспечить электричеством и соединить оба объекта.Щелкните
QTMovieView
объект.
Измените атрибуты
QTMovieView
объект.Выберите Tools> Inspector.
В панели Inspector выберите значок Movie View Attributes, появляющийся как первый значок в строке наверху панели.
Удостоверьтесь, что снимается флажок Show Controller.
Сохраните Ваш файл в Интерфейсном Разработчике и возвратите свой проект XCode.
Создайте и скомпилируйте свой проект в XCode
После того, как Вы завершили последовательность шагов, просто создаете и выполняете проект MyMediaPlayer в XCode. Когда проигрыватель запустится, откройте и играйте любой фильм в формате QuickTime по Вашему выбору.
Найдите a .mov
файл и запуск фильм из меню File> Open в Вашем приложении медиапроигрывателя. Используйте пользовательские элементы управления, которые Вы добавили к игре и приостанавливаете воспроизведение мультимедийного контента.
Используя атрибуты фильма для настройки операций фильма
Если Вы открываете и рассматриваете Ссылку класса QTMovie, Вы находите серию таблиц, описывающих атрибуты фильма. Эти атрибуты фильма являются некоторыми наиболее мощными функциями API QTKit, в котором можно получить доступ к данным в a QTMovie
объект, хранящийся как атрибуты, при помощи ключа атрибута. Данные, инкапсулировавшие как атрибуты, могут включаться в словаре и использоваться соответственно в Вашем коде для обработки многих важных задач.
Каждый раз, когда Вы инстанцируете нового QTMovie
объект, можно использовать его указанные атрибуты для выполнения определенных задач. Например, можно использовать атрибуты фильма в словаре для указания:
Расположение данных фильма
Как нужно инстанцировать фильм
Характеристики воспроизведения фильма или другие свойства
QTMovie
объект
Вот некоторые ключи, указывающие атрибуты данных фильма, к которым можно получить доступ и управлять в приложении. Полный список атрибутов фильма доступен в Ссылке Платформы QTKit.
Атрибут | Описание |
---|---|
| Содержит строку авторского права для фильма. |
| Указывает, может ли фильм быть отредактирован или нет. |
| Указывает, имеет ли фильм аудиотрек или нет. |
Указывает, может ли фильм быть продвинут от кадра до кадра. | |
Возвращает размер фильма, когда выведено на экран в полном разрешении. |
В Расширении Приложения Медиапроигрывателя Вы уже получили доступ и установили один из важных ключей атрибута, доступных в QTMovie
класс, когда Вы добавили следующую одну строку кода к Вашему приложению медиапроигрывателя:
[newMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute]; |
Путем установки того атрибута Вы позволили Вашему медиапроигрывателю поддерживать простое сокращение, копию и редактирование вставки на фильме.
Изменение MyMediaPlayer для естественного воспроизведения фильма размера
Когда Вы открываете и выводите на экран любой фильм в формате QuickTime, Вы, вероятно, замечаете, что размер фильма может не соответствовать фактический размер исходного фильма в формате QuickTime, когда воспроизведено в QuickTime Player. Например, звуковой файл все еще открывает и выводит на экран размер фильма в формате QuickTime по умолчанию, связанного с Вашим проектом XCode. Теперь можно изменить дисплей любого мультимедийного контента путем доступа к атрибуту фильма, вводят код.
Проигрывать назад фильмы в исходном размере фильма в формате QuickTime:
Измените код в Вашем
MyDocument.h
файл объявления так, чтобы это было похоже на это:#import <Cocoa/Cocoa.h>
#import <QTKit/QTKit.h>
@interface MyDocument : NSDocument
{
//movie document
QTMovie *mMovie;
// movie view
IBOutlet QTMovieView *mMovieView;
}
@property(retain) QTMovie *movie;
@end
Сохраните свой файл.
В Вашем
MyDocument.m
файл реализации, добавляет следующая строка кода после Вашего#import "MyDocument.h"
оператор:const static CGFloat kDefaultWidthForNonvisualMovies = 320;
Это указывает статическую постоянную ширину по умолчанию 320 пикселей для фильмов, которые не визуальны, т.е. обычно аудиофайлы такой как
.mp3
аудиоклипы, как проиллюстрировано ниже. Вы хотите быть в состоянии воспроизвести эти файлы в надлежащей ширине и высоте, и не как полностью расширенные фильмы в формате QuickTime.После Вашего
@implementation My Document
директива, установленная уведомление, которое естественный размер Вашего фильма изменил при развертывании приложения с помощью OS X v10.6.- (void)dealloc
{
QTMovie *movie = [self movie];
if (movie)
{
[[NSNotificationCenter defaultCenter] removeObserver:self
#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6)
name:QTMovieNaturalSizeDidChangeNotification
#else
name:QTMovieEditedNotification
#endif
object:movie];
}
[self setMovie:nil];
[super dealloc];
}
Теперь установите значение размера как естественный атрибут размера для фильма.
- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
[super windowControllerDidLoadNib:aController];
QTMovie *movie = [self movie];
if (movie)
{
[self sizeWindowToMovie];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieNaturalSizeDidChange:)
#if defined(MAC_OS_X_VERSION_10_6) && (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6)
name:QTMovieNaturalSizeDidChangeNotification
#else
name:QTMovieEditedNotification
#endif
object:movie];
}
else
[mMovieView setMovie:[QTMovie movie]];
[mMovieView setShowsResizeIndicator:YES];
[[mMovieView window] setShowsResizeIndicator:NO];
}
Измерьте окно проигрывателя для соответствия размера фильма.
- (void)sizeWindowToMovie
{
QTMovie *movie = [self movie];
NSSize contentSize = NSZeroSize;
NSValue *contentSizeValue = [movie attributeForKey:QTMovieNaturalSizeAttribute];
if (contentSizeValue)
contentSize = [contentSizeValue sizeValue];
if ([mMovieView isControllerVisible])
{
contentSize.height += [mMovieView movieControllerBounds].size.height;
if (contentSize.width == 0)
{
contentSize.width = kDefaultWidthForNonvisualMovies;
}
}
[[mMovieView window] setContentSize:contentSize];
}
Укажите уведомление, которое изменил размер окна.
- (void)movieNaturalSizeDidChange:(NSNotification *)notification
{
[self sizeWindowToMovie];
}
Считайте фильм и отметьте его как доступный для редактирования.
- (BOOL)readFromURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError
{
QTMovie *newMovie = [QTMovie movieWithURL:absoluteURL error:outError];
if (newMovie) {
[newMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];
[self setMovie:newMovie];
}
return (newMovie != nil);
}
Добавьте
@synthesize
директива.@synthesize movie = mMovie;
Наверху Вашего файла – после
const static CGFloat kDefaultWidthForNonvisualMovies = 320;
оператор – объявляет интерфейс дляsizeWindowToMovie
метод.@interface MyDocument (MyDocumentInternal)
- (void)sizeWindowToMovie;
@end
Сохраните свой проект XCode.
Щелкните
MyDocument.xib
в Вашем проекте и открытый перо в Интерфейсном Разработчике.В Интерфейсном Разработчике Перетащите управление от значка File's Owner до
QTMovieView
возразите и обеспечьте электричеством выход кmMovieView
.Сохраните свое Интерфейсное перо Разработчика.
Теперь создайте и скомпилируйте свой проект в XCode.
Откройте любой видео/аудио мультимедийный контент, который QuickTime поддерживает, такие как фильмы H.264, и это выведет на экран и представит в надлежащем, первоначальном размере носителей.
Путем добавления этих блоков кода Вы измерили окно к естественному размеру фильма, когда это открывает и выводит на экран мультимедийный контент, и Вы добавили наблюдателя уведомления, чтобы гарантировать, что фильм изменяет размеры к размеру окна и уведомляет Вас, когда изменяется размер. Это важные понятия для понимания в разработке приложений, ведущих себя должным образом и воспроизводящих QuickTime и мультимедийный контент в его первоначальном размере.
Доступ к мультимедийным службам в QuickTime X
Если необходимо воспроизвести носители, можно использовать в своих интересах высокоэффективную эффективность воспроизведения, предоставленную QuickTime X в OS X v10.6. Вы получаете доступ к службам воспроизведения носителей через платформу QTKit.
QuickTime X является новой архитектурой носителей, разработанной Apple, предоставляющим мультимедийные службы разработчикам приложений QTKit, которые должны воспроизвести аудио/видео носители. Доступный в OS X v10.6, это специально предназначено для эффективного, высокоэффективного воспроизведения аудио/видео носителей с оптимизированной поддержкой современных кодеков, таких как H.264 и AAC.
Используя QuickTime X, можно открыть медиа-файл, собрать информацию о характеристиках воспроизведения фильма (таких как его продолжительность, кодеки, используемые, и изображения миниатюр), вывести на экран фильм в представлении и управлять загрузкой и воспроизведением того фильма. Однако фильмы с помощью новых мультимедийных служб не могут быть отредактированы или экспортированы.
В OS X v10.6, определяются два новых атрибута фильма. Первый атрибут, QTMovieOpenAsyncRequiredAttribute
, указывает ли a QTMovie
объект должен быть открыт асинхронно. Второй атрибут, QTMovieOpenForPlaybackAttribute
, указывает ли a QTMovie
объект будет использоваться только для воспроизведения а не для редактирования или экспорта.
Поведение по умолчанию QTMovie
должен открыть фильмы, которые могут быть сделаны доступными для редактирования и экспортными. Вы передаете QTMovieOpenForPlaybackAttribute
ключ со значением NSNumber numberWithBool:YES
в словаре атрибутов, переданных initWithAttributes:error:
. Это указывает, что Вы интересуетесь только проигрыванием фильма. Если Вы не должны делать редактирования или экспорта, QTMovie
может быть в состоянии выбрать более эффективные пути выполнения кода.
Чтобы открыть и воспроизвести файл ролика, Вы используете следующий код:
- (void)windowControllerDidLoadNib:(NSWindowController *) aController |
{ |
[super windowControllerDidLoadNib:aController]; |
if ([self fileName]) { |
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: |
[self fileName], QTMovieFileNameAttribute, |
[[NSNumber numberWithBool:YES], |
QTMovieOpenForPlaybackAttribute, nil]; |
movie = [[QTMovie alloc] initWithAttributes:attributes error:NULL]; |
[movieView setMovie:movie]; |
[movie release]; |
[[movieView movie] play]; |
} |
} |
Поскольку словарь атрибутов содержит пару ключ/значение с QTMovieOpenForPlaybackAttribute
ключ и значение YES
, QTKit использует новые мультимедийные службы, если это возможно, для воспроизведения мультимедийного контента в выбранном файле.
Сводка
В этой главе Вы учились как:
Настройте функциональность приложения MyMediaPlayer, позволив Вам создать пользовательский запуск и средства управления остановкой для воспроизведения фильма в формате QuickTime или аудиофайлов.
Используйте атрибуты фильма для доступа к данным в a
QTMovie
объект, позволяя Вам получить доступ и управлять данными фильма в Вашем приложенииИзмените приложение MyMediaPlayer для воспроизведения фильмов и носителей в их исходном или естественном размере.
Получите доступ к новым мультимедийным службам, доступным в QuickTime X и OS X v10.6.
Затем кодирование присвоений
Если Вы работали через примеры кодирования в первых трех главах этого учебного руководства, Вы находитесь хорошо на Вашем пути к приобретанию навыков, которые Вы должны иметь для разработки приложений для воспроизведения носителей.
Следующие три главы представляют Вас методам и классам в API QTKit, позволяющем, Вы действительно получаете и запись мультимедийного контента. Вы создаете приложение устройства записи, которое просто к разработке и реализации, все же мощно в ее функциональности.
Кроме того, Вы добавляете код к приложению устройства записи, чтобы поддерживать получение видео DV и аудио носителей, и затем создать другое приложение, позволяющее Вам получить и записать неподвижные изображения, с помощью методов, используемых киноиндустрией для анимации движения остановки. После записи тех неподвижных изображений Вы будете в состоянии вывести содержание к фильму в формате QuickTime, создавая некоторые необычные, анимируемые эффекты.