Программное обеспечение для ускорения видео на iPhone

Обновлено: 20.11.2024

Процесс декодирования видео в OS X и iOS сложен.

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

Краткая история аппаратного ускоренного декодирования на Mac

Нагрузка на процессор высока, а кодеки сложны. Когда декодирование видео с помощью программного обеспечения на компьютерах стало популярным, это было революционно. С появлением QuickTime 1.0 и его API на основе C в начале 90-х вы могли воспроизводить видео размером с миниатюру с до 32 768 возможных цветов на пиксель, декодируемых исключительно процессором. До этого момента цветное видео могли воспроизводить только специализированные компьютеры с определенным графическим оборудованием.

К концу века DVD были представлены с использованием самого современного на тот момент видеокодека MPEG-2. Впоследствии Apple добавила приводы DVD к своим PowerBook и столкнулась с проблемой: комбинация процессоров G3 PowerPC и аккумуляторов была недостаточно эффективной для воспроизведения полного DVD без подзарядки. Решение состояло в том, чтобы добавить на материнскую плату специальный чип декодирования от C-Cube для выполнения всей тяжелой работы. Этот чип можно найти в поколениях Wallstreet, Lombard и Pismo PowerBook, а также в их профессиональных аналогах для настольных ПК.

Apple никогда не раскрывала общедоступный API, поэтому воспроизведение DVD было ограничено ее собственным приложением до появления Mac OS X в 2001 году, в которой изначально вообще не было приложения для воспроизведения DVD. 1

К началу 2000-х годов процессоры и аккумуляторы развивались таким образом, что они могли разумно декодировать видео MPEG-2 без помощи выделенного чипа — по крайней мере, до тех пор, пока на машине не выполнялся какой-либо дополнительный требовательный процесс ( как Mail.app, который постоянно проверял удаленный сервер).

В середине 2000-х появился новый кодек, который до сих пор остается доминирующим видеокодеком на оптических носителях, цифровом телевещании и онлайн-распространении: H.264/AVC/MPEG-4, часть 10. Видеокодек MPEG четвертого поколения. представил радикальные улучшения по сравнению с предыдущими поколениями с резко уменьшенной потребностью в пропускной способности. Однако за это пришлось заплатить: увеличилась нагрузка на ЦП и потребовалось специальное оборудование для декодирования, особенно на встроенных устройствах, таких как iPhone. Без использования предоставленных DSP время работы от батареи сокращается — обычно в 2,5 раза — даже при использовании самых эффективных программных декодеров.

С введением QTKit — Cocoa Wrapper API QuickTime — в OS X 10.5 Leopard компания Apple предоставила эффективный программный декодер. Он был сильно оптимизирован с помощью созданного вручную ассемблерного кода и дополнительно улучшен в OS X 10.6 за счет развертывания компилятора clang, как было продемонстрировано на WWDC 2008. Что Apple тогда не упомянула, так это базовую способность динамически переключаться на аппаратное ускорение декодирования в зависимости от о доступности и совместимости профилей кодеков. Эта функция основана на двух недавно представленных частных платформах: Video Toolbox и Video Decode Acceleration (VDA).

В 2008 году компания Adobe Flash Video перешла со своих устаревших видеокодеков 2 на H.264 и начала интегрировать аппаратное ускорение декодирования в свои кроссплатформенные приложения для воспроизведения. В OS X команда Adobe обнаружила, что необходимая базовая технология действительно существует и развернута Apple в приложениях на основе QTKit, но недоступна для внешнего мира. Это изменилось в OS X 10.6.3 с исправлением для SDK 10.6, которое добавило один файл заголовка для VDA.

Что внутри VDA? Это небольшая структура, обертывающая аппаратный декодер H.264, который может работать, а может и не работать. Это зависит от того, может ли он обрабатывать входной буфер предоставленных закодированных данных. Если декодер может обработать ввод, он вернет декодированные кадры. Если это невозможно, создание сеанса завершится ошибкой или никакие кадры не будут возвращены с недокументированным кодом ошибки. Доступны четыре различных состояния ошибки, ни одно из них не является особенно подробным. 3 Официальной документации, кроме заголовочного файла, нет, как и резервного программного обеспечения.

