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.