Замена стандартного программного кодера Android H264 кодировщиком на основе ffmpeg

В Android ICS и более поздних версиях используется новая версия OpenMax IL API, что делает старые двоичные двоичные объекты бесполезными / неиспользуемыми. Это приводит к тому, что более старые устройства, которые в противном случае работают с ICS, просто отлично работают с плохим воспроизведением видео (например, YouTube HQ и IMBD), потому что резервный программный декодер Android отстой по сравнению с тем, что ffmpeg может делать на одном устройстве (я тестировал MXPlayer+arm6vfp). ffmpeg и 720p фильм воспроизводится отлично).

Я пытаюсь покопаться в исходном коде Android, чтобы увидеть, где и что именно я могу добавить / заменить код, чтобы позволить использовать потрясающую библиотеку ffmpeg. Проблема в том, что я не знаю точно, какой код используется, например, в приложении YouTube для декодирования видео, или как это решено.

Насколько я могу судить, у меня есть два варианта:

  1. Определите текущий используемый программный декодер и попытайтесь обернуть его внешний интерфейс вокруг ffmpeg, эффективно заменив медленный программный декодер, используемый в настоящее время. Конечный результат будет один. Так что я мог бы подтолкнуть к устройству.

  2. Выясните, как заставить Android задуматься над библиотекой OMX, основанной на ffmpeg (я успешно создал одну для Android: limoa), и добавить ее куда-нибудь в список рассматриваемых библиотек (или лучше: заменить неиспользуемый аппаратный кодек).

В качестве расширения я бы хотел, чтобы через это работало кодирование видео с видеокамеры, поэтому очень хотелось бы получить действительно интегрированное решение. Вопрос в том, как, где и что? Поиск по исходному дереву Android дает многочисленные подсчеты "H264" и связанных с ними вещей в разных местах. Мне нужно самое низкое и простое из возможных, поэтому я могу просто обернуть гипотетическую decode(buffer) вызов функции для использования ffmpeg (libavcodec).

1 ответ

Решение

Мне кажется, что эта презентация ("Интеграция аппаратного видеокодека в Android Stagefright с использованием OpenMAX IL") - это именно то, что вы хотели бы сделать. Удачи с вашим проектом!

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