vlc_android中獲取視訊播放狀態
阿新 • • 發佈:2019-02-07
vlc中視訊的狀態有以下幾種:
int libvlc_NothingSpecial=0;
int libvlc_Opening=1;
int libvlc_Buffering=2;
int libvlc_Playing=3;
int libvlc_Paused=4;
int libvlc_Stopped=5;
int libvlc_Ended=6;
int libvlc_Error=7;
vlc_android 中的LibVLC.java沒有取得這些狀態的介面,只有一個/** * Returns true if any media is playing */ public native boolean isPlaying();
可什麼是is playing呢?在vlc 原始碼中,能看到
(state == libvlc_Opening) || (state == libvlc_Buffering) ||
(state == libvlc_Playing)
這三個狀態是isPlaying。
有時候我們的需求更細緻,如果要在網路視訊播放之前加上一個ProgressBar,視訊開始播放就取消ProgressBar,這時就必須知道libvlc_Playing何時出現。
為了獲得更細分的狀態,只有自己修改libvlcjni.c了,在該檔案最後加上
在LibVLC.java中增加native函式:jint Java_org_videolan_vlc_LibVLC_getState(JNIEnv *env, jobject thiz) { libvlc_media_list_player_t *mp = getMediaListPlayer(env, thiz); if (mp){ libvlc_state_t state=libvlc_media_list_player_get_state(mp); return (jint)state; } else return -1; }
public native int getState();
編譯vlc android原始碼,就能得到libvlcjni.so了,加入你的專案中即可。
例子如下,
load(url); loadingDialog = ProgressDialog.show(this, "", "載入中,請稍等 …", false, true); new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(1000); Log.d(TAG,"progress dialog():"+mLibVLC.getState()); if(mLibVLC != null &&mLibVLC.getState()==LibVLC_State.libvlc_Playing){ loadingDialog.dismiss(); break; } } catch (InterruptedException e) { e.printStackTrace(); } } } }).start();