Об основе AV
Основа AV является одной из нескольких платформ, которые можно использовать, чтобы играть и создать основанные на времени аудиовизуальные носители. Это обеспечивает интерфейс Objective-C, который Вы используете для работы на подробном уровне с основанными на времени аудиовизуальными данными. Например, можно использовать его, чтобы исследовать, создать, отредактировать, или повторно закодировать медиа-файлы. Можно также получить введенные потоки от устройств и управлять видео во время получения в реальном времени и воспроизведения.
Необходимо обычно использовать абстракцию высшего уровня, доступную, который позволяет Вам выполнять задачи, которые Вы хотите. Например, в iOS:
Если Вы просто хотите проигрывать фильмы, на iOS Вы используете платформу Медиапроигрывателя (
MPMoviePlayerController
илиMPMoviePlayerViewController
), или для веб-носителей Вы могли использовать aUIWebView
объект. На OS X используют Платформу Набора AVAVPlayerView
класс для игры видео актива.Для записи видео при необходимости только в минимальном управлении форматом используйте платформу UIKit (
UIImagePickerController
).
Отметьте, однако, что некоторые примитивные структуры данных, которые Вы используете в Основе AV — включая связанные со временем структуры данных и непрозрачные объекты, чтобы перенести и описать данные носителей — объявляются в Базовой платформе Носителей.
Основа AV доступна в iOS 4.0 и позже, и OS X 10.7 и позже.
Сразу
Существует два фасета к платформе Основы AV — APIs, связанный с видео и APIs, связанным только с аудио. Более старые связанные с аудио классы обеспечивают простые способы иметь дело с аудио. Они описаны в Мультимедийном Руководстве по программированию, не в этом документе.
Для игры звуковых файлов можно использовать
AVAudioPlayer
.Для записи аудио можно использовать
AVAudioRecorder
.
Можно также сконфигурировать аудио поведение использования приложения AVAudioSession
; это описано в Аудио Руководстве по программированию Сеанса.
Представляя и Используя носители с основой AV
Основной класс, который использование платформы Основы AV для представления носителей AVAsset
. Проект платформы в основном ведется этим представлением. Понимание его структуры поможет Вам понять, как работает платформа. AVAsset
экземпляр является агрегированным представлением набора одной или более частей данных носителей (аудиотреки и видеотреки). Это предоставляет информацию о наборе в целом, таком как его заголовок, продолжительность, естественный размер представления, и т.д. AVAsset
не связывается к определенному формату данных. AVAsset
суперкласс других классов, используемых для создания экземпляров актива из носителей в URL (см. Используя Активы) и создать новые составы (см. Редактирование).
Каждая из отдельных частей данных носителей в активе имеет универсальный тип и вызвала дорожку. В типичном простом случае одна дорожка представляет аудио компонент, и другой представляет компонент видео; в сложном составе, однако, могут быть многократные перекрывающиеся дорожки аудио и видео. Активы могут также иметь метаданные.
Жизненно важное понятие в Основе AV - то, что инициализация актива или дорожки не обязательно означает, что это готово к употреблению. Это может потребовать, чтобы некоторое время вычислило даже продолжительность элемента (файл MP3, например, может не содержать сводную информацию). Вместо того, чтобы блокировать текущий поток, в то время как значение вычисляется, Вы просите значения и возвращаете ответ асинхронно посредством обратного вызова, что Вы определяете использование блока.
Воспроизведение
Основа AV позволяет Вам управлять воспроизведением актива сложными способами. Для поддержки этого это разделяет состояние представления актива от самого актива. Это позволяет, Вы к, например, играете два различных сегмента того же актива, одновременно представленного в различных разрешениях. Состоянием представления для актива управляет объект элемента проигрывателя; состоянием представления для каждой дорожки в активе управляет объект дорожки элемента проигрывателя. Используя элемент проигрывателя и дорожки элемента проигрывателя можно, например, установить размер, в котором визуальная часть элемента представлена проигрывателем, установила аудио параметры соединения и видео настройки состава, которые будут применены во время воспроизведения или отключат компоненты актива во время воспроизведения.
Вы играете элементы проигрывателя с помощью объекта проигрывателя и направляете вывод проигрывателя к Базовому Слою анимации. Можно использовать очередь проигрывателя для планирования воспроизведения набора элементов проигрывателя в последовательности.
Чтение, при записи и перекодировании активов
Основа AV позволяет Вам создавать новые представления актива несколькими способами. Можно просто повторно закодировать существующий актив, или — в iOS 4.1 и позже — можно выполнить операции на содержании актива и сохранить результат как новый актив.
Вы используете сеанс экспорта, чтобы повторно закодировать существующий актив в формат, определенный одним из небольшого количества обычно используемых предварительных установок. Если Вам нужно больше управления трансформацией в iOS 4.1, и позже можно использовать читателя актива и объект писателя актива в тандеме для преобразования актива от одного представления до другого. Используя эти объекты можно, например, выбрать, какая из дорожек Вы хотите быть представленными в выходном файле, укажите свой собственный выходной формат или измените актив во время процесса преобразования.
Для создания визуального представления формы волны Вы используете читателя актива для чтения аудиотрека актива.
Миниатюры
Для создания изображений миниатюр видеопрезентаций Вы инициализируете экземпляр AVAssetImageGenerator
использование актива, от которого Вы хотите генерировать миниатюры. AVAssetImageGenerator
использует включенные видеотреки значения по умолчанию для генерации изображений.
Редактирование
Основа AV использует составы для создания новых активов из существующих частей носителей (обычно, один или несколько видеотреков и аудиотреки). Вы используете непостоянный состав, чтобы добавить и удалить дорожки и скорректировать их временные упорядочивания. Можно также регулировать относительную громкость и сползание аудиотреков; и набор непрозрачность и скаты непрозрачности, видеотреков. Состав является совокупностью частей носителей, сохраненных в памяти. При экспорте состава с помощью сеанса экспорта это разрушилось к файлу.
Можно также создать актив из носителей, таких как демонстрационные буферы или неподвижные изображения с помощью писателя актива.
Все еще и видео получение носителей
Записью ввода от камер и микрофонов управляет сеанс получения. Сеанс получения координирует поток данных от устройств ввода данных до выводов, таких как файл ролика. Можно сконфигурировать многократные вводы и выводы для единственного сеанса, даже когда работает сеанс. Вы отправляете сообщения в сеанс, чтобы запустить и остановить поток данных.
Кроме того, можно использовать экземпляр уровня предварительного просмотра, чтобы показать пользователю, что записывает камера.
Параллельное программирование с основой AV
Обратные вызовы от Основы AV — вызовы блоков, наблюдателей значения ключа и обработчиков уведомления — как обычно не гарантируют, не будут сделаны ни на каком определенном потоке или очереди. Вместо этого Основа AV вызывает эти обработчики на потоки или очереди, на которых она выполняет свои внутренние задачи.
Существует два общих руководящих принципов до уведомлений и поточной обработки:
UI имел отношение, уведомления происходят на основном потоке.
Классы или методы, требующие Вас, создают и/или указывают, что очередь возвратит уведомления на той очереди.
Вне тех двух инструкций (и существуют исключения, отмеченные в справочной документации), Вы не должны предполагать, что уведомление будет возвращено на любом определенном потоке.
Если Вы пишете многопоточное приложение, можно использовать NSThread
метод isMainThread
или [[NSThread currentThread] isEqual:<#A stored thread reference#>]
протестировать, является ли поток вызова потоком, над которым Вы ожидаете выполнять свою работу. Можно перенаправить сообщения к надлежащим методам использования потоков такой как performSelectorOnMainThread:withObject:waitUntilDone:
и performSelector:onThread:withObject:waitUntilDone:modes:
. Вы могли также использовать dispatch_async
для «возвращений» к блокам на соответствующей очереди или основная очередь для задач UI или очередь, Вы имеете для параллельных операций. Для больше о параллельных операциях, см. Руководство по программированию Параллелизма; для больше о блоках, посмотрите, что Блоки Программируют Темы. AVCam для примера кода iOS считают основным примером для всей функциональности Основы AV и можно консультироваться для примеров потока и использования очереди с Основой AV.
Предпосылки
Основа AV является усовершенствованной платформой Какао. Для использования его эффективно Вы должны иметь:
Существенное понимание фундаментальных средств разработки Какао и методов
Основное схватывание блоков
Основное понимание кодирования значения ключа и наблюдения значения ключа
Для воспроизведения, основного понимания Базовой Анимации (см. Базовое Руководство по программированию Анимации или, для основного воспроизведения, Ссылки Платформы AVKit.
См. также
Существует несколько примеров Основы AV включая два, которые являются ключевыми для понимания и функциональности Захвата изображения камерой реализации:
AVCam для iOS является каноническим примером кода для реализации любой программы, использующей функциональность камеры. Это - полная выборка, хорошо задокументированная, и покрывает большинство функциональности, показывающей методы наиболее успешной практики.
AVCamManual: Используя Ручное Получение API является сопутствующим приложением к AVCam. Это реализует функциональность Камеры с помощью ручного управления камерой. Это - также полный пример, хорошо задокументированный, и должно считаться каноническим примером для того, чтобы создать приложения камеры, использующие в своих интересах ручные управления.
RosyWriter является примером, демонстрирующим оперативную обработку кадра и в частности как применить фильтры к видеоконтенту. Это - очень общее требование разработчика, и этот пример покрывает ту функциональность.
AVLocationPlayer: Используя Метаданные AVFoundation, Читая APIs демонстрирует использование метаданных APIs.