2012-03-11 1 views
11

Android по умолчанию не поддерживает многие форматы файлов мультимедиа (файлы, такие как .mkv). Но такие игроки, как MXPlayer и MoboPlayer, могут воспроизводить такие файлы. Как работают эти приложения? Есть ли какие-либо руководства по программированию или статьи, объясняющие, как это делается?Как приложения Media Player Android, такие как MXPlayer и MoboPlayer, воспроизводят неподдерживаемые форматы файлов, такие как MKV?

+0

mkv - это просто контейнер. вы можете использовать много разных видео/аудио кодеков внутри ... – Goddchen

ответ

10

Android не поддерживает все медиаформаты по умолчанию. Следовательно, для поддержки неподдерживаемого формата такие приложения, как MoboPlayer, сами выполняют стандартные задачи медиаплеера, используя комбинацию Java и собственный код через JNI.

Чтобы узнать больше, посмотрим, что делает медиаплеер для воспроизведения медиафайла и как они выполняются MoboPlayer, как приложения на Android.

Typical tasks of a Media Player

Игрок должен выполнять следующие задачи (а) демультиплексируйте формат файла и извлечения видео/аудио (б) Декодирование видео и аудио (с) Отображение видео и воспроизведения звука. Давайте рассмотрим, как эти три области можно обрабатывать в случае игрока MoboPlayer.

File format Demux

Android не поддерживает все контейнеры формата файлов по умолчанию. Например, ASF (формат файла WMV-файлов) не поддерживается. Следовательно, у игрока должен быть собственный демультиплекс, чтобы выполнять эту работу. libavformat (используется FFMPEG) является ведущей библиотекой demux с открытым исходным кодом.

Video/Audio decode

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

Video display

Есть два варианта отображения видео. Игроки используют либо SurfaceView буферы, либо ускоренные буферы OpenGL. Android предоставляет листинг объекта Java Surface (абстракция подстилающего поверхностного объекта flinger) внутреннему собственному объекту с именем NativeWindow, к которому затем можно получить доступ с помощью собственного кода.

ICS (Android 4.0), Android предоставляет доступ к ускоренным буферам OpenGL (SurfaceTexure и TextureView). Они также могут использоваться для отображения видео.

Audio playout

Игроки могут непосредственно взаимодействовать с AudioTrack объекта обеспечивается на уровне Java, чтобы играть декодированного сэмплы.

+1

OakBytes прав. Эти игроки используют сторонние парсеры/программные декодеры либо фирменные, либо FFMPEG. Некоторые игроки также используют opengl для отображения. Большинство из них используют SuraceView, а его родной экземпляр NativeWindow отображает декодированное видео. Это работает без встроенного фреймворка и сидит параллельно ему. Следовательно, moboplayer также предоставляет возможность использовать программные или аппаратные декодеры. – peasea

Смежные вопросы