vlc android 编译 录制视频,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

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中增加函数:

jboolean Java_org_videolan_libvlc_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 */

constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);

if(mp)

if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)

returnJNI_TRUE;

returnJNI_FALSE;

}

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

privatenativebooleantakeSnapShot(intnum, String file,intwidth,intheight); 和调用方法

publicbooleantakeSnapShot(String file,intwidth,intheight) {

returntakeSnapShot(0, file, width, height);

}

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

录制视频:

2014/03/26日更新开始

把patch文件放到/android/vlc中 使用命令patch -p1 < xxxx.patch  查出其中的失败的地方 手动修改

修改vlc-android/jni/libvlcjni.c

在文件末尾添加

jboolean Java_org_videolan_libvlc_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 */

constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);

if(mp)

if(libvlc_video_take_snapshot(mp, (int)number,psz_path , (int)width,(int)height)==0)

returnJNI_TRUE;

returnJNI_FALSE;

}

jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStart(JNIEnv *env, jobject thiz,jstring path)

{

jboolean isCopy;

libvlc_media_player_t *mp = getMediaPlayer(env, thiz);

/* Get C string */

constchar* psz_path = (*env)->GetStringUTFChars(env, path, &isCopy);

//const char* psz_filename=(*env)->GetStringUTFChars(env, filename, &isCopy);

if(mp)

if(libvlc_media_player_record_start(mp,psz_path)==0)

returnJNI_TRUE;

returnJNI_FALSE;

}

jboolean Java_org_videolan_libvlc_LibVLC_videoRecordStop(JNIEnv *env, jobject thiz)

{

jboolean isCopy;

libvlc_media_player_t *mp = getMediaPlayer(env, thiz);

/* Get C string */

if(mp)

if(libvlc_media_player_record_stop(mp)==0)

returnJNI_TRUE;

returnJNI_FALSE;

}

jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecording(JNIEnv *env, jobject thiz)

{

jboolean isCopy;

libvlc_media_player_t *mp = getMediaPlayer(env, thiz);

if(mp)

if(libvlc_media_player_is_recording(mp))

returnJNI_TRUE;

returnJNI_FALSE;

}

jboolean Java_org_videolan_libvlc_LibVLC_videoIsRecordable(JNIEnv *env, jobject thiz)

{

jboolean isCopy;

libvlc_media_player_t *mp = getMediaPlayer(env, thiz);

if(mp)

if(libvlc_media_player_is_recordable(mp))

returnJNI_TRUE;

returnJNI_FALSE;

}

jint Java_org_videolan_libvlc_LibVLC_getState(JNIEnv *env, jobject thiz)

{

libvlc_media_player_t *mp = getMediaPlayer(env, thiz);

if(mp){

libvlc_state_t state=libvlc_media_player_get_state(mp);

return(jint)state;

}

else

return-1;

}

2014/03/26日更新结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值