Разработвам H264 H/W ускорен видео декодер за android. Досега се сдобих с някои библиотеки MediaCodec
, Stagefright
, OpenMax IL
, OpenMax AL
и FFmpeg
. След малко проучване открих, че...
Намерих страхотен ресурс за използване на stagefright с FFmpeg, но не мога да използвам FFmpeg като лиценз, той е доста ограничителен за разпределен софтуер. (Или е възможно да отхвърлите FFmpeg от този подход?)
Не мога да използвам MediaCodec като негов Java API и трябва да го извикам чрез JNI от C++ слой, което е относително бавно и не ми е позволено.
Не мога да използвам OpenMax AL, тъй като поддържа само декодиране на MPEG-2 транспортен поток чрез буферна опашка. Това изключва предаването на необработени h264 NALU или други медийни формати по този въпрос.
Сега останаха само - stagefright и OpenMax IL. Разбрах, че stagefright използва OpenMax(OMX) интерфейс. Така че трябва ли да използвам stagefright или OpenMax IL? Кое ще е по-обещаващо?
Освен това разбрах, че ускореният декодер на Android H/W е специфичен за доставчика и всеки доставчик има свои собствени OMX API интерфейси. Вярно ли е? Ако е така, трябва ли да напиша H/W специфична реализация на доставчика в случай на OpenMax IL? Какво ще кажете за сценичния страх? - Хардуерно зависим ли е или зависи от хардуера? Ако няма начин за H/W независимо внедряване с помощта на stagefright или OpenMax IL, трябва да поддържам поне Snapdragon на Qualcomm, Exynos на Samsung и Tegra-4.
Обърнете внимание, че трябва да декодирам поток H264 Annex B и да очаквам декодирани данни след декодиране, които ще изпратя към моя канал за рендиране на видео. Така че основно ми трябва само декодерният модул.
Наистина съм много объркан. Моля, помогнете ми да насоча в правилната посока. Благодаря предварително!
РЕДАКТИРАНЕ
Моят софтуер е с търговска цел и изходният код също е частен. И аз също съм ограничен да използвам ffmpeg от клиент. :)