Настройка приложения медиапроигрывателя

В этой главе Вы далее расширяете возможности и производительность Вашего приложения медиапроигрывателя. Вы начинаете путем добавления собственных кнопок управления от библиотеки Interface Builder сменных средств управления. Эти кнопки позволяют Вам управлять воспроизведением фильма, не полагаясь на встроенные средства управления, доступные в QTMovieView объект. Затем, Вы работаете с атрибутами фильма, позволяющими Вам лучше обработать дисплей и воспроизведение фильмов. Вы делаете это при помощи кода для установки представления, изменяющего размеры, который уважает размер и форматное соотношение выведенного на экран мультимедийного контента. В последнем разделе этой главы Вы реализуете, с QuickTime X, возможностями легкого медиапроигрывателя для более быстрого, более эффективного воспроизведения мультимедийного контента.

Глава основывается на понимании API QTKit, который Вы получили из предыдущих глав. Примеры кода, обсужденные в этой главе, полагаются на приложение медиапроигрывателя, которое Вы создали в Расширении Приложения Медиапроигрывателя.

Создайте пользовательские элементы управления для проекта MyMediaPlayer

Добавление пользовательских элементов управления для воспроизведения фильма к Вашему проекту медиапроигрывателя является относительно прямым. Вы определяете переменные экземпляра в своем файле объявления и затем запускаете Интерфейсного Разработчика, чтобы добавить средства управления от библиотеки доступных сменных средств управления и обеспечить электричеством игру и кнопки паузы к QTMovieView объект для пользовательского элемента управления воспроизведения фильма.

При работе с демонстрационным проектом MyMediaPlayer, который Вы создали в Расширении Приложения Медиапроигрывателя на шагах, следующих, Вы создаете пользовательские элементы управления для своего приложения проигрывателя.

  1. В Вашем проекте MyMediaPlayer Xcode откройтесь MyDocument.h файл объявления.

  2. Объявите mMovie переменная экземпляра, указывающая на a QTMovie объект.

  3. Объявите mMovieWindow переменная экземпляра, указывающая на NSWindow возразите как Интерфейсный выход Разработчика.

    IBOutlet NSWindow     *mMovieWindow;
  4. Объявите mMovieView переменная экземпляра, указывающая на a QTMovieView Соедините интерфейсом с выходом Разработчика.

    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
  5. Сохраните свой файл.

Теперь Вы готовы добавить кнопки управления, необходимо настроить воспроизведение носителей содержания в проекте XCode.

Выберите Control Objects in Interface Builder

Добавить кнопки в Интерфейсном Разработчике:

  1. Разработчик Интерфейса запуска 3.2 и открытый MyDocument.xib файл в Вашем окне проекта XCode.

  2. Измените размеры QTMovieView возразите в своем окне так, чтобы Вы предоставили пространство в нижней части для размещения Ваших кнопок управления.

  3. Выберите Tools> Library, чтобы открыть библиотеку Interface Builder средств управления и прокрутить вниз, пока Вы не найдете овальную кнопку (NSButton) средства управления Вам нужно для Вашего проекта.

    • Выберите и перетащите две кнопки, которые можно назвать Игрой и Паузой в более низкую область окна.

    • Перетащите управление кнопку воспроизведения к play: действие QTMovieView возразите и кнопка Pause против pause: действие QTMovieView объект обеспечить электричеством и соединить оба объекта.

    • Щелкните QTMovieView объект.

  4. Измените атрибуты QTMovieView объект.

    • Выберите Tools> Inspector.

    • В панели Inspector выберите значок Movie View Attributes, появляющийся как первый значок в строке наверху панели.

    • Удостоверьтесь, что снимается флажок Show Controller.

  5. Сохраните Ваш файл в Интерфейсном Разработчике и возвратите свой проект XCode.

Создайте и скомпилируйте свой проект в XCode

После того, как Вы завершили последовательность шагов, просто создаете и выполняете проект MyMediaPlayer в XCode. Когда проигрыватель запустится, откройте и играйте любой фильм в формате QuickTime по Вашему выбору.

Найдите a .mov файл и запуск фильм из меню File> Open в Вашем приложении медиапроигрывателя. Используйте пользовательские элементы управления, которые Вы добавили к игре и приостанавливаете воспроизведение мультимедийного контента.

MyMediaPlayer with custom controls for QuickTime movie playback

Используя атрибуты фильма для настройки операций фильма

Если Вы открываете и рассматриваете Ссылку класса QTMovie, Вы находите серию таблиц, описывающих атрибуты фильма. Эти атрибуты фильма являются некоторыми наиболее мощными функциями API QTKit, в котором можно получить доступ к данным в a QTMovie объект, хранящийся как атрибуты, при помощи ключа атрибута. Данные, инкапсулировавшие как атрибуты, могут включаться в словаре и использоваться соответственно в Вашем коде для обработки многих важных задач.

Каждый раз, когда Вы инстанцируете нового QTMovie объект, можно использовать его указанные атрибуты для выполнения определенных задач. Например, можно использовать атрибуты фильма в словаре для указания:

