Android: как интегрировать декодер в мультимедийный фреймворк

Недавно я успешно портировал видео декодер на Android. Также вывел вывод на поверхность и проверил вывод, используя нативный API. Теперь следующая задача - реализовать воспроизведение, паузу, потоковую передачу и т. Д., То есть другие функции медиаплеера. Это будет переделкой, поскольку все эти функции уже определены в мультимедийной среде Android. Я слышал, что мы можем сделать наш декодер плагином и интегрировать его в мультимедийную среду Android. Хотя я гуглил относительно того же самого, я едва мог найти информацию относительно того же самого. Поэтому я прошу любого из читателей предложить некоторые соответствующие ссылки или решение для вышеуказанной проблемы. Заранее спасибо, жду вашего ответа.

1 ответ

Решение

В платформе Android SF кодеки регистрируются через media_codecs.xml, В стандартном дистрибутиве Android пример media_codecs.xml можно найти здесь. Все аудиовизуальные компоненты зарегистрированы как OMX компоненты.

1. Регистрация кодеков

Чтобы зарегистрировать свой видео декодер, вам нужно будет добавить новую запись в <Decoders> список. Чтобы убедиться, что ваш кодек всегда выбран, убедитесь, что ваш кодек указан в качестве первой записи для конкретного MIME тип. Пример записи для декодера H.264 может быть таким, как показано ниже.

<Decoders>
    <MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
        <Quirk name="requires-allocate-on-input-ports" />
        <Quirk name="requires-allocate-on-output-ports" />
    </MediaCodec>
    <MediaCodec name="OMX.google.h264.decoder" type="video/avc" />

Куда,

а. OMX.ABC.XYZ.H264.Decoder это название вашего компонента

б. video/avc это MIME Тип вашего компонента. В этом примере он обозначает видеодекодер AVC / H.264.

Следующие 2 утверждения обозначают quirks или особые требования ваших компонентов. В приведенном примере requires-allocate-on-input-ports указывает на Stagefright фреймворк, который компонент предпочитает размещать буферы на всех своих входных портах. Точно так же, другой quirk сообщает, что компонент также предпочтет размещать свои выходные порты. Для списка поддерживаемых quirks в системе, вы можете обратиться к функции OMXCodec::getComponentQuirks в файле OMXCodec.cpp. Эти причуды преобразуются во флаги, которые затем считываются платформой для создания и инициализации компонентов.

На рисунке показано, что ваш OMX Компонент зарегистрирован до встроенного в Google декодера видео по умолчанию.

ПРИМЕЧАНИЕ. Если вы пытаетесь выполнить это на конечном устройстве, вам необходимо убедиться, что эта запись отражена в окончательном варианте. media_codecs.xml файл.

2. Регистрация ядра OMX

Чтобы создать компонент и убедиться, что вызывается правильный фабричный метод, вам, возможно, придется зарегистрировать свой OMX Ядро с Stagefright фреймворк.

Чтобы зарегистрировать новое ядро, вам нужно будет создать новую библиотеку с именем libstagefrighthw.so который будет расположен по адресу /system/lib в вашей конечной системе. Эта библиотека должна будет выставить createOMXPlugin символ, который будет смотреть dlsym,

Регистрация OMX ядро, таким образом: OMXMaster Запускает addVendorPlugin который внутренне вызывает addPlugin("libstagefrighthw.so"), В addPlugin, createOMXPlugin будет найден с помощью которых другие указатели функции для makeComponentInstance, destroyComponentInstance и т. д. инициализируются.

Однажды OMX Ядро инициализировано, вы готовы запустить свой собственный компонент в рамках Android. Ссылка для OMXMaster можно найти здесь.

С этими изменениями ваш видеодекодер интегрируется в платформу android stagefright.

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