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