Доступ к видео декодеру iOS?

IPad/iOS поддерживает потоковое видео, например, H.264, используя MPMoviePlayerController и т. д., но я получаю данные H.264 через пользовательский, проприетарный поток и должен декодировать их в мягком режиме реального времени.
Можно ли каким-либо образом получить доступ к видеодекодеру iPads / iOS для декодирования этих данных?

Обновление: Очевидно, что iOS 4.0 Core Media Framework поддерживает кадры декодирования и знает о H.264, но нет примера кода, и я не могу увидеть, что я на самом деле должен вызывать для фактического декодирования.


Обновление (десять лет спустя!)

Для тех, кто ищет в Google, вы делаете это в iOS в эти дни с помощью "VideoToolbox".


5 ответов

Решение

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

Я подам запрос на улучшение для этого.

Если у вас продолжают возникать проблемы с этим, я предлагаю вам взглянуть на libavcodec для декодирования данных (доступно в проекте ffmpeg).

В Dranger есть отличные учебники по ffmpeg, которые показывают, как правильно декодировать (через libavcodec) и отображать видеоданные (используя libsdl), среди прочего.

2019

Есть два решения

  1. Сделайте это "вручную", что означает использование AVFoundation и, в частности, VideoToolbox.

Чтобы начать с этим, вы в основном начинаете с https://developer.apple.com/videos/play/wwdc2014/513/ Наслаждайтесь!

Я должен сказать, что это действительно "правильное и лучшее" решение.

  1. Если вы можете заставить ffmpeg-api работать внутри вашего iOS-приложения, вы можете использовать ffmpeg.

Есть несколько способов начать с этим. (Одна совершенно новая вещь - SWIFT ffmpeg, созданный Sunlubo: https://github.com/sunlubo/SwiftFFmpeg)

Помните о подходе "ffmpeg", что, короче говоря, с ffmpeg / iOS существует ряд юридических / лицензионных проблем. Можно искать и читать об этих проблемах. Однако с технической стороны, в наши дни действительно возможно скомпилировать ffmpeg прямо в iOS и использовать его в коде iOS. (Использование библиотеки C может быть самым простым.)

В iOS 8 вы можете использовать набор инструментов для видео ( https://developer.apple.com/reference/videotoolbox) для декодирования H264 в необработанные кадры. VT API-интерфейсы с аппаратным ускорением обеспечивают гораздо лучшую производительность по сравнению с libavcodec. Если вы хотите воспроизвести кадры или создать предварительный просмотр, вы можете использовать рендерер на основе eagl для воспроизведения. Я написал пример приложения для кодирования кадров от raw до h.264 ( https://github.com/manishganvir/iOS-h264Hw-Toolbox). h.264 для raw не должно быть так сложно!

Пытались ли вы записать поток H.264, полученный из вашего протокола, во временный файл, к которому вы постоянно добавляете данные, а затем, когда вы записали достаточно байтов, чтобы избежать буферизации воспроизведения, передавая URL вашего временного файла в MPMoviePlayerController?

Другие вопросы по тегам