Cómo acceder a la biblioteca libmediaplayerservice propia de libmedia_jni en Android Gingerbread

De forma predeterminada, Ginobread 2.3 utiliza PV_Player (biblioteca opencore). He encontrado una solución sólo debe ser parche sistema build.prop archivo, pero no quiero parche del sistema. Quiero crear mi propia biblioteca usando el trabajo de marco de medios de android que usará el jugador StageFright. Sé que libmediaplayerservice decide la selección del jugador. Echa un vistazo al marco de los medios de comunicación

Quiero crear la biblioteca de acuerdo con el marco de android –

  • Libmedia_jni_own
  • Libmedia_own
  • Libmediaplayerservice_own
  • Pero el problema es que libmedia no interactúa directamente con libmediaplayerservice biblioteca, no es directamente dependiente libmediaplayerservice biblioteca. De modo que no pueda crear el jugador del stagefright. Libmedia se comunica con libmediaplayerservice library a través del mecanismo Binder IPC. ¿Cómo puedo parchar la biblioteca de libmedia fuente, de modo que pueda tener acceso a mi libmediaplayerservice la biblioteca y capaz de crear el jugador de StageFright así como todo el acceso del registrador de StageFright etc en vez de la biblioteca del opencore.

    No creo que puedas modificar cómo funcionan los servicios de medios sin patchear el sistema. Como el servicio de medios y sus bibliotecas están en la partición del sistema, en realidad no tienes ninguna forma de secuestrar la carga jni. Si está ejecutando una ROM none-AOSP (como Samsung, HTC, etc.), no podrá intercambiar las librerías, ya que las de stock rom contienen muchas vinculaciones con las librerías propietarias.

    Al mirar el código fuente de Android, el mecanismo de encuadernación que está mencionando debe mirar el método 'getMediaPlayerService ()' y comprobar cómo el gestor de servicios gestiona el servicio de medios. Si puede parche este método y definir correctamente su servicio que debe estar bien.

    IMediaDeathNotifier::getMediaPlayerService() { LOGV("getMediaPlayerService"); Mutex::Autolock _l(sServiceLock); if (sMediaPlayerService.get() == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { binder = sm->getService(String16("media.player")); if (binder != 0) { break; } LOGW("Media player service not published, waiting..."); usleep(500000); // 0.5 s } while(true); if (sDeathNotifier == NULL) { sDeathNotifier = new DeathNotifier(); } binder->linkToDeath(sDeathNotifier); sMediaPlayerService = interface_cast<IMediaPlayerService>(binder); } LOGE_IF(sMediaPlayerService == 0, "no media player service!?"); return sMediaPlayerService; } 

    El método en cuestión se encuentra en: frameworks/base/media/libmedia/IMediaDeathNotifier.cpp

    Además, el servicio se establece llamando a:

      void MediaPlayerService::instantiate() { defaultServiceManager()->addService( String16("media.player"), new MediaPlayerService()); } 

    Que se puede encontrar en: /frameworks/base/media/libmediaplayerservice/MediaPlayerService.cpp

  • Manejo de excepciones de Android NDK
  • Gradle experimental incluir directorios de archivos a través de la directiva srcDir srcFile
  • Android Studio NDK Error de compilación Error: Error de ejecución de la tarea ': app: buildNative'
  • Registro de llamadas de Android La voz entrante no se graba
  • Eliminar moldes de estilo C en código C ++ bajo Android
  • Cómo transmitir a ffserver desde android
  • Pasar una cadena al código C en Android NDK
  • Android NDK: ¿Cómo anular onBackPressed en NativeActivity sin java?
  • ¿Cómo hacer que el dispositivo Android arranque cuando se conecta la alimentación?
  • Ndk-gdb: "Ninguna tabla de símbolos está cargada"
  • Biblioteca no encontrada debido a targetSdkVersion (armeabi-v7a y libcryptopp.so)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.