Информация о версии Основы AV для iOS 4.3
Эта статья суммирует некоторые новые функции и изменения в функциональности в Основе AV в iOS 4.3.
Содержание:
Определение, может ли работа быть выполнена на активе
Четыре новых свойства были определены на AVAsset помочь Вам определить, могут ли операции, поддерживаемые Основой AV, быть выполнены на определенном активе.
playableуказывает лиAVPlayerItemинициализированный с активом может игратьсяAVPlayer.exportableуказывает лиAVAssetExportSessionинициализированный с активом может произвести выходной файл.readableуказывает лиAVAssetReaderинициализированный с активом может обеспечить носители, полученные или извлеченные из актива.composableуказывает ли актив или любой изAVAssetTrackобъекты могут быть вставлены вAVMutableComposition.
Обратите внимание на то, что значение каждого из этих свойств YEStrue даже если только условно поддерживается связанная работа. Примеры:
playableYEStrueдаже если актив защитил содержание и требует авторизации и приложения и содержания для воспроизведения. Можно определить, защитил ли актив содержание черезhasProtectedContent(AVAsset).exportableYEStrueдаже если только некоторые предварительные установки экспорта совместимы с активом. Можно получить массив предварительных установок экспорта, которые могут использоваться с активом черезexportPresetsCompatibleWithAsset:(AVAssetExportSession).readableYEStrueдаже если только некоторые классыAVAssetReaderOutputили только некоторые конфигурации настроек на выводах могут использоваться с активом. Можно определить ли определенный экземплярAVAssetReaderOutputс его настройками может использоваться путем вызоваcanAddOutput:.
Улучшения для HTTP живая потоковая передача
Инспекционные функции AVURLAsset были улучшены для обработки HTTP Живые ресурсы Потоковых медиа. Поэтому начиная с iOS 4.3 можно подготовить любой актив к воспроизведению универсальным способом, согласно методам наиболее успешной практики, первоначально обрисованным в общих чертах для основанных на файле активов в Руководстве по программированию Основы AV. Те шаги следующие:
Создайте использование актива
AVURLAssetи загрузите его использование дорожекloadValuesAsynchronouslyForKeys:completionHandler:.Когда актив загрузит свои дорожки, создайте экземпляр
AVPlayerItemиспользование актива.Свяжите элемент с экземпляром
AVPlayer.Ожидайте, пока состояние элемента не указывает, что это готово играть.
Когда состояние изменяется, обычно Вы используете наблюдение значения ключа для получения уведомления.
В то время как можно все еще подготовить активы на основе потоков к воспроизведению согласно шагам, описанным в частности для них в Руководстве по программированию Основы AV, начиная с iOS 4.3 больше не необходимо сделать так и поэтому больше не необходимый для Вас, чтобы определить ли URL ссылки HTTP Живые Потоковые медиа.
Обратите внимание на то, что AVURLAsset предоставляет информацию о постоянном состоянии синхронизированного медиаресурса. Из-за динамического характера HTTP Живые Потоковые медиа, продолжительность носителей и специфические особенности доступных дорожек могут измениться во время воспроизведения. Поэтому активы URL инициализировали с URLs, что ссылочный HTTP Живые Потоковые медиа могут иметь значения на свое время и отслеживают свойства, отличающиеся от значений продолжительности, и отслеживает свойства AVPlayerItem объекты, играющие их. В частности продолжительность, о которой сообщает актив URL для основанных на потоковой передаче носителей, обычно kCMTimeIndefinite, в то время как продолжительность соответствия AVPlayerItem может отличаться и может измениться, в то время как это играет. Точно так же массив AVAssetTrack объекты, доступные через tracks свойство актива URL обычно пусто для основанных на потоковой передаче носителей, в то время как массив AVPlayerItemTrack объекты, доступные через tracks свойство на соответствующем элементе проигрывателя может иметь различное количество и может измениться, в то время как это играет. Если Вы должны, можно наблюдать обоих duration и tracks ключи AVPlayerItem оставаться в синхронизации с текущим состоянием воспроизведения.
AVPlayerItem был улучшен для обеспечения информации доступа и ошибки во время HTTP Живое воспроизведение Потоковой передачи. Журнал доступа к сети доступен через accessLog. Журнал информации об ошибке доступен через errorLog.
Продолжительность синхронизированных медиаресурсов для воспроизведения
Из-за динамического характера HTTP Живые Потоковые медиа наша наиболее успешная практика для получения продолжительности AVPlayerItem объект изменился в iOS 4.3. До iOS 4.3 Вы получили бы продолжительность элемента проигрывателя путем выборки значения свойства продолжительности его связанного AVAsset объект. Как выше, однако, отмечают, что для HTTP Живые Потоковые медиа продолжительность элемента проигрывателя во время любого определенного сеанса воспроизведения может отличаться от продолжительности его актива. Поэтому новое заметное значение ключа duration свойство было определено на AVPlayerItem.
Для создания кода совместимым со всеми доступными версиями Основы AV можно проверить ли свойство продолжительности AVPlayerItem экземпляр доступен, и получите продолжительность для воспроизведения следующим образом:
CMTime itemDuration = kCMTimeInvalid; |
// Once the AVPlayerItem becomes ready to play, i.e. [playerItem status] == AVPlayerItemStatusReadyToPlay), |
// its duration can be fetched from the item as follows. |
if ([AVPlayerItem instancesRespondToSelector:@selector (duration)]) { |
// Fetch the duration directly from the AVPlayerItem. |
itemDuration = [playerItem duration]; |
} |
else { |
// Reach through the AVPlayerItem to its asset to get the duration. |
itemDuration = [[playerItem asset] duration]; |
} |
Определение, играл ли элемент успешно
AVPlayerItem отправляет уведомление AVPlayerItemDidPlayToEndTimeNotification когда это успешно достигает своего времени окончания во время нормального воспроизведения. Начиная с iOS 4.3, AVPlayerItem отправит уведомление AVPlayerItemFailedToPlayToEndTimeNotification если воспроизведение прервано неисправимой ошибкой. userInfo словарь уведомления будет содержать NSError объект, описывающий проблему, которая может быть получена при помощи ключа AVPlayerItemFailedToPlayToEndTimeErrorKey. Например, если базовый синхронизированный медиаресурс содержит поврежденные данные, связанные с определенным временем воспроизведения, препятствующим тому, чтобы воспроизведение продолжило кроме того время, AVPlayerItem отправит AVPlayerItemFailedToPlayToEndTimeNotification.
Доступ к метаданным главы
В iOS 4.3, AVAsset был улучшен для предоставления информации метаданных, связанной с главами, включая заголовки главы и изображения главы. Класс AVTimedMetadataGroup был определен для организации наборов элементов метаданных диапазоном времени; каждая глава актива будет представлена соответствующим экземпляром AVTimedMetadataGroup.
Для загрузки информации о главе для актива запросите значение на ключ availableChapterLocales в вызове к loadValuesAsynchronouslyForKeys:completionHandler:. Один раз значение availableChapterLocales был успешно загружен, можно получить информацию о главе для любой определенной локали через chapterMetadataGroupsWithTitleLocale:containingItemsWithCommonKeys:. Если Вы хотите получить изображения главы вместе с заголовками главы, включайте ключ метаданных AVMetadataCommonKeyArtwork в массиве общих ключей, которые Вы указываете. Этот метод возвратит массив экземпляров AVTimedMetadataGroup, один на главу.
Можно получить timeRange главы через timeRange. Информация о метаданных связалась с главой, обычно включая элемент, имеющий общий ключ метаданных AVMetadataCommonKeyTitle, доступно через items, который возвращает массив экземпляров AVMetadataItem.
Обратите внимание на то, что некоторые элементы метаданных, включенные в AVTimedMetadataGroup может не иметь времени и продолжительности, соответствующих точно timeRange группы. Это может произойти, например, с файлом фильма в формате QuickTime, имеющим дорожку изображения главы с временами, не выравнивающимися точно с временами ее текстовой дорожки главы. Так, чтобы вся информация для timeRange группы была доступна для Вас, все элементы, накладывающиеся своевременно с timeRange группы, будут включены в группу, и можно решить который элемент использовать в любое определенное время согласно временам и продолжительностям включенных элементов.
Из-за пути информация главы может храниться в синхронизированных медиаресурсах, дополнительный I/O может потребоваться, чтобы получать значение AVMetadataItem включенный в AVTimedMetadataGroup. Для предотвращения потенциально длинный (и опасный) блокирование можно загрузить значения AVMetadataItem объекты асинхронно с помощью того же AVAsynchronousKeyValueLoading загрузка протокола, уже поддерживаемого AVAsset и AVAssetTrack. Вызвать loadValuesAsynchronouslyForKeys:completionHandler:] и включайте ключ @"value" в указанном массиве ключей для инициирования загрузки значения.
Попытка выполнить AVCaptureSession в фоновом режиме
Основа AV не поддерживает выполнение AVCaptureSession в фоновом режиме. Начиная с iOS 4.3, при попытке выполнить сеанс получения в фоновом режиме, сеанс отправит уведомление AVCaptureSessionRuntimeErrorNotification с полезной нагрузкой, содержащей NSError объект с ошибкой code AVErrorDeviceIsNotAvailableInBackground.
Copyright © 2015 Apple Inc Все права защищены. Условия использования | Политика конфиденциальности | обновленный: 12.10.2011