VLC for android 使用手記

將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

  1. private void enableIOMX(boolean enableIomx){  

  2.     SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(VLCApplication.getAppContext());  

  3.     Editor e = p.edit();  

  4.     e.putBoolean("enable_iomx", enableIomx);  

  5.     LibVLC.restart();  

  6.    }  

將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

  1. mEventManger = EventManager.getInstance();  

  2. mEventManger.addHandler(mEventHandler);  

是用來添加播放事件的,當播放視頻出現play,stop,pause等狀態時,會接收到。

相關文章
相關標籤/搜索