Аппаратное ускорение декодирования видео для H.264 в Android до появления Jelly Bean
-
21-12-2019 - |
Вопрос
Я работаю над проектом видеоконференцсвязи.Мы использовали программный кодек для кодирования и декодирования видеокадров, который отлично подойдет для более низких разрешений (до 320p).Мы планировали поддерживать наше приложение и для более высоких разрешений, в том числе до 720p.Я пришел к выводу, что аппаратное ускорение справится с этой работой довольно хорошо.
Поскольку медиакодек api аппаратного кодека доступен начиная с Jelly Bean, я использовал его для кодирования и декодирования, и он работает нормально.Но мое приложение поддерживается начиная с версии 2.3.Итак, мне нужно иметь аппаратно ускоренное декодирование видео для кадров H.264 разрешением 720p со скоростью 30 кадров в секунду.
В ходе исследования наткнулся на идею использования кодека OMX путем модификации фреймворка stage fright.Я читал, что аппаратный декодер для H.264 доступен с версии 2.1, а кодировщик - с версии 3.0.Я просмотрел множество статей и вопросов, приведенных на этом сайте, и подтвердил, что могу продолжать.
Я читал об архитектуре боязни сцены здесь - архитектура и здесь- stagefright, как это работает
И я читал о кодеке OMX здесь- используйте-android-аппаратный-декодер-с-omxcodec-в-ndk.
У меня возникли проблемы с запуском и некоторая путаница в его реализации.Я хотел бы получить некоторую информацию об этом.
- Для использования кодека OMX в моем коде должен ли я создать свой проект со всем деревом исходных текстов Android или я могу это сделать, добавив некоторые файлы из исходного кода AOSP (если да, то все).
- Каким шагам с нуля я должен следовать, чтобы достичь этого?
Может кто-нибудь дать мне рекомендации по этому поводу
Спасибо...
Решение
Лучший пример для описания интеграции OMXCodec
в native layer находится утилита командной строки stagefright
как можно наблюдать здесь в GingerBread
сам.Этот пример показывает, как OMXCodec
создается.
Следует отметить некоторые моменты:
Входные данные для
OMXCodec
должно быть смоделировано какMediaSource
и, следовательно, вы должны убедиться, что ваше приложение удовлетворяет этому требованию.Пример созданияMediaSource
основанный на нем источник можно найти вrecord
служебный файл в видеDummySource
.Вход в декодер, т.е.
MediaSource
следует предоставлять данные черезread
метод и, следовательно, ваше приложение должно предоставлять индивидуальные фреймы для каждогоread
вызов.Декодер может быть создан с помощью
NativeWindow
для выделения выходного буфера.В этом случае, если вы хотите получить доступ к буферу из центрального процессора, вам, вероятно, следует обратиться к этот запрос для получения более подробной информации.