vlc android的编译及截图,录制视频等功能

 

vlc android的编译及截图,录制视频等功能

分类: 多媒体   3510人阅读  评论(33)  收藏  举报

目录(?)[+]

编译的环境是ubuntu 12.04,要安装好java,配置好环境变量,按照http://wiki.videolan.org/AndroidCompile配置好,就可以编译了。

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  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  

为了在android vlc上增加截图和保存视频的功能

截图:

要对android/configure.sh进行修改 删掉其中的-disable-sout

另外保存图片为png格式,需要让ffmpeg增加-enable-encoder=png的编码器(在android/vlc/contrib/src/ffmpeg/rules.mak中修改)

在libvlcjni.c中增加函数:

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. jboolean Java_org_videolan_vlc_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.    const char* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);  
  7.   
  8.    if (mp)  
  9.         if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)  
  10.             return JNI_TRUE;  
  11.    return JNI_FALSE;  
  12.   
  13. }  

在LibVlc.java中增加native函数的接口

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private native boolean takeSnapShot( int num, String file, int width, int height);  
和调用方法

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. public boolean takeSnapShot(String file, int width, int height) {  
  2.     return takeSnapShot(0, file, width, height);  
  3. }  


编译后就可以使用。调用LibVlc.java中的takeSnapShot就可以实现截图了。

录制视频:

(此部分参考了网络文章http://blog.csdn.net/sooth2008/article/details/6787459)

1.添加申明函数:找到include\vlc\libvlc_media_player.h文件,搜索libvlc_video_take_snapshot(实现截图功能的)这个函数,之所以我提到这个函数,是因为实现录像功能的函数与这个函数非常相像,如果想添加另外的功能,也可以参照VLC已有的功能函数去实现.找到libvlc_video_take_snapshot后,在其后面添加名为

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <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 ,然后添加函数实现如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. int libvlc_video_toggle_record( libvlc_media_player_t *p_mi,  
  2.                                 const char *psz_filepath, const char *psz_filename )  
  3. {  
  4.     input_thread_t *p_input = libvlc_get_input_thread( p_mi );  
  5.     if(p_input == NULL)  
  6.         return -1;    
  7.     var_SetString( p_input, "input-record-path", psz_filepath );      
  8.     var_SetString( p_input, "sout-record-dst-prefix", psz_filename );  
  9.     var_ToggleBool( p_input, "record");  
  10.     vlc_object_release(p_input);  
  11.     return 0;  
  12. }  

3.在lib/libvlc.sym文件中添加libvlc_video_toggle_record的声明


参照截图部分修改libvlcjni.c,LibVlc.java 编译后即可调用

但是录制视频的函数实现有点问题 本人正在调试中。

提供一个编译好的截图的包http://download.csdn.net/detail/lshguang89/6584289 

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package org.videolan.libvlc;  
  2.   
  3.     private native boolean takeSnapShot(int num, String file, int width, int height);  
  4.   
  5.     private native boolean videoRecordStart(String path);  
  6.   
  7.     pri


    vate native boolean videoRecordStop();  




送佛送到西 源码下载地址http://pan.baidu.com/s/17Y4dO

有什么问题 请在评论中提出

如果编译过了 没问题 请向我支付宝账号布施或者捐赠1元人民币 账户是https://me.alipay.com/ares89 谢谢支持

支持作者
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值