Вот некоторые ключи, указывающие атрибуты данных фильма, к которым можно получить доступ и управлять в приложении. Полный список атрибутов фильма доступен в Ссылке Платформы QTKit.

Атрибут

Описание

QTMovieCopyrightAttribute

Содержит строку авторского права для фильма.

QTMovieEditableAttribute

Указывает, может ли фильм быть отредактирован или нет.

QTMovieHasAudioAttribute

Указывает, имеет ли фильм аудиотрек или нет.

QTMovieIsSteppableAttribute

Указывает, может ли фильм быть продвинут от кадра до кадра.

QTMovieNaturalSizeAttribute

Возвращает размер фильма, когда выведено на экран в полном разрешении.

В Расширении Приложения Медиапроигрывателя Вы уже получили доступ и установили один из важных ключей атрибута, доступных в QTMovie класс, когда Вы добавили следующую одну строку кода к Вашему приложению медиапроигрывателя:

    [newMovie setAttribute:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];

Путем установки того атрибута Вы позволили Вашему медиапроигрывателю поддерживать простое сокращение, копию и редактирование вставки на фильме.

Изменение MyMediaPlayer для естественного воспроизведения фильма размера

Когда Вы открываете и выводите на экран любой фильм в формате QuickTime, Вы, вероятно, замечаете, что размер фильма может не соответствовать фактический размер исходного фильма в формате QuickTime, когда воспроизведено в QuickTime Player. Например, звуковой файл все еще открывает и выводит на экран размер фильма в формате QuickTime по умолчанию, связанного с Вашим проектом XCode. Теперь можно изменить дисплей любого мультимедийного контента путем доступа к атрибуту фильма, вводят код.

Проигрывать назад фильмы в исходном размере фильма в формате QuickTime:

  1. Измените код в Вашем 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
  2. Сохраните свой файл.

  3. В Вашем MyDocument.m файл реализации, добавляет следующая строка кода после Вашего #import "MyDocument.h" оператор:

    const static CGFloat kDefaultWidthForNonvisualMovies = 320;

    Это указывает статическую постоянную ширину по умолчанию 320 пикселей для фильмов, которые не визуальны, т.е. обычно аудиофайлы такой как .mp3 аудиоклипы, как проиллюстрировано ниже. Вы хотите быть в состоянии воспроизвести эти файлы в надлежащей ширине и высоте, и не как полностью расширенные фильмы в формате QuickTime.

    Sketch of natural playback size for audio clips
  4. После Вашего @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];
    }
  5. Теперь установите значение размера как естественный атрибут размера для фильма.

    - (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];
    }
  6. Измерьте окно проигрывателя для соответствия размера фильма.

    - (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];
    }
  7. Укажите уведомление, которое изменил размер окна.

    - (void)movieNaturalSizeDidChange:(NSNotification *)notification
    {
        [self sizeWindowToMovie];
    }
  8. Считайте фильм и отметьте его как доступный для редактирования.

    - (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);
    }
  9. Добавьте @synthesize директива.

    @synthesize movie = mMovie;
  10. Наверху Вашего файла – после const static CGFloat kDefaultWidthForNonvisualMovies = 320; оператор – объявляет интерфейс для sizeWindowToMovie метод.

    @interface MyDocument (MyDocumentInternal)
    - (void)sizeWindowToMovie;
    @end
  11. Сохраните свой проект XCode.

  12. Щелкните MyDocument.xib в Вашем проекте и открытый перо в Интерфейсном Разработчике.

  13. В Интерфейсном Разработчике Перетащите управление от значка File's Owner до QTMovieView возразите и обеспечьте электричеством выход к mMovieView.

    ../Art/ib_wired_mmovieview.jpg../Art/ib_wired_mmovieview.jpg
  14. Сохраните свое Интерфейсное перо Разработчика.

  15. Теперь создайте и скомпилируйте свой проект в XCode.

  16. Откройте любой видео/аудио мультимедийный контент, который 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 использует новые мультимедийные службы, если это возможно, для воспроизведения мультимедийного контента в выбранном файле.

Сводка

В этой главе Вы учились как:

Затем кодирование присвоений

Если Вы работали через примеры кодирования в первых трех главах этого учебного руководства, Вы находитесь хорошо на Вашем пути к приобретанию навыков, которые Вы должны иметь для разработки приложений для воспроизведения носителей.

Следующие три главы представляют Вас методам и классам в API QTKit, позволяющем, Вы действительно получаете и запись мультимедийного контента. Вы создаете приложение устройства записи, которое просто к разработке и реализации, все же мощно в ее функциональности.

Кроме того, Вы добавляете код к приложению устройства записи, чтобы поддерживать получение видео DV и аудио носителей, и затем создать другое приложение, позволяющее Вам получить и записать неподвижные изображения, с помощью методов, используемых киноиндустрией для анимации движения остановки. После записи тех неподвижных изображений Вы будете в состоянии вывести содержание к фильму в формате QuickTime, создавая некоторые необычные, анимируемые эффекты.