vlc android的编译及截图,录制视频等功能
编译的环境是ubuntu 12.04,要安装好java,配置好环境变量,按照http://wiki.videolan.org/AndroidCompile配置好,就可以编译了。
- export JAVA_HOME=/home/sunlit/jdk1.6.0_38/
- export PATH=$JAVA_HOME/bin:$PATH
- export classPath=/home/sunlit/jdk1.6.0_38/
- export ANDROID_SDK=/home/sunlit/sdk
- export ANDROID_NDK=/home/sunlit/android-ndk-r8c
- export PATH=$PATH:$ANDROID_SDK/platform-tools:$ANDROID_SDK/tools
- export ANDROID_ABI=armeabi-v7a
为了在android vlc上增加截图和保存视频的功能
截图:
要对android/configure.sh进行修改 删掉其中的-disable-sout
另外保存图片为png格式,需要让ffmpeg增加-enable-encoder=png的编码器(在android/vlc/contrib/src/ffmpeg/rules.mak中修改)
在libvlcjni.c中增加函数:
- jboolean Java_org_videolan_vlc_LibVLC_takeSnapShot(JNIEnv *env, jobject thiz,jint number, jstring path, jint width,jint height)
- {
- jboolean isCopy;
- libvlc_media_player_t *mp = getMediaPlayer(env, thiz);
- /* Get C string */
- const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);
- if (mp)
- if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)
- return JNI_TRUE;
- return JNI_FALSE;
- }
在LibVlc.java中增加native函数的接口
- private native boolean takeSnapShot( int num, String file, int width, int height);
- public boolean takeSnapShot(String file, int width, int height) {
- return takeSnapShot(0, file, width, height);
- }
编译后就可以使用。调用LibVlc.java中的takeSnapShot就可以实现截图了。
录制视频:
(此部分参考了网络文章http://blog.youkuaiyun.com/sooth2008/article/details/6787459)
1.添加申明函数:找到include\vlc\libvlc_media_player.h文件,搜索libvlc_video_take_snapshot(实现截图功能的)这个函数,之所以我提到这个函数,是因为实现录像功能的函数与这个函数非常相像,如果想添加另外的功能,也可以参照VLC已有的功能函数去实现.找到libvlc_video_take_snapshot后,在其后面添加名为
- <span style="font-size:10px;">VLC_PUBLIC_API int libvlc_video_toggle_record( libvlc_media_player_t *p_mi,const char *psz_filepath, const char *psz_fileame );</span>
的录像函数,我的录像函数的思想是这样的:调用一次时开始录像,再调用一次时停止录像.所以名为toggle.这样申明函数就添加好了.
2.添加实现函数:找到android/vlc/lib/video.c ,然后添加函数实现如下:
- int libvlc_video_toggle_record( libvlc_media_player_t *p_mi,
- const char *psz_filepath, const char *psz_filename )
- {
- input_thread_t *p_input = libvlc_get_input_thread( p_mi );
- if(p_input == NULL)
- return -1;
- var_SetString( p_input, "input-record-path", psz_filepath );
- var_SetString( p_input, "sout-record-dst-prefix", psz_filename );
- var_ToggleBool( p_input, "record");
- vlc_object_release(p_input);
- return 0;
- }
3.在lib/libvlc.sym文件中添加libvlc_video_toggle_record的声明
参照截图部分修改libvlcjni.c,LibVlc.java 编译后即可调用
但是录制视频的函数实现有点问题 本人正在调试中。
提供一个编译好的截图的包http://download.youkuaiyun.com/detail/lshguang89/6584289
- package org.videolan.libvlc;
- private native boolean takeSnapShot(int num, String file, int width, int height);
- private native boolean videoRecordStart(String path);
- pri
送佛送到西 源码下载地址http://pan.baidu.com/s/17Y4dO
有什么问题 请在评论中提出
如果编译过了 没问题 请向我支付宝账号布施或者捐赠1元人民币 账户是https://me.alipay.com/ares89 谢谢支持
支持作者