Аппаратное ускорение декодирования видео для H.264 в Android до появления Jelly Bean

StackOverflow https://stackoverflow.com//questions/24034542

Вопрос

Я работаю над проектом видеоконференцсвязи.Мы использовали программный кодек для кодирования и декодирования видеокадров, который отлично подойдет для более низких разрешений (до 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.

У меня возникли проблемы с запуском и некоторая путаница в его реализации.Я хотел бы получить некоторую информацию об этом.

  1. Для использования кодека OMX в моем коде должен ли я создать свой проект со всем деревом исходных текстов Android или я могу это сделать, добавив некоторые файлы из исходного кода AOSP (если да, то все).
  2. Каким шагам с нуля я должен следовать, чтобы достичь этого?

Может кто-нибудь дать мне рекомендации по этому поводу

Спасибо...

Это было полезно?

Решение

Лучший пример для описания интеграции OMXCodec в native layer находится утилита командной строки stagefright как можно наблюдать здесь в GingerBread сам.Этот пример показывает, как OMXCodec создается.

Следует отметить некоторые моменты:

  1. Входные данные для OMXCodec должно быть смоделировано как MediaSource и, следовательно, вы должны убедиться, что ваше приложение удовлетворяет этому требованию.Пример создания MediaSource основанный на нем источник можно найти в record служебный файл в виде DummySource.

  2. Вход в декодер, т.е. MediaSource следует предоставлять данные через read метод и, следовательно, ваше приложение должно предоставлять индивидуальные фреймы для каждого read вызов.

  3. Декодер может быть создан с помощью NativeWindow для выделения выходного буфера.В этом случае, если вы хотите получить доступ к буферу из центрального процессора, вам, вероятно, следует обратиться к этот запрос для получения более подробной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top