Перенесемся в настоящее: в iOS 8 и OS X 10.8 Apple опубликовала полную платформу Video Toolbox. Это зверь! Он может сжимать и распаковывать видео в режиме реального времени или быстрее. Декодирование и кодирование видео с аппаратным ускорением можно включать, отключать или применять по желанию. Однако документация не ошеломляет: есть 14 файлов заголовков, а в документации Xcode написано «Пожалуйста, проверьте файлы заголовков».

Более того, без фактического тестирования невозможно узнать поддерживаемый кодек, профиль кодека или битрейт кодирования, доступный на любом данном устройстве. Поэтому требуется много тестов и кода для конкретного устройства. Внутренне он похож на модульность оригинальной реализации QuickTime.Внешний API одинаков для разных операционных систем и платформ, а фактический набор доступных функций различается.

Исходя из тестов, проведенных в OS X 10.10, Mac обычно поддерживает H.264/AVC/MPEG-4, часть 10 (до профиля 100 и до уровня 5.1), MPEG-4, часть 2, H.263, MPEG-4, часть 10. 1 и MPEG-2 Video и Digital Video (DV) в программном обеспечении и, как правило, H.264 и MPEG-4 Part 2 в аппаратном обеспечении.

На устройствах iOS с SoC от A4 до A6 поддерживается H.264/AVC/MPEG-4, часть 10 (до профиля 100 и выше 5.1), MPEG-4, часть 2 и H.263. .

В SoC A7 добавлена ​​поддержка профиля 110 H.264, который позволяет кодировать отдельные цветовые каналы с помощью 10 бит вместо 8 бит, обеспечивая более высокий уровень детализации цвета. Эта функция обычно используется в сфере вещания и создания контента.

Хотя A8, похоже, включает базовую поддержку кодека пятого поколения HEVC/H.265, как указано в спецификациях FaceTime для оснащенных устройств, он не подвергается воздействию сторонних приложений. Ожидается, что это изменится в последующих версиях iOS 4, но может быть ограничено будущими устройствами.

Инструменты для видео

Когда вам нужен прямой доступ к Video Toolbox?

Если у вас есть контроль над кодированием и созданием контента, который будет отображаться на устройствах iOS или OS X, вы можете использовать виджеты воспроизведения по умолчанию. В зависимости от развернутого устройства и версии операционной системы проигрыватель по умолчанию будет вести себя корректно, активировать аппаратное ускорение декодирования или прозрачно использовать программное решение в случае ошибки. Это также верно для высокоуровневых фреймворков AVKit и AVFoundation. Конечно, все они поддерживаются Video Toolbox, но это не должно беспокоить обычного разработчика.

И последнее слово о развертывании Video Toolbox на устройствах iOS. Он был представлен как частный фреймворк в iOS 4 и недавно стал общедоступным в iOS 8. При создании приложений с целью развертывания менее 8.0 включение Video Toolbox не приведет к каким-либо проблемам, поскольку фактические символы остались прежними, а API практически не изменился. Однако любое создание рабочего сеанса будет прекращено с недокументированной ошибкой -12913, поскольку платформа недоступна для изолированных приложений в предыдущих выпусках ОС из соображений безопасности.

Основные принципы использования Video Toolbox

Video Toolbox — это C API, основанный на платформах CoreMedia, CoreVideo и CoreFoundation и основанный на сеансах с тремя доступными типами: сжатие, распаковка и передача пикселей. Он наследует различные типы от платформ CoreMedia и CoreVideo для управления временем и кадрами, например CMTime или CVPixelBuffer.

Для иллюстрации основных концепций Video Toolbox в следующих абзацах описывается создание сеанса декомпрессии вместе с необходимыми структурами и типами. Сеанс сжатия по сути очень похож на сеанс распаковки, хотя на практике сеанс передачи пикселей требуется редко.

Чтобы инициализировать сеанс декомпрессии, Video Toolbox должен знать о входном формате как части структуры CMVideoFormatDescriptionRef и — если вы не хотите использовать недокументированное значение по умолчанию — указанный вами выходной формат в виде простой ссылки на CFDictionary. Описание формата видео можно получить из экземпляра AVAssetTrack или создать вручную с помощью CMVideoFormatDescriptionCreate, если вы используете пользовательский демультиплексор. Наконец, декодированные данные предоставляются через механизм асинхронного обратного вызова. Ссылка обратного вызова и описание формата видео требуются для VTDecompressionSessionCreate , а установка выходного формата не является обязательной.

Что такое описание формата видео?

