Замена стандартного программного кодера Android H264 кодировщиком на основе ffmpeg
В Android ICS и более поздних версиях используется новая версия OpenMax IL API, что делает старые двоичные двоичные объекты бесполезными / неиспользуемыми. Это приводит к тому, что более старые устройства, которые в противном случае работают с ICS, просто отлично работают с плохим воспроизведением видео (например, YouTube HQ и IMBD), потому что резервный программный декодер Android отстой по сравнению с тем, что ffmpeg может делать на одном устройстве (я тестировал MXPlayer+arm6vfp). ffmpeg и 720p фильм воспроизводится отлично).
Я пытаюсь покопаться в исходном коде Android, чтобы увидеть, где и что именно я могу добавить / заменить код, чтобы позволить использовать потрясающую библиотеку ffmpeg. Проблема в том, что я не знаю точно, какой код используется, например, в приложении YouTube для декодирования видео, или как это решено.
Насколько я могу судить, у меня есть два варианта:
Определите текущий используемый программный декодер и попытайтесь обернуть его внешний интерфейс вокруг ffmpeg, эффективно заменив медленный программный декодер, используемый в настоящее время. Конечный результат будет один. Так что я мог бы подтолкнуть к устройству.
Выясните, как заставить Android задуматься над библиотекой OMX, основанной на ffmpeg (я успешно создал одну для Android: limoa), и добавить ее куда-нибудь в список рассматриваемых библиотек (или лучше: заменить неиспользуемый аппаратный кодек).
В качестве расширения я бы хотел, чтобы через это работало кодирование видео с видеокамеры, поэтому очень хотелось бы получить действительно интегрированное решение. Вопрос в том, как, где и что? Поиск по исходному дереву Android дает многочисленные подсчеты "H264" и связанных с ними вещей в разных местах. Мне нужно самое низкое и простое из возможных, поэтому я могу просто обернуть гипотетическую decode(buffer)
вызов функции для использования ffmpeg (libavcodec).
1 ответ
Мне кажется, что эта презентация ("Интеграция аппаратного видеокодека в Android Stagefright с использованием OpenMAX IL") - это именно то, что вы хотели бы сделать. Удачи с вашим проектом!