Подтвердить что ты не робот

Как использовать аппаратное ускорение декодирования видео на Android?

Мне нужно аппаратное ускорение декодирования H.264 для исследовательского проекта, чтобы проверить самоопределенный протокол.

Поскольку у меня есть поиск в Интернете, я нашел несколько способов выполнить аппаратное ускорение декодирования видео на Android.

Некоторые люди "say" libstagefright - единственный способ, в то время как ребята Qualcomm сделали успех явно.

В настоящее время я не уверен, какой способ может работать. Сейчас я немного смущен. Если бы все могли работать, я бы, конечно, предпочел бы аппаратный независимый метод.

Как я протестировал несколько видеоплееров их ускорения H/W с Galaxy Tab 7.7 (3.2 и Enxyos), VLC, Mobo, Rock, vplayer, rock и mobo работают отлично, VLC не работает, vplayer, похоже, имеют ошибку рендеринга, которая стоит его производительности.

Во всяком случае, я сделал "операцию" на Rockplayer и удалил все его .so libs в data\data\com.redirecting\rockplayer, а программное декодирование сработало, а декодирование hw все еще прекрасное! Интересно, как они это сделали. Мне кажется, что ускорение hw может быть независимым от аппаратных платформ.

Может кто-нибудь прибить эту проблему? Или укажите любую ссылку с дополнительной информацией или более подробной информацией?

4b9b3361

Ответ 1

Чтобы ответить на вышеуказанный вопрос, позвольте мне представить несколько концепций, связанных с Android

OpenMAX Android использует OpenMAX для интерфейса кодека. Следовательно, все собственные кодеки (аппаратное ускорение или иное) обеспечивают интерфейс OpenMAX. Этот интерфейс используется StageFright (среда Player) для декодирования носителя с использованием кодека

NDK Android позволяет приложениям Java взаимодействовать с базовыми родными библиотеками C/С++ с использованием NDK. Для этого требуется использование JNI (Java Native Interface).

Теперь, придя к вашему вопросу How to tap native decoder to decode raw video bitstream?

В версии Android 4.0 и ниже Android не предоставил доступ к базовым видеодекодерам на уровне Java. Вам нужно будет написать собственный код для непосредственного взаимодействия с OMX-декодером. Хотя это возможно, это не тривиально, так как ему понадобятся знания о том, как работает OMX, и как сопоставить этот OMX с приложением NDK.

В версии 4.1 (версия Jelly Bean) Android, похоже, обеспечивает доступ к аппаратным ускорителям на уровне приложений через API JAVA. Более подробная информация о новых API-интерфейсах приведена в http://developer.android.com/about/versions/android-4.1.html#Multimedia

Ответ 2

Используйте ExoPlayer (github).

Его спонсируемый Google проект с открытым исходным кодом, который заменяет платформу MediaPlayer. Каждый компонент в конвейере является расширяемым, включая источник выборки (как кадры H.264 извлекаются из вашего пользовательского протокола) для рендеринга (для поверхности, SurfaceTexture и т.д.).

В него включено приятное демонстрационное приложение показывающее использование.

Ответ 3

Возможно, вы захотите попробовать MediaExtractor и MediaCodec (Они также доступны в NDK - AMediaExtractor и AMediaCodec - см. образец для воспроизведения .mp4 здесь native-codec)