1. 程式人生 > >vlc android的編譯及截圖,錄製視訊等功能

vlc android的編譯及截圖,錄製視訊等功能

編譯的環境是ubuntu 12.04,要安裝好java,配置好環境變數,按照http://wiki.videolan.org/AndroidCompile配置好,就可以編譯了。

  1. export JAVA_HOME=/home/sunlit/jdk1.6.0_38/  
  2. export PATH=$JAVA_HOME/bin:$PATH  
  3. export classPath=/home/sunlit/jdk1.6.0_38/  
  4. export ANDROID_SDK=/home/sunlit/sdk  
  5. export ANDROID_NDK=/home/sunlit/android-ndk-r8c  
  6. export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools  
  7. export ANDROID_ABI=armeabi-v7a  

2014/03/26日更新開始

在ubuntu下編譯vlc https://wiki.videolan.org/AndroidCompile/      安裝工具           sudo apt-get install ant autoconf automake autopoint cmake gawk gcc g++ libtool m4 patch pkg-config ragel subversion yasm git
     切換vlc android 版本到 0.1.x-bugfix            cd android            git branch -r            git checkout 0.1.x-bugfix

2014/03/26日更新結束

為了在android vlc上增加截圖和儲存視訊的功能

截圖:

要對android/configure.sh進行修改 刪掉其中的-disable-sout

另外儲存圖片為png格式,需要讓ffmpeg增加-enable-encoder=png的編碼器(在android/vlc/contrib/src/ffmpeg/rules.mak中修改)

2014/03/26日更新開始

 FFMPEGCONF += --disable-encoders --disable-muxers

               ->FFMPEGCONF += --disable-encoders --enable-encoder=png

2014/03/26日更新結束

在libvlcjni.c中增加函式:

  1. jboolean Java_org_videolan_libvlc_LibVLC_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)  
  2. {  
  3.     jboolean isCopy;  
  4.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
  5.      /* Get C string */
  6.    constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
  7.    if (mp)  
  8.         if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
  9.             return JNI_TRUE;  
  10.    return JNI_FALSE;  
  11. }  


在LibVlc.java中增加native函式的介面

  1. privatenativeboolean takeSnapShot( int num, String file, int width, int height);  
和呼叫方法
  1. publicboolean takeSnapShot(String file, int width, int height) {  
  2.     return takeSnapShot(0, file, width, height);  
  3. }  


編譯後就可以使用。呼叫LibVlc.java中的takeSnapShot就可以實現截圖了。

錄製視訊:

2014/03/26日更新開始

    • 把patch檔案放到/android/vlc中 使用命令patch -p1 < xxxx.patch  查出其中的失敗的地方 手動修改
  • 修改vlc-android/jni/libvlcjni.c 在檔案末尾新增
    1. jboolean Java_org_videolan_libvlc_LibVLC_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)  
    2. {  
    3.     jboolean isCopy;  
    4.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    5.      /* Get C string */
    6.    constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
    7.    if (mp)  
    8.         if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
    9.             return JNI_TRUE;  
    10.    return JNI_FALSE;  
    11. }  
    12. jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStart(JNIEnv *env, jobject thiz,jstring path)  
    13. {  
    14.     jboolean isCopy;  
    15.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    16.      /* Get C string */
    17.    constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
    18.    //const char* psz_filename=(*env)->GetStringUTFChars(env, filename, &isCopy);
    19.    if (mp)  
    20.         if(libvlc_media_player_record_start(mp,psz_path)==0)  
    21.             return JNI_TRUE;  
    22.    return JNI_FALSE;  
    23. }  
    24. jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStop(JNIEnv *env, jobject thiz)  
    25. {  
    26.     jboolean isCopy;  
    27.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    28.      /* Get C string */
    29.    if (mp)  
    30.         if(libvlc_media_player_record_stop(mp)==0)  
    31.             return JNI_TRUE;  
    32.    return JNI_FALSE;  
    33. }  
    34. jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecording(JNIEnv *env, jobject thiz)  
    35. {  
    36.     jboolean isCopy;  
    37.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    38.    if (mp)  
    39.         if(libvlc_media_player_is_recording(mp))  
    40.             return JNI_TRUE;  
    41.    return JNI_FALSE;  
    42. }  
    43. jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecordable(JNIEnv *env, jobject thiz)  
    44. {  
    45.     jboolean isCopy;  
    46.    libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    47.    if (mp)  
    48.         if(libvlc_media_player_is_recordable(mp))  
    49.             return JNI_TRUE;  
    50.    return JNI_FALSE;  
    51. }  
    52. jint Java_org_videolan_libvlc_LibVLC_getState(JNIEnv *env, jobject thiz)  
    53. {  
    54.     libvlc_media_player_t *mp = getMediaPlayer(env, thiz);  
    55.     if (mp){  
    56.         libvlc_state_t state=libvlc_media_player_get_state(mp);  
    57.         return (jint)state;  
    58.     }  
    59.     else
    60.         return -1;  
    61. }  

2014/03/26日更新結束


送佛送到西 原始碼下載地址http://pan.baidu.com/s/17Y4dO