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

n00b здесь (первый Android-проект). Мне был предоставлен специальный видеокодек, встроенный в прошивку Android. Это файл .so, содержащий класс, который наследует от MediaPlayerInterface, а также пользовательскую реализацию MediaPlayerService для возврата экземпляров пользовательского класса кодека из функции create() factory для соответствующих типов файлов.

Я хочу использовать этот кодек как часть приложения для видеопроигрывателя, которое может быть установлено на телефонах, которые не содержат кодек в прошивке, путем размещения файла .so в папке libs/armeabi и вызова его через JNI.

Из ответа на этот вопрос Я понимаю, что это невозможно сделать в рамках MediaPlayer, и мне нужно создать новый медиаплеер с земли вверх. Для начала я реализовал интерфейс на Java и настроил его на использование пользовательского представления (вместо VideoView), которое расширяет SurfaceView и использует экземпляр класса MediaPlayer для воспроизведения видео. Затем я заменил этот экземпляр MediaPlayer на пользовательский медиа-плеер Java-класса. Я настроил интерфейс JNI, подражая тому, как это делает android_media_MediaPlayer.cpp, и вызывает класс MediaPlayer С++ в коде JNI. Теперь мне нужно заменить на на пользовательский класс медиа-проигрывателя С++.

Вот где я начинаю сталкиваться с проблемами. Каков рекомендуемый подход для реализации пользовательского плеера? Есть ли это? Есть ли какая-то онлайн-документация для любого из этих материалов, кроме траления через источник? Какую часть структуры я могу использовать и сколько мне нужно для переопределения? Должен ли я реализовать свой собственный эквивалент MediaPlayerService?

Любые советы очень ценятся.

Ответы

Ответ 1

Вы можете найти исходный код Android, чтобы получить представление о том, как Android реализовал интерфейс MediaPlayer в Java. Ты можешь следуйте аналогичным строкам.

Ссылка на класс MediaPlayer

Ответ 2

Я надеюсь, что ваш кодек не слишком интенсивен. Основная причина, по которой Android поддерживает только H.264 - это (я думаю), что в большинстве устройств есть аппаратная поддержка этого кодека. Другие кодеки должны будут обрабатываться процессором, который, вероятно, не будет достаточно мощным.

Ответ 3

почему бы вам не использовать VLC? вы можете получить исходный код, поддерживает каждый формат. обрезать его для вашей цели, скинуть его, вуаля, c'est fini. Я знаю, что они на самом деле взламывают код, вы можете прыгать и помогать им.

http://gigaom.com/video/vlc-for-android-demo-beta/