vlc 2.5.5 compile
https://github.com/videolan/vlc-android/releases
에서 버전 다운받아서 해도됨 버전별로 받아서 압축풀때 폴더이름은 vlc-android[버전] 이렇게 되는데 vlc-android 으로 변경 해주고 컴파일 해야함
https://developer.android.com/ndk/downloads/older_releases#ndk-15c-downloads
ndk 버전별로 받아두고 해야함 버전마다 빌드가 되는 버전이 따로 있음
https://wiki.videolan.org/AndroidCompile/
ubuntu 16.04 LTS 설치 (64bit)
setting -> detail -> software Update 해서 라이브러리들 최신 버전 유지
터미널키고
$ sudo apt-get update
$ sudo apt-get install git libtool build-essential pkg-config autoconf
sudo apt-get install automake ant autopoint cmake build-essential libtool \ patch pkg-config protobuf-compiler ragel subversion unzip git \ openjdk-8-jre openjdk-8-jdk
sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get install zlib1g:i386 libstdc++6:i386 libc6:i386
sudo apt-get install ia32-libs
$ sudo apt-get install curl
git clone -b 2.5.5 https://code.videolan.org/videolan/vlc-android.git
SDK & Android Studio
- Go to Android SDK/IDE page.
- Android Studio is recommended, but not mandatory!
- Download the command-line tools
mkdir android-sdk cd android-sdk; unzip tools_r25.2.3-linux.zip ./tools/bin/sdkmanager --update
Android NDK
- Check that the SDK installation is correct.
- Go to the Android NDK page and download the NDK r14b for Linux.
- Decompress it to install
export ANDROID_SDK=/path/to/android-sdk
export ANDROID_NDK=/path/to/android-ndk
./compile.sh
릴리즈
sh ./compile.sh -l -a x86 -r
sh ./compile.sh -l -a armeabi-v7a -r
에러나도 다시시도하면 넘어가는 경우가 많음...
밑의 protobuf 에러 날때 protoc 설치
make: *** [.protobuf] Error 2
contribs: make failed
1. apt로 설치...
sudo apt-get install libprotobuf-dev protobuf-compiler
2. 직접 다운 설치
protoc-3.2.0 install
# Make sure you grab the latest version
curl -OL https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip
# Unzip
unzip protoc-3.2.0-linux-x86_64.zip -d protoc3
# Move protoc to /usr/local/bin/
sudo mv protoc3/bin/* /usr/local/bin/
# Move protoc3/include to /usr/local/include/
sudo mv protoc3/include/* /usr/local/include/
---요기 까지만 하면됨... 밑에껀 안해도 됨 s
# Optional: change owner
sudo chwon [user] /usr/local/bin/protoc
sudo chwon -R [user] /usr/local/include/google
vlc 엔진 수정 사항
========코덱정보 android 네이티브에 전달 ========
vlc-android/libvlc/jni/libvlcjni.c 수정
I 하나가 뒤에 더붙어야함. Integer를 뜻함
GET_ID(GetStaticMethodID,
fields.Media.createAudioTrackFromNativeID,
fields.Media.clazz,
"createAudioTrackFromNative",
"(Ljava/lang/String;Ljava/lang/String;IIIILjava/lang/String;Ljava/lang/String;III)"
"Lorg/videolan/libvlc/Media$Track;");
GET_ID(GetStaticMethodID,
fields.Media.createVideoTrackFromNativeID,
fields.Media.clazz,
"createVideoTrackFromNative",
"(Ljava/lang/String;Ljava/lang/String;IIIILjava/lang/String;Ljava/lang/String;IIIIIIIII)"
"Lorg/videolan/libvlc/Media$Track;");
vlc-android/libvlc/jni/libvlcjni-media.c 수정
media_track_to_object 함수 수정
맨뒤에 (jint)p_tracks->i_codec 전달자 추가. codec정보를 보내는것임
case libvlc_track_audio:
jobj = (*env)->CallStaticObjectMethod(env, fields.Media.clazz,
fields.Media.createAudioTrackFromNativeID,
jcodec,
joriginalCodec,
(jint)p_tracks->i_id,
(jint)p_tracks->i_profile,
(jint)p_tracks->i_level,
(jint)p_tracks->i_bitrate,
jlanguage,
jdescription,
(jint)p_tracks->audio->i_channels,
(jint)p_tracks->audio->i_rate,
(jint)p_tracks->i_codec);
break;
case libvlc_track_video:
jobj = (*env)->CallStaticObjectMethod(env, fields.Media.clazz,
fields.Media.createVideoTrackFromNativeID,
jcodec,
joriginalCodec,
(jint)p_tracks->i_id,
(jint)p_tracks->i_profile,
(jint)p_tracks->i_level,
(jint)p_tracks->i_bitrate,
jlanguage,
jdescription,
(jint)p_tracks->video->i_height,
(jint)p_tracks->video->i_width,
(jint)p_tracks->video->i_sar_num,
(jint)p_tracks->video->i_sar_den,
(jint)p_tracks->video->i_frame_rate_num,
(jint)p_tracks->video->i_frame_rate_den,
(jint)p_tracks->video->i_orientation,
(jint)p_tracks->video->i_projection,
(jint)p_tracks->i_codec);
break;======== 메타데이터에서 String 한글깨져서 엔진단에서 죽어버리는 오류 수정법 ========
바이트 버퍼 그대로 전달을 받자
vlc-android/libvlc/jni/libvlcjni-media.c 에 함수 추가
jbyteArray
Java_org_videolan_libvlc_Media_nativeGetMetaByte(JNIEnv *env, jobject thiz, jint id)
{
vlcjni_object *p_obj = VLCJniObject_getInstance(env, thiz);
jbyteArray jmeta = NULL;
if (!p_obj)
return NULL;
if (id >= 0 && id < META_MAX) {
char *psz_media = libvlc_media_get_meta(p_obj->u.p_m, id);
if (psz_media) {
int len = strlen(psz_media);
//int n=0;
//while(*psz_media++){
// n++;
//}
//if(n<=0)return NULL;
jbyteArray jmetazz = (*env)->NewByteArray(env, len);
(*env)->SetByteArrayRegion (env, jmetazz, 0, len, (jbyte*)psz_media);
return jmetazz;
}
}
return jmeta;
}
android org.videolan.libvlc.Media.java 에
private native byte[] nativeGetMetaByte(int id);//추가
public String getMeta(int id){
...........
String nativeString = new String(nativeGetMetaByte(id), "UTF-8");
...........
}
===== FTP 언어셋 UTF-8로 강제 시키기 ===
vlc/modules/access/ftp.c 를 수정해야함 그러나 빌드시에 해당 파일이 새로운파일로 대체 되기 때문에
그에 맞추어 파일을 빌드 완료 되기전에 빠르게 수정해야함 [새로운 파일로 대체 안되는 방법이 있을것 같지만 찾지 못함..ㅠ]
static int Connect( vlc_object_t *p_access, access_sys_t *p_sys, const char *path ){
.......
///////// 추가 //////////
if( ftp_SendCommand( p_access, p_sys, "OPTS UTF8 ON" ) < 0 || ftp_RecvCommand( p_access, p_sys, NULL, NULL ) != 2 ) { msg_Err( p_access, "cannot set ftp UTF8 mode" ); goto error; }
///////// 추가끝 //////////
return 0;
}