Принятие QuickTime X для воспроизведения
QuickTime X, высокоэффективные носители воспроизводят технологию, которую можно использовать для включения приложений. Принятие его так же просто как выбирающий в и затем проверяя использование только поддерживаемой функциональности.
В этой главе описываются, как можно изменить существующий код QTKit для использования в своих интересах QuickTime X мультимедийных служб, предоставленных в OS X v10.6. Вы получаете доступ к службам воспроизведения носителей через платформу QTKit путем выбора в QuickTime X с вызовом отдельного метода.
QuickTime X мультимедийных служб
Как новая архитектура носителей, разработанная Apple и доступная в OS X v10.6, QuickTime X специально предназначен для эффективного, высокоэффективного воспроизведения аудио/видео носителей с оптимизированной поддержкой современных кодеков, таких как H.264 и AAC. Это предоставляет поддержку для следующего:
Многопоточный
Полностью собственные 64-разрядные библиотеки, доступные для 64-разрядных исполнимых программ
Поддержка ColorSync
Особенно, QuickTime, X мультимедийных служб не требуют клиентского сотрудничества или вмешательства для совместного использования процессорного времени и сохранить скорость отклика к вводу данных пользователем.
В QuickTime 7 процессорное время получено согласованно. Это означает, что несмотря на то, что QTKit заботится о подробных данных, некоторые приложения, возможно, должны вмешаться через такие методы как -[QTMovie setIdling:]
, и некоторые операции синхронны, особенно I/O, происходящий во время инициализации.
В отличие от этого, QuickTime X получает процессорное время преимущественно, согласно инструкциям по поточной обработке OS X, и все операции являются асинхронными. Операции носителей для инициализации, воспроизведения и разрушения, включая I/O, декодирование, и рендеринг, происходят асинхронно с операциями клиентского приложения. Как следствие скорость отклика к вводу данных пользователем всегда сохраняется.
Поскольку QuickTime X делает то, что необходимо, чтобы заставить расширенные операции по обработке носителей произойти на фоновом потоке, Ваше приложение избегает блокироваться в течение долгих промежутков времени, например при открытии медиа-файла для воспроизведения.
В целях воспроизведения носителей QTKit обеспечивает по существу один из двух путей, или непосредственно через QuickTime X или через QuickTime 7, как показано на рисунке 3-1. Эти пути очевидны для Вашего приложения, однако, если Вы не принимаете решение выбрать в QuickTime X.
В работе с QTMovie
объекты, сгенерированные получением, архитектура получения QTKit использует QuickTime X прозрачно.
Как это Работы
Используя мультимедийные службы, предоставленные QuickTime X, можно открыть медиа-файл, собрать информацию о характеристиках воспроизведения фильма (таких как его продолжительность, кодеки, используемые, и изображения миниатюр), вывести на экран фильм в представлении и управлять загрузкой и воспроизведением того фильма.
QTKit попытается использовать QuickTime X, если Вы скажете ему открывать медиа-файл или (a) асинхронно или (b) для воспроизведения только. Однако, если тот файл не будет закодирован с помощью современного кодека, то QTKit автоматически отступит к QuickTime 7. Это происходит тихо, тем не менее, таким образом, необходимо будет протестировать на состояния ошибки сами, как описано Некоторые Ограничения.
Выбор в QuickTime X
Два новых атрибута фильма определяются в OS X v10.6, которые позволяют Вам выбрать в более эффективные возможности носителей, предоставленные в QuickTime X. Это
QTMovieOpenForPlaybackAttribute
. Указывает ли aQTMovie
объект будет использоваться только для воспроизведения а не для редактирования или экспорта.QTMovieOpenAsyncRequiredAttribute
. Указывает ли aQTMovie
объект должен быть открыт асинхронно.
В то время как поведение по умолчанию QTMovie
должен открыть фильмы, которые могут быть сделаны доступными для редактирования и экспортными, можно создать словарь атрибутов, один из которых указывает, где фильм, что функции фильма являются (дополнительными), и указывают, что Вы хотите открыть его для воспроизведения.
Для инициализации атрибута, как показано в Перечислении 3-1, сделайте это:
Перечисление 3-1 , Инициализирующее атрибут
- (id)initWithAttributes:(NSDictionary *)attributes |
error:(NSError **)errorPtr; |
Фрагмент кода (показанный в Перечислении 3-2) иллюстрирует, как Вы передаете этот ключ со значением NSNumber numberWithBool:YES
в словаре атрибутов, переданных initWithAttributes:error:
указать, что Вы интересуетесь только проигрыванием фильма. Если редактирование или экспорт служб не требуются, QTMovie
может быть в состоянии выбрать более эффективные пути выполнения кода.
Теперь для открытия файла ролика с помощью более эффективного пути воспроизведения, предоставленного в QuickTime X, используйте это:
Перечисление 3-2 , Открывающееся фильм для воспроизведения с помощью QuickTime X
QTMovie *movie = nil; |
NSError *error = nil; |
NSNumber *num = [NSNumber numberWithBool:YES]; |
NSDictionary *attributes = |
[NSDictionary dictionaryWithObjectsAndKeys: |
fileName, QTMovieFileNameAttribute, |
num, QTMovieLoopsAttribute, |
num, QTMovieOpenForPlaybackAttribute, |
nil]; |
movie = [[QTMovie alloc] initWithAttributes:attributes |
error:&error]; |
Поскольку словарь атрибутов содержит пару ключ/значение с QTMovieOpenForPlaybackAttribute
ключ и значение YES
, QTKit использует новые мультимедийные службы, если это возможно, для воспроизведения мультимедийного контента в выбранном файле.
Некоторые ограничения
Путем объявления этого a QTMovie
инициализируется в целях воспроизведения, Вы преднамеренно и явно конфискованные части QTMovie
договор, ранее установленный API QTKit для получения наилучшей имеющейся оптимизации для воспроизведения медиаресурса, представленного тем экземпляром QTMovie
.
Когда Вы выбираете - в, Вы объявляете что такие операции как редактирование, сохранение и экспорт для экземпляров QTMovie
не необходимы.
Не все медиа-файлы могут быть обработаны тот же путь. Например, можно указать файл ролика и запросить, что файл, который будет открыт для воспроизведения, но это может быть вид файла, который не может обработать QuickTime X. В этом случае QTKit просто отступает к стандартному пути QuickTime 7 для того, чтобы открыть и проигрывать фильмы.
Обратите внимание на то, что Вы не можете определить, отступил ли фильм к пути QuickTime 7. Это происходит прозрачно с пользователем. Вы ограничиваетесь тем же APIs только для воспроизведения, отступает ли QTKit к QuickTime 7. Указание QTMovieOpenForPlaybackAttribute
средние значения подписывая договор, который Вы никогда не будете делать почти, воспроизводят фильм, независимо от того что утверждает, что это, оказывается, находится в.
Если Вы скажете QTKit, что он может и должен использовать QuickTime X, то Вы будете ограничены только тем APIs, выделенным для использования с поддерживающимися воспроизведением фильма и связанными с воспроизведением операциями и кодеками. Они документируются в Ссылку Платформы QTKit, особенно в Ссылку класса QTMovie.
Если QTMovieOpenForPlaybackAttribute
установлен, но приложение делает попытку работы, выходящей за пределы объема воспроизведения, NSException
с именем QTDisallowedForInitializationPurposeException
будет повышен.