Как приложения Media Player для Android, такие как MXPlayer и MoboPlayer, воспроизводят неподдерживаемые форматы файлов, такие как MKV?

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

Ответ 1

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

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

Typical tasks of a Media Player

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

File format Demux

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

Video/Audio decode

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

Video display

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

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

Audio playout

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