Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека Разработчика iOS

Разработчик

Ссылка платформы AVFoundation ссылка на протокол AVAsynchronousKeyValueLoading

Опции
Развертывание Target:

На этой странице
Язык:

AVAsynchronousKeyValueLoading

Наследование


Не применимый

Соответствует


Не применимый

Оператор импорта


Swift

import AVFoundation

Objective C

@import AVFoundation;

Доступность


Доступный в iOS 4.0 и позже.

AVAsynchronousKeyValueLoading протокол определяет методы, позволяющие Вам использовать AVAsset или AVAssetTrack объект, не блокируя поток. «Ключ» является любым свойством в классе, реализующем этот протокол. Используя методы в протоколе, можно узнать текущий статус ключа (например, было ли соответствующее значение загружено); и спросите объект загрузить значения асинхронно, сообщив Вам, когда завершится работа.

Из-за природы синхронизированных аудиовизуальных носителей успешная инициализация актива не обязательно означает, что все его данные сразу доступны. Вместо этого актив будет ожидать для загрузки данных, пока работа не будет выполняться на нем (например, непосредственно вызывая любого релевантного AVAsset методы, воспроизведите через AVPlayerItem объект, использование экспорта AVAssetExportSession, чтение использования экземпляра AVAssetReader, и т.д.). Это означает, что несмотря на то, что можно запросить, значение любого ключа в любое время и его значение будут возвращены синхронно, вызывающий поток может быть блокирован, пока запрос не может быть удовлетворен. Чтобы избежать блокировать, Вы можете:

  • Во-первых, определите, является ли значение для данного ключа доступным использованием statusOfValueForKey:error:.

  • Если значение еще не было загружено, Вы можете попросить загрузить одно или более значений и уведомляетесь, когда они становятся доступным использованием loadValuesAsynchronouslyForKeys:completionHandler:.

Даже для вариантов использования, которые могут обычно поддерживать свободный доступ к некоторым ключам (такой что касается активов, инициализированных с URLs для файлов в локальной файловой системе), замедлитесь, I/O может потребовать AVAsset блокировать прежде, чем возвратить их значения. Несмотря на то, что блокирование может быть приемлемым в случаях, в которых Вы подготавливаете активы на фоновых потоках или в очередях работы во всех случаях, в которых нужно избежать блокирования, необходимо использовать loadValuesAsynchronouslyForKeys:completionHandler:.

  • Говорит активу загружать значения любого из уже не загружающихся указанных ключей. (требуемый)

    Объявление

    Swift

    func loadValuesAsynchronouslyForKeys(_ keys: [AnyObject]!, completionHandler handler: (() -> Void)!)

    Objective C

    - (void)loadValuesAsynchronouslyForKeys:(NSArray *)keys completionHandler:(void (^)(void))handler

    Параметры

    keys

    Массив строк, содержащих требуемые ключи.

    Ключи являются свойствами в классе, принимающем протокол.

    handler

    Блок, который будет вызван, когда загрузка успешно выполняется, перестал работать или отменяется.

    Обсуждение

    Обработчик завершения будет вызван точно один раз на вызов этого метода:

    • Синхронно, если ошибка I/O или другая связанная с форматом ошибка сразу происходят.

    • Асинхронно в последующее время, если загружающаяся ошибка происходит на более позднем этапе обработки, если cancelLoading вызывается на AVAsset экземпляр, или когда значения всех указанных ключей становятся загруженными.

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

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

    Блок в качестве примера показан ниже.

    • [asset loadValuesAsynchronouslyForKeys:[NSArray keyWithObject:@"duration"] completionHandler:^{
    • NSError *error = nil;
    • switch ([asset statusOfValueForKey:@"duration" error:&error]) {
    • case AVKeyValueStatusLoaded:
    • // duration is now known, so we can fetch it without blocking
    • CMTime duration = [asset duration];
    • // dispatch a block to the main thread that updates the display of asset duration in my user interface,
    • // or do something else interesting with it
    • default:
    • // something went wrong; depending on what it was, we may want to dispatch a
    • // block to the main thread to report th e error
    • }
    • }];

    Если фатальная ошибка уже произошла, обработчик завершения вызывается синхронно.

    Оператор импорта

    Objective C

    @import AVFoundation;

    Swift

    import AVFoundation

    Доступность

    Доступный в iOS 4.0 и позже.

  • Отчеты, доступно ли значение для данного ключа сразу без блокирования. (требуемый)

    Объявление

    Swift

    func statusOfValueForKey(_ key: String!, error outError: NSErrorPointer) -> AVKeyValueStatus

    Objective C

    - (AVKeyValueStatus)statusOfValueForKey:(NSString *)key error:(NSError **)outError

    Параметры

    key

    Ключ, состояние которого Вы хотите. Посмотрите AVKeyValueStatus для определенных ключей.

    outError

    Если состояние значения для key AVKeyValueStatusFailed, на передачи ссылкой NSError объект, описывающий произошедший отказ.

    Возвращаемое значение

    Текущее состояние загрузки значения для key. Посмотрите AVKeyValueStatus для определенных ключей.

    Обсуждение

    Вы используете этот метод для определения доступности значения для ключа. Этот метод не заставляет актив загружать значение ключа, это еще не доступно. Для запроса значений на ключи, которые не могут уже быть загружены без блокирования использовать loadValuesAsynchronouslyForKeys:completionHandler: и ожидайте вызова обработчика завершения, который будет информирован о доступности.

    Оператор импорта

    Objective C

    @import AVFoundation;

    Swift

    import AVFoundation

    Доступность

    Доступный в iOS 4.0 и позже.

  • Константы, указывающие состояние загрузки свойства.

    Объявление

    Swift

    enum AVKeyValueStatus : Int { case Unknown case Loading case Loaded case Failed case Cancelled }

    Objective C

    enum { AVKeyValueStatusUnknown, AVKeyValueStatusLoading, AVKeyValueStatusLoaded, AVKeyValueStatusFailed, AVKeyValueStatusCancelled }; typedef NSInteger AVKeyValueStatus;

    Константы

    • Unknown

      AVKeyValueStatusUnknown

      Указывает, что состояние свойства неизвестно.

      Доступный в iOS 4.0 и позже.

    • Loading

      AVKeyValueStatusLoading

      Указывает, что не полностью загружается свойство.

      Доступный в iOS 4.0 и позже.

    • Loaded

      AVKeyValueStatusLoaded

      Указывает, что свойство готово к употреблению.

      Доступный в iOS 4.0 и позже.

    • Failed

      AVKeyValueStatusFailed

      Указывает что попытка загрузить отказавшее свойство.

      Доступный в iOS 4.0 и позже.

    • Cancelled

      AVKeyValueStatusCancelled

      Указывает, что была отменена попытка загрузить свойство.

      Доступный в iOS 4.0 и позже.

    Обсуждение

    См. также statusOfValueForKey:error:.

    Оператор импорта

    Objective C

    @import AVFoundation;

    Swift

    import AVFoundation

    Доступность

    Доступный в iOS 4.0 и позже.