Это непрозрачная структура, описывающая закодированное видео. Он включает в себя FourCC, указывающий используемый кодек, размеры видео и словарь, задокументированный как расширения. Что это? В OS X аппаратное ускорение декодирования является необязательным и отключено по умолчанию. Чтобы включить его, необходимо установить ключ kVTVideoDecoderSpecification_EnableHardwareAcceleratedVideoDecoder, при необходимости в сочетании с параметром kVTVideoDecoderSpecification_RequireHardwareAcceleratedVideoDecoder, установленным на сбой, если аппаратное ускорение воспроизведения недоступно. В iOS это не нужно, так как ускоренное декодирование — единственная доступная опция. Кроме того, расширения позволяют пересылать в декодер метаданные, требуемые современными видеокодеками, такими как MPEG-4 Part 2 или H.264. 5 Кроме того, он может содержать метаданные для поддержки неквадратных пикселей с помощью ключа CVPixelAspectRatio.

Формат вывода видео

Это обычный CFDictionary. Результатом сеанса декомпрессии является необработанное несжатое видеоизображение. Для оптимизации скорости желательно иметь выходной формат цветности аппаратного декодера, который выглядит как kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange .Однако доступен ряд дополнительных форматов, и преобразование выполняется довольно эффективным способом с использованием графического процессора. Его можно установить с помощью ключа kCVPixelBufferPixelFormatTypeKey. Нам также необходимо установить размеры вывода с помощью kCVPixelBufferWidthKey и kCVPixelBufferHeightKey как простые целые числа. Необязательный ключ, о котором стоит упомянуть, — это kCVPixelBufferOpenGLCompatibilityKey, который позволяет напрямую рисовать декодированное изображение в контексте OpenGL без копирования данных туда и обратно между основной шиной и графическим процессором. Иногда это называется конвейером с нулевым копированием, поскольку для рисования не создается копия декодированного изображения. 6

Запись обратного вызова данных

VTDecompressionOutputCallbackRecord — это простая структура с указателем на функцию обратного вызова, вызываемую после завершения распаковки кадра ( decompressionOutputCallback ). Кроме того, вам необходимо предоставить пример того, где найти функцию обратного вызова ( decompressionOutputRefCon ). Функция VTDecompressionOutputCallback состоит из семи параметров:

эталонное значение обратного вызова

эталонное значение фрейма

флаг состояния (с неопределенными кодами)

информационные флаги, указывающие на синхронное/асинхронное декодирование или на то, решил ли декодер отбросить кадр

фактический буфер изображения

отметка времени презентации

продолжительность презентации

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

Расшифровка кадров

После создания сеанса передача кадров в декодер не составит труда. Это вопрос многократного вызова VTDecompressionSessionDecodeFrame со ссылкой на сеанс и образец буфера для декодирования и, возможно, с расширенными флагами. Буфер сэмпла можно получить из AVAssetReaderTrackOutput или создать вручную из необработанного блока памяти вместе с информацией о времени, используя CMBlockBufferCreateWithMemoryBlock, CMSampleTimingInfo и CMSampleBufferCreate.

Заключение

Video Toolbox – это низкоуровневый высокоэффективный способ ускорить обработку видео при определенных настройках. Платформа более высокого уровня AVFoundation позволяет распаковывать поддерживаемые носители для прямого отображения и сжатия непосредственно в файл. Video Toolbox — это предпочтительный инструмент, когда требуется поддержка пользовательских форматов файлов, потоковых протоколов или прямой доступ к цепочке кодеков. С другой стороны, для освоения малодокументированного API требуется глубокое знание задействованной видеотехнологии. В любом случае, это способ добиться привлекательного взаимодействия с пользователем за счет повышения производительности, повышения эффективности и увеличения срока службы батареи.

Ссылки

DVD-плеер, каким мы его знаем, был представлен в OS X 10.1. До этого сторонние инструменты, такие как медиаплеер VLC, были единственным вариантом воспроизведения DVD в OS X. ↩

Соренсон Спарк, On2 TrueMotion VP6 ↩

kVDADecoderHardwareNotSupportedErr , kVDADecoderFormatNotSupportedErr , kVDADecoderConfigurationError , kVDADecoderDecoderFailedErr ↩

Летом 2013 года компания Apple опубликовала описание должности руководителя отдела разработки HEVC. ↩

А именно kCMFormatDescriptionExtension_SampleDescriptionExtensionAtoms ESDS или соответственно avcC. ↩

