¿Cómo reproducen las aplicaciones Media Player de Android como MXPlayer y MoboPlayer formatos de archivos no compatibles como MKV?

StackOverflow https://stackoverflow.com//questions/9654714

  •  11-12-2019
  •  | 
  •  

Pregunta

Android no admite muchos formatos de archivos multimedia (archivos como .mkv) de forma predeterminada.Pero reproductores como MXPlayer y MoboPlayer te permiten reproducir dichos archivos.¿Cómo funcionan estas aplicaciones?¿Existe algún tutorial o artículo de programación que explique cómo se hace?

¿Fue útil?

Solución

Android no admite todos los formatos multimedia de forma predeterminada.Por lo tanto, para admitir un formato no compatible, aplicaciones como MoboPlayer realizan ellas mismas tareas estándar de reproducción multimedia utilizando una combinación de Java y código nativo a través de JNI.

Para comprender más, veamos qué hace un reproductor multimedia para reproducir un archivo multimedia y cómo lo realizan las aplicaciones similares a MoboPlayer en Android.

Typical tasks of a Media Player

Un reproductor debe realizar las siguientes tareas (a) Desmultiplexar el formato de archivo y extraer el video/audio (b) Decodificar el video y el audio (c) Mostrar el video y reproducir el audio.Consideremos cómo se pueden manejar estas tres áreas en el caso de MoboPlayer como reproductor.

File format Demux

Android no admite todos los contenedores de formatos de archivos de forma predeterminada.Por ejemplo, no se admite ASF (formato de archivo de archivos WMV).Por lo tanto, un jugador necesita tener su propio demuxer para hacer el trabajo.libavformat (utilizado por FFMPEG) es una biblioteca demux líder de código abierto.

Video/Audio decode

libavcodec (utilizado por FFMPEG) es una biblioteca decodificadora de código abierto líder que decodifica secuencias desmultiplexadas y produce fotogramas de salida sin comprimir.Por lo tanto, jugadores como MoboPlayer lo utilizan a menudo.

Video display

Hay dos opciones para mostrar un vídeo.Los jugadores usan cualquiera de los dos. SurfaceView buffers o buffers acelerados OpenGL.Android proporciona una conversión del objeto Surface de Java (abstracción del objeto flotante de superficie subyacente) a un objeto nativo interno llamado NativeWindow, al que luego se puede acceder mediante el código nativo.

ICS (Android 4.0) en adelante, Android proporciona acceso a los buffers acelerados OpenGL (SurfaceTexure y TextureView) también.Estos también se pueden utilizar para mostrar el vídeo.

Audio playout

Los jugadores pueden interactuar directamente con el AudioTrack Objeto proporcionado en el nivel de Java para reproducir las muestras de audio decodificadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top