Доступ к видео декодеру iOS? - PullRequest
23 голосов
/ 30 августа 2010

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

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


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

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


Ответы [ 5 ]

11 голосов
/ 10 сентября 2010

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

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

6 голосов
/ 08 сентября 2010

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

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

2 голосов
/ 22 января 2019

2019

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

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

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

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

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

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

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

Однако, с технической точки зрения, в наши дни действительно возможно скомпилировать ffmpeg прямо в iOS и использовать его в коде iOS. (Использование библиотеки C может быть самым простым.)

Мы только что выполнили грандиозный проект, занимаясь именно этим, а также другими подходами. (Я больше никогда не хочу видеть FFmpeg!)

Вы фактически можете добиться реального аппаратного декодирования в iOS, используя FFmpeg .

Мы обнаружили, что это невероятно сложно. И пару ошибок нужно исправить в FFmpeg. (Надеюсь, я больше никогда не увижу videotoolbox.c: /)

Итак, еще раз ваши два варианта аппаратного декодирования в iOS:

  1. Сделайте это "вручную" AVFoundation / VideoToolbox.

  2. Использовать FFmpeg.

Пункт 2 невероятно сложен и занимает много времени. Пункт 1 использует огромное количество времени. Трудный выбор: /

1 голос
/ 26 января 2017

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

1 голос
/ 30 августа 2010

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

...