將vlc-android 中org.videolan.vlc包下面的這幾個class 添加:html
Aout.javajava
BitmapCache.javaandroid
EventManager.javaide
LibVLC.java函數
LibVlcException.javathis
TrackInfo.javaspa
Util.java.net
VLCApplication.java調試
WeakHandler.javarest
3.將源碼編譯出的libs下的armeabi-v7a(若是設設備是arm6 或者如下,是armeabi)文件夾添加在android工程的libs下面
uri = "rtsp://217.146.95.166:554/live/ch6bqvga.3gp"是我在網上隨便找的一個rtsp 流媒體地址
主要的部分是:
a. mLibVLC = LibVLC.getInstance(); 用來獲取mLIbVLC的實例,其中會初始化LibVLC,在AndroidManifest.xml中要添加 android:name="org.videolan.vlc.VLCApplication"這樣程序啓動時會調用VLCApplication使其 生成實例,不會致使LibVLC.getInstance()出錯。
b.mLibVLC.readMedia(uri, false);調用這一句後若是uri地址可用,流媒體就開始在載入,而且播放,並不須要mLibVLC.play()。
c.mLibVLC.attachSurface(mSurfaceHolder.getSurface(), MainActivity.this,width,height);調用這句的時候若是視頻不顯示,界面忽然退出,是由於沒有添加:public void setSurfaceSize(int width, int height, int sar_num, int sar_den)這個函數(我編譯源碼的時候ANDROID_ABI=armeabi-v7a,ANDROID_ABI設置不一樣這個函數的參數不一樣),它 在libvlcjni.c 的jni_SetAndroidSurfaceSize函數中調用,用來設置surfaceview大小的。
若是須要硬件解碼,就須要添加如下方法:
[java] view plaincopy
private void enableIOMX(boolean enableIomx){
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(VLCApplication.getAppContext());
Editor e = p.edit();
e.putBoolean("enable_iomx", enableIomx);
LibVLC.restart();
}
將sharedpreferences 的key "enable_iomx'設置爲true,由於libvlcjni.c 中經過函數libvlc_media_t *new_media(jlong instance, JNIEnv *env, jobject thiz, jstring fileLocation, bool noOmx, bool noVideo)調用java 代碼LibVLC.java 中的useIOMX()獲取「enable_iomx」的值,而後判斷是否用硬件解碼。
在調試的過程當中還會出現的錯誤是由於:Util.java 中String ANDROID_ABI = properties.getProperty("ANDROID_ABI");調用屬性「ANDROID_ABI」的值時返回的是null致使,這主要 發生在LibVLC.getInstance();時,本身判斷一下,若是爲ANDROID_ABI==null,就根據本身的設備選擇賦值 「armeabi-v7a」或者「armeabi」.
[html] view plaincopy
mEventManger = EventManager.getInstance();
mEventManger.addHandler(mEventHandler);
是用來添加播放事件的,當播放視頻出現play,stop,pause等狀態時,會接收到。