В CnX Player оптимизирована реализация аппаратных и программных видеокодеков нового поколения. Видеокодеки очень ответственны за обеспечение наилучшего визуального восприятия. Реализация кодеков CnX Player использует аппаратное ускорение, что позволяет значительно снизить потребление заряда батареи. По умолчанию для воспроизведения видео используется аппаратный видеокодек. Однако есть возможность изменить аппаратный кодек на программный кодек с помощью параметра «Декодер видео» в разделе «Параметры видео».

CnX Player поддерживает следующие видеокодеки:

  • H.265 или HEVC
  • H.265 или HEVC, 10 бит.
  • H.264 или AVC
  • H.264 или AVC, 10 бит.
  • Google VP9
  • Google VP9, ​​10 бит.
  • MPEG-4
  • MPEG-2
  • VP8
  • VC-1 или WMV
  • H.263

Подробнее

Подробнее

Подробнее

Подробнее

Подробнее

Подробнее

Подробнее

Подробнее

VideoProc – это новое приложение для обработки видео в формате 4K и HD, созданное как универсальное приложение для редактирования, изменения размера, перекодирования, преобразования и многого другого для всех ваших видео. Приложение также предлагает встроенные инструменты для записи экрана вашего iPhone, одновременной записи веб-камеры и экрана вашего Mac и загрузки онлайн-видео с более чем 1000 сайтов, что дает вам все необходимое для записи, преобразования и изменения размера видео для резервного копирования. , более быстрая загрузка, совместное использование и многое другое.

В течение ограниченного времени вы можете получить VideoProc бесплатно (78,90 долл. США).

Подробнее о VideoProc см. ниже.

< /p>

Полная обработка видео с ускорением на графическом процессоре

Полное аппаратное ускорение графического процессора 3-го уровня, полностью поддерживаемое графическими процессорами Intel, AMD и NVIDIA, означает, что вы получаете гораздо более быструю обработку видео с помощью VideoProc по сравнению со многими бесплатными конкурентами. Поддерживая 370 кодеков ввода и более 420 форматов вывода, он предлагает конвертер видео с поддержкой 4K, который может справиться с любыми задачами, от простых до более сложных задач транскодирования.

Загружаете ли вы видео на такой сервис, как YouTube, делитесь видео через Instagram или Twitter или просто создаете резервную копию своих любимых видео, существует множество причин, по которым вам может понадобиться преобразовать, перекодировать или изменить размер снятого видео. на вашем iPhone, GoPro, дроне или другой камере, подключив ее к вашему Mac. С VideoProc вы сможете выполнять более распространенные задачи, такие как переход с H264 на H265 (HEVC), MKV на iPhone/MP4, AVI на форматы, совместимые с YouTube, а также более интенсивную обработку, такую ​​как преобразование 3D-видео в 2D.< /p>

Инструменты редактирования

Вместо того, чтобы использовать отдельное приложение для быстрого редактирования и настройки перед преобразованием или обработкой видео, VideoProc предоставляет встроенные инструменты для простого редактирования, такие как кадрирование, вращение, субтитры, эффекты одним щелчком и объединение нескольких видеоклипов вместе. .

Он также предоставляет более продвинутые инструменты для таких вещей, как стабилизация видео, шумоподавление, создание GIF-файлов, коррекция линз, добавление водяных знаков и т. д.

Запись экрана

Функция записи экрана в VideoProc предлагает 3 режима записи, позволяя вам записывать экран вашего Mac или iOS или записывать с вашей камеры, одновременно записывая свой экран, используя режим «картинка в картинке». Функция записи позволяет при желании изменить размер или обрезать область, которую вы хотите записать, а также предоставляет инструменты для аннотаций, включая рисование, выделение и добавление текста, стрелок, контуров, изображений и озвучивания.

Скачивание видео

Наконец, еще одна функция VideoProc позволяет загружать видео и записывать прямые трансляции непосредственно с более чем 1000 сайтов, включая популярные сервисы потокового видео, такие как YouTube, Twitch, Facebook и другие. Затем вы, конечно же, можете редактировать и конвертировать свои видео, прежде чем обрабатывать их для дальнейшего использования или хранения.

В течение ограниченного времени вы можете скачать VideoProc бесплатно (Рег. $78,90).

FTC: мы используем автоматические партнерские ссылки, приносящие доход. Подробнее.