n00b aquí (primer proyecto de Android). Me dieron un códec de video personalizado que se ha integrado con una versión de firmware de Android. Es un archivo .so que contiene una clase que hereda de MediaPlayerInterface, así como una implementación personalizada de MediaPlayerService para devolver instancias de la clase de códec personalizada desde la función de fábrica create() para los tipos de archivo apropiados.¿Cómo creo un reproductor multimedia personalizado para reproducir un códec personalizado en Android?
Quiero utilizar este códec como parte de una aplicación de reproductor de video que se puede instalar en teléfonos que no contienen el códec en el firmware, colocando el archivo .so en mi carpeta libs/armeabi y llamándolo a través de JNI.
De la respuesta a this question Deduzco que no es posible hacerlo en el marco de MediaPlayer, y tengo que crear un nuevo reproductor multimedia desde cero. Para empezar, implementé una IU en Java y la configuré para utilizar una vista personalizada (en lugar de VideoView), que amplía SurfaceView y usé una instancia de la clase MediaPlayer para reproducir videos. Luego reemplacé esta instancia de MediaPlayer con una clase Java de reproductor de medios personalizada. Configuré la interfaz JNI, imitando la forma en que lo hace android_media_MediaPlayer.cpp y llamando a la clase MediaPlayer C++ en el código JNI. Ahora necesito reemplazar que con una clase personalizada de reproductor de medios C++.
Aquí es donde comienzo a tener problemas. ¿Cuál es el enfoque recomendado para implementar un reproductor personalizado? ¿Hay alguno? ¿Hay alguna documentación en línea para cualquiera de estas cosas además de pescar a través de la fuente? ¿Cuánto del marco puedo usar y cuánto tengo que volver a implementar? ¿Tendré que implementar mi propio equivalente a MediaPlayerService?
Cualquier consejo muy apreciado.
Gracias por su respuesta. Leí el código fuente de Android para la interfaz de MediaPlayer antes de publicar la pregunta inicial. Seguir líneas similares no parece posible. Específicamente, el MediaPlayer incorporado usa el permiso ACCESS_SURFACE_FLINGER, que parece denegado a las aplicaciones que no están incorporadas. Quiero que los usuarios puedan descargar e instalar mi reproductor, no recibirlo preinstalado en el teléfono. – samgak
Hola, comparte tus últimos hallazgos sobre cómo implementar un códec personalizado para Android. @samgak – HoseinIT