Доступ к видео декодеру 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
Есть два решения
- Сделайте это "вручную", что означает использование AVFoundation и, в частности, VideoToolbox.
Чтобы начать с этим, вы в основном начинаете с https://developer.apple.com/videos/play/wwdc2014/513/ Наслаждайтесь!
Я должен сказать, что это действительно "правильное и лучшее" решение.
- Если вы можете заставить 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?