desc


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

  1. Go to Android SDK/IDE page.
  2. Android Studio is recommended, but not mandatory!
  3. Download the command-line tools
mkdir android-sdk
cd android-sdk; unzip tools_r25.2.3-linux.zip
./tools/bin/sdkmanager --update

Android NDK

  1. Check that the SDK installation is correct.
  2. Go to the Android NDK page and download the NDK r14b for Linux.
  3. 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;

}











+ Recent posts