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