Переход кода QTKit к основе AV
Платформа Основы AV предоставляет мощные услуги для получения, игры, проверки, редактирования и перекодирования основанных на времени аудиовизуальных носителей. Это - рекомендуемая платформа для всей разработки, включающей основанные на времени аудиовизуальные носители.
Необходимо считать этот документ, если бы у Вас есть существующий QTKit, базировал приложение и хотел бы перейти Ваш код к Основе AV.
Введение
Представленный в OS X 10.7, Основа AV является платформой, которую можно использовать, чтобы играть и создать основанные на времени аудиовизуальные носители. Платформа включает много классов Objective C с базовым классом, являющимся
Фильм или аудио получение
Фильм или воспроизведение аудио, включая точную синхронизацию и аудио панорамирование
Редактирование носителей и управление дорожкой
Актив носителей и управление метаданными
Проверка аудиофайла (например, формат данных, частота дискретизации и число каналов)
Для получения дополнительной информации о различных классах платформы Основы AV, см. Руководство по программированию Основы AV.
Основа AV является рекомендуемой платформой для всей новой разработки, включающей основанные на времени аудиовизуальные носители на iOS и OS X. Основа AV также рекомендуется для переходящих существующих приложений на основе QTKit. Представленный в OS X 10.4, QTKit обеспечивает ряд классов Objective C и методов, разработанных для обработки основных задач воспроизведения, редактирования, экспорта, аудио/видеосъемки и записи, в дополнение ко многим другим мультимедийным возможностям.
Этот документ описывает отображение классов QTKit и методов к более новым Фундаментальным классам AV, чтобы помочь Вам начать работать с объектами Основы AV и их связанными методами для выполнения множества задач.
Начало работы
Для понимания, что требуется, чтобы модернизировать целое приложение, создавать приложение с XCode и последним SDK, как описано в Идентификации Осуждаемого APIs с XCode.
Чтобы заставить беглый взгляд на Ваш существующий двоичный файл видеть, что QuickTime API's Вы используете, используйте процесс, описанный в Проверке Вашего существующего двоичного файла с nm.
Идентификация осуждаемого APIs с XCode
Создайте свое приложение с XCode для идентификации всего APIs то обновление потребности. Удостоверьтесь и всегда создавайте свое приложение с помощью последней версии XCode и Mac OS X SDK. Поскольку платформы развиваются посредством различных выпусков, APIs представлен или осужден, и способы поведения существующего APIs могут иногда изменяться. Всегда используя последние инструменты, можно усовершенствовать приложение с текущими версиями всех платформ.
Если Ваше приложение использует более старые платформы, такие как Углерод, это может потребовать, чтобы существенные изменения модернизировали его. Иначе, если Вы уже используете современные платформы, Вы, вероятно, должны только обновить те части, использующие теперь осуждаемый QuickTime APIs.
Проверка существующего двоичного файла с nm
Можно определить, который QuickTime APIs приложение использует путем выполнения nm
инструмент командной строки против Вашего двоичного файла приложения.
nm
выводит на экран список имени (таблица символов) каждого объектного файла в списке аргументов. Используйте egrep
утилита для фильтрации вывода от nm
инструмент и получает список только QuickTime APIs.
Вот вывод в качестве примера от nm
инструмент, отфильтрованный с помощью egrep
легко идентифицировать QuickTime APIs:
Вывод Listing 1 Example от nm
инструмент командной строки.
$ nm -m "MyQuickTimeApp.app/Contents/MacOS/MyQuickTimeApp" | egrep "QuickTime|QTKit" |
MyQuickTimeApp.app/Contents/MacOS/MyQuickTimeApp (for architecture ppc): |
00002e2c (__TEXT,__text) non-external -[MyDocument makeMyMovie] |
(undefined [lazy bound]) external .objc_class_name_QTMovie (from QTKit) |
(undefined [lazy bound]) external _CloseMovieStorage (from QuickTime) |
(undefined [lazy bound]) external _CreateMovieStorage (from QuickTime) |
(undefined [lazy bound]) external _GetMoviesError (from QuickTime) |
(undefined) external _QTAddImageCodecQuality (from QTKit) |
(undefined) external _QTAddImageCodecType (from QTKit) |
(undefined [lazy bound]) external _QTMakeTime (from QTKit) |
(undefined) external _QTMovieEditableAttribute (from QTKit) |
(undefined) external _QTMovieFlatten (from QTKit) |
(undefined) external _QTMovieNaturalSizeAttribute (from QTKit) |
(undefined [lazy bound]) external _QTNewDataReferenceFromFullPathCFString (from QuickTime) |
MyQuickTimeApp.app/Contents/MacOS/MyQuickTimeApp (for architecture i386): |
00003025 (__TEXT,__text) non-external -[MyDocument makeMyMovie] |
(undefined [lazy bound]) external .objc_class_name_QTMovie (from QTKit) |
(undefined [lazy bound]) external _CloseMovieStorage (from QuickTime) |
(undefined [lazy bound]) external _CreateMovieStorage (from QuickTime) |
(undefined [lazy bound]) external _GetMoviesError (from QuickTime) |
(undefined) external _QTAddImageCodecQuality (from QTKit) |
(undefined) external _QTAddImageCodecType (from QTKit) |
(undefined [lazy bound]) external _QTMakeTime (from QTKit) |
(undefined) external _QTMovieEditableAttribute (from QTKit) |
(undefined) external _QTMovieFlatten (from QTKit) |
(undefined) external _QTMovieNaturalSizeAttribute (from QTKit) |
(undefined [lazy bound]) external _QTNewDataReferenceFromFullPathCFString (from QuickTime) |
Больше информации об этих инструментах может быть найдено в их соответствующих страницах справочника (например, ввести man nm
от Терминального приложения).
Работа с аудиовизуальными медиаресурсами
Представление аудиовизуальных медиаресурсов
В QTKit QTMovie
объект связан с экземплярами QTTrack
объект представляет упорядочивание и другие характеристики данных носителей в a QTMovie
объект, такой как единственный видеотрек или аудиотрек. В свою очередь, a QTTrack
объект связан с единственным QTMedia
объект представляет данные, связанные с a QTTrack
объект.
Основа AV
Основной класс, что использование платформы Основы AV для представления носителей является AVAsset
экземпляр является набором одной или более частей данных носителей (аудиотреки и видеотреки), которые предназначаются, чтобы быть представленными или обработанными вместе, каждый универсальный тип среды, включая (но не ограничиваясь этим) аудио, видео, текст, субтитры и подзаголовки. Объект актива предоставляет информацию о целом ресурсе, таком как его продолжительность или заголовок, а также подсказывает для представления, такого как его естественный размер.
Дорожка представлена экземпляром
Дорожка имеет много свойств, таких как ее тип, визуальные и/или слышимые характеристики, метаданные и временная шкала. Дорожка также имеет массив описаний формата
Дорожка может самостоятельно быть разделена на сегменты, представленные экземплярами
К данным носителей, связанным с сегментом дорожки, можно только получить доступ с помощью
Вот сводка классов для представления аудиовизуальных носителей с QTKit и Основой AV:
Посмотрите Пример кода 'AVSimplePlayer' для примера работы с аудиовизуальными ресурсами в Основе AV.
Создание мультимедийных объектов
A QTMovie
объект может быть инициализирован от файла, от ресурса, указанного URL, от блока памяти, от области монтажа, или из существующего фильма в формате QuickTime. QTMovie
класс обеспечивает много методов для инициализации и создания объектов видеоклипа такой как initWithFile:error
, movieWithURL:error
и другие. Посмотрите рисунок 2.
Основа AV
Можно инстанцировать актива с помощью AVAsset
) с URLs, относящимся к любым аудиовизуальным медиаресурсам, таким как потоки (включая Прямые трансляции HTTP), файлы фильма в формате QuickTime, файлы MP3 и файлы других типов. Можно также инстанцировать актива с помощью других подклассов, расширяющих аудиовизуальную модель носителей, такую как composition
метод. Тогда можно вставить все дорожки в данном диапазоне времени указанного актива в состав с помощью insertTimeRange:ofAsset:atTime:error:
метод. Посмотрите рисунок 2.
Посмотрите Пример кода 'AVSimplePlayer' для примера создания мультимедийных объектов в Основе AV.
Воспроизведение
Существует три класса QTKit, использующиеся для воспроизведения фильмов в формате QuickTime:
QTMovie
- Обычно используемый в сочетании с a QTMovieView
объект для воспроизведения. QTMovie
обеспечивает различные методы для управления воспроизведением фильма такой как play
, stop
, и другие. Посмотрите рисунок 3.
NSView
) - Используемый, чтобы вывести на экран и управлять a QTMovie
объект в окне, предоставляющем выводимый на экран фильм. Когда a QTMovie
связан с a QTMovieView
, встроенный пользовательский интерфейс контроллера фильма может также быть выведен на экран, позволив контроль за работой пользователей воспроизведения фильма через интерфейс. Посмотрите рисунок 4.
CALayer
) - Обеспечивает уровень в который кадры a QTMovie
объект может быть нарисован. Предназначенный для оказания поддержки для Базовой Анимации. Посмотрите рисунок 5.
Основа AV
В Основе AV объект контроллера проигрывателя
Вы используете экземпляр AVPlayer
играть единственный актив. Вы используете AVQueuePlayer
подкласс AVPlayer
).
Для игры актива Вы не обеспечиваете активы непосредственно для AVPlayer
объект. Вместо этого Вы обеспечиваете экземпляр
Можно инициализировать элемент проигрывателя с существующим активом, или можно инициализировать элемент проигрывателя непосредственно от URL. Как с AVAsset
, просто инициализация элемента проигрывателя не обязательно означает, что это готово к непосредственному воспроизведению. Можно наблюдать (использующий наблюдение значения ключа) свойство состояния элемента определять, если и когда это готово играть.
Вывести на экран AVPlayer
объект в окне использует AVPlayerView
класс в AVKit
платформа. AVPlayerView
подкласс NSView
это может использоваться для отображения визуального содержания AVPlayer
возразите и стандартное управление воспроизведением. Стиль управления воспроизведением настраиваем (встроенный, плавающий, минимальный, скрытый). Там редактируют средства управления, чтобы позволить Вам обрезать носители и удалять те части, которые Вы не хотите сохранять. Также включенный кнопка для совместного использования носителей по электронной почте, текстового сообщения, YouTube и других. AVPlayer
объект связался с AVPlayerView
может использоваться для управления воспроизведением носителей, например запускаясь и останавливая воспроизведение, и ища на определенную главу.
Можно также направить вывод a AVPlayer
к специализированному Базовому Слою анимации - экземпляр AVPlayerLayer
или
Посмотрите Пример кода 'AVSimplePlayer' для примера воспроизведения носителей в Основе AV.
Экспорт носителей
В QTKit можно использовать QTMovie
writeToFile:withAttributes:
метод для экспорта существующего фильма в новый фильм указанного типа и настроек. Различные настройки для работы экспорта фильма указаны в словаре атрибутов.
Можно также использовать a QTExportSession
возразите для транскодирования данного QTMovie
источник (или набор QTTrack
объекты) согласно настройкам в a QTExportOptions
объект. Клиенты QTExportSession
может реализовать QTExportSessionDelegate
интерфейс для получения прогресса и информации о завершении от экземпляра QTExportSession
.
Основа AV
Основа AV позволяет Вам создавать новые представления актива несколькими различными способами. Можно просто повторно закодировать существующий актив, или можно выполнить операции на содержании актива и сохранить результат как новый актив.
Вы используете сеанс экспорта
При необходимости в большем количестве управления трансформацией можно использовать читателя актива AVAssetWriter
, посмотрите Носители Записи), объект в комбинации для преобразования актива от одного представления до другого. Используя эти объекты можно, например, выбрать, какая из дорожек Вы хотите быть представленными в выходном файле, укажите свой собственный выходной формат или измените актив во время процесса преобразования.
Вы используете AVAssetReader
объект получить данные носителей актива, основан ли актив на файле или представляет совокупность данных носителей из многократных источников (как с AVAssetReader
позволяет Вам считать сырые данные недекодируемые выборки носителей непосредственно от хранения.
Вы инициализируете AVAssetReader
с initWithAsset:error:
и assetReaderWithAsset:error:
методы. Тогда вызовите startReading:
подготавливать получатель к получению выборки буферизует от актива. Вы считываете данные носителей актива путем добавления один или несколько конкретные экземпляры AVAssetReader
объектное использование addOutput:
, тогда вызовите copyNextSampleBuffer:
синхронно скопировать следующий демонстрационный буфер для вывода.
Посмотрите Пример кода 'avexporter' для примера экспорта носителей в Основе AV.
Запись носителей
Создать пустое QTMovie
то, что можно тогда добавить носители к, Вы используете initToWritableDataReference:error:
метод. Этот метод создает новый контейнер хранения в расположении, указанном по условию ссылка, и возвращает a QTMovie
объект, имеющий тот контейнер как его ссылку на данные по умолчанию. Тогда вызовите addImage:forDuration:withAttributes:
метод к изображениям к QTMovie
, использование атрибутов указано в словаре атрибутов. Посмотрите рисунок 7.
Основа AV
Вы используете писателя актива AVAssetWriter
использование assetWriterWithURL:fileType:error:
и initWithURL:fileType:error:
методы.
Можно получить данные носителей для актива от экземпляра AVAssetReader
, или даже извне Основы AV API установлен. Данные носителей представлены AVAssetWriter
для записи в форме CMFormatDescription
. Вы используете AVAssetWriterInput
добавлять выборки носителей, упакованные как CMSampleBuffer
объекты или наборы метаданных, к одноколейному пути выходного файла AVAssetWriter
объект с помощью appendSampleBuffer:
метод.
С AVAssetWriterInput
можно также установить различные свойства для выходного файла. Например, outputSettings
свойство указывает настройки кодировки для носителей, добавленных к выводу. naturalSize
свойство позволяет клиенту устанавливать размерности дорожки. metadata
свойство является набором метаданных уровня дорожки, которые связывают с активом и переносят в выходном файле. transform
свойство указывает предпочтительную трансформацию визуальных данных носителей в выходном файле в целях дисплея.
AVAssetWriterInput
вводы добавляются к Вашему AVAssetWriter
использование addInput:
метод. Вы добавляете последовательности демонстрационных данных к вводам писателя актива в пишущем выборку сеансе. Необходимо вызвать startSessionAtSourceTime:
начать один из этих сеансов.
Используя AVAssetWriter
, можно дополнительно повторно закодировать выборки носителей, поскольку они записаны. Можно также дополнительно записать наборы метаданных в выходной файл или указать различные другие свойства, такие как масштаб времени фильма и время для протекания между записью фрагментов фильма.
Посмотрите Пример кода 'AVReaderWriter для OSX' для примера записи носителей в Основе AV.
Редактирование
Для редактирования фильмов с QTKit, Вы воздействуете на выборы фильма, а также фильм, и отслеживает сегменты. QTMovie
множество предложений различных методов для редактирования фильмов. Посмотрите рисунок 8.
Когда a QTMovie
связан с a QTMovieView
, QTMovieView
также операции редактирования поддержек на фильме. Они воздействуют на текущий выбор фильма. Посмотрите рисунок 8.
Основа AV
С Основой AV Вы используете составы addMutableTrackWithMediaType:preferredTrackID:
метод добавляет пустую дорожку указанного типа среды к a AVMutableComposition
.
Можно также регулировать относительную громкость и сползание аудиотреков; и набор непрозрачность и скаты непрозрачности, видеотреков. Все основанные на файле аудиовизуальные активы приемлемы быть объединенными, независимо от контейнерного типа.
На его верхнем уровне, AVComposition
набор дорожек, каждое представление носители определенного типа среды (например, аудио или видео), согласно временной шкале. Каждая дорожка представлена экземпляром
Можно получить доступ к сегментам дорожки дорожки с помощью свойства сегментов (массив AVCompositionTrackSegment
объекты) AVCompositionTrack
. Набор дорожек с информацией о типе среды для каждого и каждого с ее массивом сегментов дорожки (URL, идентификатор дорожки, и время, отображаясь), формируют полное низкоуровневое представление состава. Это представление может быть выписано в любой удобной форме, и впоследствии состав может быть перераспределен путем инстанцирования нового AVMutableComposition
с
Посмотрите Пример кода 'AVSimpleEditorOSX' для примера редактирования носителей в Основе AV.
Получение выборок носителей во время воспроизведения
Ядро QuickTime 7 Видео конвейер цифрового видео позволяет Вам получать доступ к отдельным кадрам носителей во время воспроизведения. Чтобы сделать это, Вы указываете визуальный контекст (QTVisualContextRef
) при подготовке фильма в формате QuickTime к воспроизведению. С QTKit Вы устанавливаете визуальный контекст для a QTMovie
использование setVisualContext:
метод. Визуальный контекст указывает место назначения получения, в котором Вы хотите представить свое видео. Например, это может быть пиксельным буфером или текстурировать визуальный контекст. После указания контекста получения Вы свободны управлять кадрами, как Вы желаете.
Для синхронизации видео с частотой обновления дисплея Базовое Видео обеспечивает, таймер вызвал ссылку дисплея CVDisplayLinkOutputCallback
функция, вызванная каждый раз, когда ссылка дисплея хочет, чтобы приложение вывело кадр.
Когда кадры сгенерированы для дисплея, Базовое Видео обеспечивает различные буферные типы для хранения данных изображения. Базовое Видео определяет абстрактный буфер типа CVBuffer
ввести. Можно использовать CVBuffer
APIs на любом Базовом Видео буфере.
Основа AV
Основа AV представляет AVPlayerItemOutput
класс у Пумы OS X. AVPlayerItemOutput
абстрактный класс, инкапсулирующий общий API для всех AVPlayerItemOutput
подклассы. Экземпляры AVPlayerItemOutput
может получить отдельные выборки от AVAsset
во время воспроизведения AVPlayer
. Вы управляете ассоциацией AVPlayerItemOutput
экземпляр с AVPlayerItem
как исходный ввод с помощью AVPlayerItem
addOutput:
и removeOutput:
методы:
Когда AVPlayerItemOutput
связан с AVPlayerItem
, выборки предоставлены для типа среды в соответствии с правилами для смешивания, составом или исключением что AVPlayer
почести среди многократных включенных дорожек того типа среды в его собственных целях рендеринга. Например, видео носители будут составлены согласно инструкциям, предоставленным через AVPlayerItem.videoComposition
, если настоящее.
AVPlayerItemVideoOutput
конкретный подкласс AVPlayerItemOutput
это продает видеоизображения, поскольку Базовый Видео пиксель буферизует (CVPixelBufferRef
). Используйте a AVPlayerItemVideoOutput
в сочетании с Базовой ссылкой Видеодисплея (CVDisplayLinkRef
) или Базовая Анимация выводит на экран ссылку (CADisplayLink
) точно синхронизироваться с экранными обновлениями устройства.
Получение неподвижных изображений от видео
Для получения изображения для кадра фильма в определенное время используйте QTMovie
frameImageAtTime:
или frameImageAtTime:withAttributes:error:
метод, принимающий словарь атрибутов.
Точно так же posterImage: метод возвращает QTMovie
, и currentFrameImage:
метод возвращается NSImage
для кадра в текущее время в a QTMovie
. Посмотрите рисунок 10.
Основа AV
Для создания изображений миниатюр видео независимо от воспроизведения с помощью Основы AV Вы инициализируете экземпляр AVAssetImageGenerator
использует включенный видеотрек (и) значения по умолчанию для генерации изображений.
Можно сконфигурировать несколько аспектов генератора изображения, например, можно указать максимальные размерности для изображений, которые он генерирует и апертурное использование режима maximumSize
и apertureMode
соответственно. Можно тогда генерировать единственное изображение в установленный срок или серию изображений.
Вы используете copyCGImageAtTime:actualTime:error:
генерировать единственное изображение в определенное время. Основа AV может не быть в состоянии произвести изображение в точно время, которое Вы запрашиваете, таким образом, можно передать как второй параметр указатель на a CMTime
это по возврату содержит время, в которое было фактически сгенерировано изображение.
Для генерации серии изображений Вы отправляете генератор изображения a generateCGImagesAsynchronouslyForTimes:completionHandler:
сообщение.
Посмотрите Пример кода 'AVReaderWriter для OSX' для примера получения неподвижных изображений от видео в Основе AV.
Метаданные носителей
Метаданные являются информацией о файле, дорожке или носителях, таких как художник и заголовок дорожки MP3. В QTKit метаданные инкапсулируются в непрозрачном контейнере и получили доступ к использованию a QTMetaDataRef
. A QTMetaDataRef
представляет репозиторий метаданных, состоящий из одного или более собственных контейнеров метаданных. QTMovie
и QTTrack
APIs поддерживает объединенный доступ к этим контейнерам.
Контейнер
Each состоит из некоторого числа элементов метаданных. Элементы метаданных соответствуют индивидуально маркированным значениям с характеристиками, такими как ключи, типы данных, информация о локали, и т.д. Вы адресуете каждый контейнер его форматом хранения (kQTMetaDataStorageFormat
). Существует поддержка классических пользовательских элементов данных QuickTime, метаданных iTunes и формата контейнера метаданных QuickTime. A QTMetaDataRef
может иметь один или все они. QTMetaDataRefs может быть связан с фильмом, дорожкой или носителями.
QTMovie
класс обеспечивает много различных методов для доступа к элементам метаданных для данного файла ролика, дорожки или носителей. Посмотрите рисунок 11.
Основа AV
В Основе AV Активы могут также иметь метаданные, представленные экземплярами AVMetadataItem
объект представляет элемент метаданных, связанных с аудиовизуальным активом или с одной из его дорожек. Для создания элементов метаданных для собственных активов Вы используете непостоянный подкласс,
Элементы метаданных имеют ключи, согласующиеся со спецификацией формата контейнера, из которого они привлечены. Полное изложение форматов метаданных, ключей метаданных и ключевых пространств метаданных, поддерживаемых Основой AV, доступно среди определения в AVMetadataFormat.h
интерфейсный файл.
Можно загрузить значения элемента метаданных «лениво» с помощью методов от AVAsynchronousKeyValueLoading
протокол. AVAsset
и другие классы поочередно обеспечивают свои метаданные лениво так, чтобы можно было получить объекты из тех массивов, не подвергаясь наверху для элементов, которые Вы в конечном счете не проверяете.
Можно отфильтровать массивы элементов метаданных локалью или использованием ключевого и ключевого пространства metadataItemsFromArray:withLocale:
и -metadataItemsFromArray:withKey:keySpace:
соответственно.
Посмотрите Пример кода 'avmetadataeditor' для примера работы с метаданными носителей в Основе AV.
Получение носителей и доступ к камере
Классы в QTKit получают дескриптор API широкий диапазон задач обработки изображений профессионального уровня в получении и записи аудио/видео мультимедийного контента. При работе с получением QTKit Вы обычно используете три существенных типа объектов: получите вводы, выводы получения и сеанс получения.
Классы, формирующие архитектуру получения API QTKit, могут быть сгруппированы следующим образом:
• Ядро
• Ввод/вывод
• Утилита
• Пользовательский интерфейс
• Доступ к устройствам
Эти классы и их отображения к различной Основе AV получают APIs, описаны более подробно в разделах ниже.
Основа AV
Основа AV также обеспечивает полный комплект получения APIs, предоставляющий Вам полный доступ к камере и предусматривающий гибкий вывод. Классы, составляющие Основу AV, получают APIs, близко напоминают тех в QTKit.
Как с QTKit, записывая ввод от камер и микрофонов в Основе AV управляется сеансом получения. Сеанс получения координирует поток данных от устройств ввода данных до выводов, таких как файл ролика. Можно сконфигурировать многократные вводы и выводы для единственного сеанса, даже когда работает сеанс. Вы отправляете сообщения в сеанс, чтобы запустить и остановить поток данных. Кроме того, можно использовать экземпляр уровня предварительного просмотра, чтобы показать пользователю, что записывает камера.
Базовые классы
Существует четыре класса в Получении QTKit, включающие базовые классы, как показано на рисунке 12.
QTCaptureInput
класс обеспечивает входные исходные соединения для a QTCaptureSession
. QTCaptureOutput
абстрактный класс, обеспечивающий интерфейс для соединения выходных мест назначения получения, таких как файлы QuickTime и предварительные просмотры видео, к a QTCaptureSession
.
QTCaptureInput
к a QTCaptureSession
и от a QTCaptureSession
к a QTCaptureOutput
.
Основа AV
Четыре базовых класса получения в Основе AV показаны на рисунке 12. Как в QTKit, для управления получением от устройства, такого как камера или микрофон Вы собираете объекты представлять вводы и выводы и использовать экземпляр
Соединение между вводом получения и выводом получения в сеансе получения представлено AVCaptureInput
) имейте один или несколько входных портов (экземпляры AVCaptureInputPort). Выводы получения (экземпляры AVCaptureOutput
) может принять данные из одного или более источников (например, объект AVCaptureMovieFileOutput принимает и видеоданные и аудиоданные).
Классы ввода/вывода
Вы используете методы в QTCaptureSession
объекты, которые могут использоваться, чтобы записать полученные носители в фильмы в формате QuickTime или предварительно просмотреть получающееся видео или аудио.
Основа AV
Существует пять выходных классов Основы AV и один входной класс, принадлежащий этой группе. Посмотрите рисунок 13. AVCaptureInput
абстрактный базовый класс, описывающий входной источник данных (камеры и микрофоны) к AVCaptureSession
объект. Выходные классы обеспечивают интерфейс для соединения сеанса получения (экземпляр AVCaptureSession
) получать выходные места назначения, включающие файлы, предварительные просмотры видео, неподвижные изображения, а также несжатые и сжатые видеокадры и буферы аудиосэмпла от получаемого видео.
Класс доступа к устройствам
QTCaptureDevice
соответствует устройству захвата изображения, подключающемуся или ранее подключенному к компьютеру пользователя во время времени жизни приложения. Экземпляры QTCaptureDevice
не может быть создан непосредственно. Единственный уникальный экземпляр создается автоматически каждый раз, когда устройство подключено к компьютеру.
Основа AV
AVCaptureSession
объект.
Когда устройства приходят и уходят, можно перечислить доступные устройства, запросить их возможности и быть сообщены. При нахождении подходящего устройства захвата изображения Вы создаете AVCaptureDeviceInput
объект для устройства, и добавляет, что вводит к сеансу получения.
Можно также установить свойства на устройстве захвата изображения (его режим фокуса, режим воздействия, и т.д.).
Показ пользователя, что зарегистрировано
Можно использовать методы, доступные в NSView
), к видео предварительного просмотра, обрабатывающемуся экземпляром QTCaptureSession
. Класс создает и поддерживает свой собственный
Поддержка Базовой Анимации предоставлена CALayer
(см. базовое руководство по программированию анимации). QTCaptureLayer
видеокадры дисплеев, в настоящее время будучи полученным в иерархию слоев. Посмотрите рисунок 15.
Основа AV
Можно предоставить пользователю предварительный просмотр того, что зарегистрировано камерой с помощью AVCaptureVideoPreviewLayer
подкласс CALayer
. Нет никаких выводов для показа предварительного просмотра. В целом уровень предварительного просмотра ведет себя как любой другой CALayer
объект в дереве рендеринга (см. Базовое Руководство по программированию Анимации). Можно масштабировать изображение и выполнить трансформации, вращения и т.д. так же, как Вы были бы любой уровень.
Посмотрите Пример кода 'AVRecorder', Пример кода 'StopNGo для Mac' и Примера кода 'avvideowall' для примера получения носителей в Основе AV.
Представления времени
QTKit обеспечивает
Существует много функций, которые Вы используете в работе со временем, такой как QTMakeTime
, QTMakeTimeRange
, QTTimeIncrement
, QTMakeTimeScaled
и другие.
Вы используете эти функции для создания a QTTime
структура, получите и установите времена, выдержите сравнение QTTime
структуры, добавляют и вычитают времена и получают описание. Кроме того, другие функции также доступны для создания a QTTimeRange
структура, запрашивая диапазоны времени, создавая объединения и пересечения диапазонов времени, и получая описание.
Основа AV
Время в Основе AV представлено примитивными структурами от Базовой платформы Носителей. CMTime
структура C, представляющая время как рациональное число с числителем ( int64_t
значение), и знаменатель ( int32_t
масштаб времени). Концептуально, масштаб времени указывает часть секунды, которую занимает каждый модуль в числителе. Таким образом, если масштаб времени равняется 4, каждый модуль представляет четверть секунды; если масштаб времени равняется 10, каждый модуль представляет одну десятую секунды и т.д.
В дополнение к простой временной стоимости, a CMTime
может представлять нечисловые значения: +infinity, - бесконечность, и неопределенный. Это может также указать, округлилось ли время в некоторый момент, и это поддерживает число эпохи.
Основа AV обеспечивает много функций для работы с CMTime
структуры. Например, Вы создаете время с помощью CMTimeMake
, или одна из связанных функций такой как CMTimeMakeWithSeconds
(который позволяет Вам создавать время с помощью значения плавающего и указывать предпочтительный масштаб времени). Существует несколько функций для основанной на времени арифметики и сравнить времена. Для списка всех доступных функций посмотрите
Если необходимо использовать CMTimes в аннотациях или Базовых контейнерах Основы, можно преобразовать a CMTime
к и от a CFDictionary
(см. CMTimeCopyAsDictionary
и CMTimeMakeFromDictionary
соответственно. Можно также получить строковое представление a CMTime
использование CMTimeCopyDescription
.
CMTimeRange
структура C, имеющая время начала и продолжительность, оба выраженные как CMTimes. Диапазон времени не включает время, которое является временем начала плюс продолжительность.
Вы создаете использование диапазона времени CMTimeRangeMake
или CMTimeRangeFromTimeToTime
.
Базовые Носители обеспечивают функции, которые можно использовать, чтобы определить, содержит ли диапазон времени данное время или другой диапазон времени, или располагаются ли в два раза, равны, и вычислить объединения и пересечения диапазонов времени, такой как CMTimeRangeContainsTime
, CMTimeRangeEqual
, CMTimeRangeContainsTimeRange
, и CMTimeRangeGetUnion
.
Для списка всех доступных функций посмотрите
Если необходимо использовать CMTimeRange
в аннотациях или Базовых контейнерах Основы, можно преобразовать a CMTimeRange
к и от a CFDictionary
использование CMTimeRangeCopyAsDictionary
и CMTimeRangeMakeFromDictionary
соответственно. Можно также получить строковое представление a CMTime
использование CMTimeRangeCopyDescription
.
Посмотрите Пример кода 'AVSimpleEditorOSX', Пример кода 'avexporter', Пример кода 'AVScreenShack' и Пример кода 'AVReaderWriter для OSX' для примера работы со временем в Основе AV.
Ссылки
Документы
Пример кода
Пример кода 'AVSimpleEditorOSX'
Технические примечания
AVFoundation - Временной код поддержка с AVAssetWriter и AVAssetReader
История версии документа
Дата | Примечания |
---|---|
28.05.2013 | Добавленная информация о классе AVPlayerView в новой платформе AVKit для OS X 10.9. Также добавленные разделы об идентификации осуждаемого APIs с XCode и проверки Вашего существующего двоичного файла с nm. |
18.09.2012 | Новый документ, обсуждающий, как перейти Ваш код QTKit к Основе AV. |