编译的环境是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日更新结束