2011-04-07 9 views
14

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.

Respuesta

3

Puede buscar el código fuente de Android para tener una idea de cómo Android ha implementado la interfaz MediaPlayer en Java. Puede seguir líneas similares.

MediaPlayer Class Reference

+3

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

+0

Hola, comparte tus últimos hallazgos sobre cómo implementar un códec personalizado para Android. @samgak – HoseinIT

2

espero que su códec no es demasiado intensivo de la CPU. La razón principal por la que Android solo admite H.264 es (supongo) que hay soporte de hardware para este códec en la mayoría de los dispositivos. Otros códecs necesitarán ser procesados ​​por la CPU, que probablemente no sea lo suficientemente potente.

2

¿por qué no usa VLC en su lugar? puedes obtener el código fuente, admite todos los formatos. recortar para su propósito, la piel, voila, c'est fini. Sé que en realidad están pirateando el código ahora, podrías saltarlo y ayudarlos.

http://gigaom.com/video/vlc-for-android-demo-beta/

+3

VLC se publica bajo la licencia GPLv2. No puede usar el código en sus propios proyectos comerciales. – philipp

Cuestiones relacionadas