JNI提供接口形式:- static JNINativeMethod g_methods[] = {
- {
- "_setDataSource",
- "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V",
- (void *) IjkMediaPlayer_setDataSourceAndHeaders
- },
- { "_setDataSourceFd", "(I)V", (void *) IjkMediaPlayer_setDataSourceFd },
- { "_setDataSource", "(Ltv/danmaku/ijk/media/player/misc/IMediaDataSource;)V", (void *)IjkMediaPlayer_setDataSourceCallback },
-
- { "_setVideoSurface", "(Landroid/view/Surface;)V", (void *) IjkMediaPlayer_setVideoSurface },
- { "_prepareAsync", "()V", (void *) IjkMediaPlayer_prepareAsync },
- { "_start", "()V", (void *) IjkMediaPlayer_start },
- { "_stop", "()V", (void *) IjkMediaPlayer_stop },
- { "seekTo", "(J)V", (void *) IjkMediaPlayer_seekTo },
- { "_pause", "()V", (void *) IjkMediaPlayer_pause },
- { "isPlaying", "()Z", (void *) IjkMediaPlayer_isPlaying },
- { "getCurrentPosition", "()J", (void *) IjkMediaPlayer_getCurrentPosition },
- { "getDuration", "()J", (void *) IjkMediaPlayer_getDuration },
- { "_release", "()V", (void *) IjkMediaPlayer_release },
- { "_reset", "()V", (void *) IjkMediaPlayer_reset },
- { "setVolume", "(FF)V", (void *) IjkMediaPlayer_setVolume },
- { "getAudioSessionId", "()I", (void *) IjkMediaPlayer_getAudioSessionId },
- { "native_init", "()V", (void *) IjkMediaPlayer_native_init },
- { "native_setup", "(Ljava/lang/Object;)V", (void *) IjkMediaPlayer_native_setup },
- { "native_finalize", "()V", (void *) IjkMediaPlayer_native_finalize },
-
- { "_setOption", "(ILjava/lang/String;Ljava/lang/String;)V", (void *) IjkMediaPlayer_setOption },
- { "_setOption", "(ILjava/lang/String;J)V", (void *) IjkMediaPlayer_setOptionLong },
-
- { "_getColorFormatName", "(I)Ljava/lang/String;", (void *) IjkMediaPlayer_getColorFormatName },
- { "_getVideoCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getVideoCodecInfo },
- { "_getAudioCodecInfo", "()Ljava/lang/String;", (void *) IjkMediaPlayer_getAudioCodecInfo },
- { "_getMediaMeta", "()Landroid/os/Bundle;", (void *) IjkMediaPlayer_getMediaMeta },
- { "_setLoopCount", "(I)V", (void *) IjkMediaPlayer_setLoopCount },
- { "_getLoopCount", "()I", (void *) IjkMediaPlayer_getLoopCount },
- { "_getPropertyFloat", "(IF)F", (void *) ijkMediaPlayer_getPropertyFloat },
- { "_setPropertyFloat", "(IF)V", (void *) ijkMediaPlayer_setPropertyFloat },
- { "_getPropertyLong", "(IJ)J", (void *) ijkMediaPlayer_getPropertyLong },
- { "_setPropertyLong", "(IJ)V", (void *) ijkMediaPlayer_setPropertyLong },
- { "_setStreamSelected", "(IZ)V", (void *) ijkMediaPlayer_setStreamSelected },
-
- { "native_profileBegin", "(Ljava/lang/String;)V", (void *) IjkMediaPlayer_native_profileBegin },
- { "native_profileEnd", "()V", (void *) IjkMediaPlayer_native_profileEnd },
-
- { "native_setLogLevel", "(I)V", (void *) IjkMediaPlayer_native_setLogLevel },
- };
-
- JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved)
- {
- JNIEnv* env = NULL;
-
- g_jvm = vm;
- if ((*vm)->GetEnv(vm, (void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- return -1;
- }
- assert(env != NULL);
-
- pthread_mutex_init(&g_clazz.mutex, NULL );
-
- // FindClass returns LocalReference
- IJK_FIND_JAVA_CLASS(env, g_clazz.clazz, JNI_CLASS_IJKPLAYER);
- (*env)->RegisterNatives(env, g_clazz.clazz, g_methods, NELEM(g_methods) );
-
- ijkmp_global_init();
- ijkmp_global_set_inject_callback(inject_callback);
-
- FFmpegApi_global_init(env);
-
- return JNI_VERSION_1_4;
- }
|