/* TODO: NOT IN VLC API */ void Java_org_videolan_libvlc_MediaPlayer_nativePlayMRL(JNIEnv *env, jobject thiz, jstring mrl, jobjectArray mediaOptions) { vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz); if (!p_obj) return; /* New Media */ const char* p_mrl = (*env)->GetStringUTFChars(env, mrl, 0); libvlc_media_t* p_md = libvlc_media_new_location(p_obj->p_libvlc, p_mrl); /* media options */ if (mediaOptions != NULL) add_media_options(p_md, env, mediaOptions); (*env)->ReleaseStringUTFChars(env, mrl, p_mrl); /* Connect the media event manager. */ /* TODO use VlcObject events */ libvlc_event_manager_t *ev_media = libvlc_media_event_manager(p_md); static const libvlc_event_type_t mp_media_events[] = { libvlc_MediaParsedChanged, libvlc_MediaMetaChanged, }; for(int i = 0; i < (sizeof(mp_media_events) / sizeof(*mp_media_events)); i++) libvlc_event_attach(ev_media, mp_media_events[i], vlc_event_callback, NULL); libvlc_media_player_set_media(p_obj->u.p_mp, p_md); libvlc_media_release(p_md); libvlc_media_player_play(p_obj->u.p_mp); }
libvlc_media_t *new_media(jlong instance, JNIEnv *env, jobject thiz, jstring fileLocation, bool noOmx, bool noVideo) { libvlc_instance_t *libvlc = (libvlc_instance_t*)(intptr_t)instance; jboolean isCopy; const char *psz_location = (*env)->GetStringUTFChars(env, fileLocation, &isCopy); libvlc_media_t *p_md = libvlc_media_new_location(libvlc, psz_location); (*env)->ReleaseStringUTFChars(env, fileLocation, psz_location); if (!p_md) return NULL; jclass cls = (*env)->GetObjectClass(env, thiz); jmethodID methodId = (*env)->GetMethodID(env, cls, "getMediaOptions", "(ZZ)[Ljava/lang/String;"); if (methodId != NULL) { jobjectArray mediaOptions = (*env)->CallObjectMethod(env, thiz, methodId, noOmx, noVideo); if (mediaOptions != NULL) { add_media_options(p_md, env, mediaOptions); (*env)->DeleteLocalRef(env, mediaOptions); } } return p_md; }
void Java_org_videolan_libvlc_LibVLC_playMRL(JNIEnv *env, jobject thiz, jlong instance, jstring mrl, jobjectArray mediaOptions) { /* Release previous media player, if any */ releaseMediaPlayer(env, thiz); /* Create a media player playing environment */ libvlc_media_player_t *mp = libvlc_media_player_new((libvlc_instance_t*)(intptr_t)instance); libvlc_media_player_set_video_title_display(mp, libvlc_position_disable, 0); jobject myJavaLibVLC = (*env)->NewGlobalRef(env, thiz); //if AOUT_AUDIOTRACK_JAVA, we use amem jclass cls = (*env)->GetObjectClass(env, thiz); jmethodID methodId = (*env)->GetMethodID(env, cls, "getAout", "()I"); if ( (*env)->CallIntMethod(env, thiz, methodId) == AOUT_AUDIOTRACK_JAVA ) { libvlc_audio_set_callbacks(mp, aout_play, aout_pause, NULL, NULL, NULL, (void*) myJavaLibVLC); libvlc_audio_set_format_callbacks(mp, aout_open, aout_close); } /* Connect the event manager */ libvlc_event_manager_t *ev = libvlc_media_player_event_manager(mp); static const libvlc_event_type_t mp_events[] = { libvlc_MediaPlayerPlaying, libvlc_MediaPlayerPaused, libvlc_MediaPlayerEndReached, libvlc_MediaPlayerStopped, libvlc_MediaPlayerVout, libvlc_MediaPlayerPositionChanged, libvlc_MediaPlayerTimeChanged, libvlc_MediaPlayerEncounteredError }; for(int i = 0; i < (sizeof(mp_events) / sizeof(*mp_events)); i++) libvlc_event_attach(ev, mp_events[i], vlc_event_callback, myVm); /* Keep a pointer to this media player */ setLong(env, thiz, "mInternalMediaPlayerInstance", (jlong)(intptr_t)mp); cls = (*env)->GetObjectClass(env, thiz); jmethodID methodID = (*env)->GetMethodID(env, cls, "applyEqualizer", "()V"); (*env)->CallVoidMethod(env, thiz, methodID); const char* p_mrl = (*env)->GetStringUTFChars(env, mrl, 0); libvlc_media_t* p_md = libvlc_media_new_location((libvlc_instance_t*)(intptr_t)instance, p_mrl); /* media options */ if (mediaOptions != NULL) add_media_options(p_md, env, mediaOptions); (*env)->ReleaseStringUTFChars(env, mrl, p_mrl); /* Connect the media event manager. */ libvlc_event_manager_t *ev_media = libvlc_media_event_manager(p_md); static const libvlc_event_type_t mp_media_events[] = { libvlc_MediaParsedChanged }; for(int i = 0; i < (sizeof(mp_media_events) / sizeof(*mp_media_events)); i++) libvlc_event_attach(ev_media, mp_media_events[i], vlc_event_callback, myVm); libvlc_media_player_set_media(mp, p_md); libvlc_media_player_play(mp); }