본문 바로가기
Dev.Mobile/Android

VLC for Android 한글 자막 표시되지 않는 문제 수정 빌드

by Devkin 2015. 4. 1.

Dolby AC3 오디오 코덱을 지원하고 광고없는 거의 유일한 무료 동영상 플레이어인 VLC For Android 의 가장 큰 단점은 한글 자막이 제대로 표시되지 않는 것. PC 용 VLC 에서도 한글 자막이 ㅁㅁㅁ 처럼 표시되는데, 이는 자막 글꼴이 디폴트로 영문 폰트인 Arial로 지정되어 있어 인코딩 옵션과 상관없이 한글을 표시하지 못하는 것이다. 환경설정에서 자막 글꼴을 한글 폰트인 굴림, 나눔고딕등으로 변경하면 정상적으로 한글 자막 표시가 가능하다.

VLC For Android도 이와 동일한 문제로 자막 글꼴을 디폴트로 영문 폰트인 DroidSans-Bold를 사용하고 있다. 하지만, 글꼴 변경 옵션이 없기 때문에 앱내에서 한글 자막을 표시할 수 있는 방법은 없다.

루팅된 디바이스에서는 간단히 한글 폰트인 /system/fonts/NanumGothic.ttf파일을 복사하여 /system/fonts/DroidSans-Bold.ttf로 이름을 변경하여 사용할 수 있으나, 루팅이 선행되어야 하고 DroidSans-Bold를 사용하는 다른 앱들에서도 Nanum Gothic 폰트로 보여지고, Bold 처리가 제대로 되지 않을 수도 있는 문제가 있다.

적절한 개발환경이 갖추어져 있다면, Source code 에 명시된 DroidSans-Bold.ttfNanumGothic.ttf로 변경하고 빌드하여 사용.

HOW TO BUILD

Windows 에서 빌드는 공식적으로는 지원하지 않기 때문에 Mac 또는 Linux 를 사용해야 한다.

사용 개발환경

Getting Source Code

$ git clone git://git.videolan.org/vlc-ports/android.git

개발 시점에 cloning하여 사용한 소스 코드는 1.1.3-git
참고로, VideoLan 사이트에서 버젼별로 분류된 소스 코드를 다운로드 하여 사용할 경우, libvlc 컴파일 후에 다음과 같이 git repo 참조 에러가 발생하고 빌드가 중지되기 때문에 bash script내용을 수정해가면서 빌드할게 아니라면, git를 통해 소스코드 다운로드.

fatal: Not a git repository (or any of the parent directories): .git

FAILURE: Build failed with an exception.

Setting Build Environment

  1. Android Studio (또는, Stand-alone SDK) Install.
  2. NDK Install
  3. clone한 소스의 compile.sh script 실행 이전에, 설치한 Android SDK/NDK 경로를 지정해 주어야 한다. Android Studio 설치를 통한 SDK Path는 다음과 같고, 편의상 NDK 도 동일한 경로에 설치하였다.
    SDK : /Users/{USER_NAME}/Library/Android/sdk
    NDK : /Users/{USER_NAME}/Library/Android/ndk
$ export ANDROID_SDK=/Users/metalkin/Library/Android/sdk
$ export ANDROID_NDK=/Users/metalkin/Library/Android/ndk

Build

옵션없이 Compile하게 되면, 디폴트로 armeabi-v7a ARCH에 debug 모드로 apk를 생성한다.

$ ./compile.sh

사용된 디바이스는 x86 ARCH이고, Release로 빌드하면 옵션은 다음과 같이 사용.

$ ./compile.sh -a x86 -r

run 옵션을 추가하면, 빌드 완료시 adb를 통해 apk를 설치 및 실행한다.

$ ./compile.sh -a x86 -r run

Troubleshooting

Mac OS X에서는 compile.sh script에 문제가 하나 있는데, gradle을 다운로드하고 unzip과정에서 다음과 같은 에러가 발생한다.

Archive:  gradle-2.2.1-all.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of gradle-2.2.1-all.zip or
        gradle-2.2.1-all.zip.zip, and cannot find gradle-2.2.1-all.zip.ZIP, period.

이는 script에 지정된 GRADLE_URL(http://services.gradle.org/distributions/gradle-2.2.1-all.zip)이 301 moved permanently로 redirect 하는데, 변경된 url로 redirect 하지 못하고 리턴된 HTML을 그대로 다운로드하여 저장하기 때문에 발생하는 에러로, curl에서 redirect 지원을 위해서는 -L옵션을 사용해야 한다. Line:81을 다음과 같이 수정.

wget ${GRADLE_URL} 2>/dev/null || curl -O -L ${GRADLE_URL}

참고로, wget을 사용하는 Linux나 Mac에 따로 wget을 설치한 환경이라면 위 이슈는 해당되지 않는다.

Result

빌드 성공 시, android/vlc-android/build/outputs/apk 폴더에 apk가 생성된다.

Modify Source code

빌드 시, VLC native source code를 다운로드하는데 이 VLC source에서 비디오 화면위에 텍스트를 뿌리는 text_renderer 모듈의 수정이 필요하다.
Path : android/vlc/modules/text_renderer/
text rendering에 오픈 소스인 freetype 을 사용하는데, 플랫폼 별 디폴트 폰트가 platform_fonts.h에 정의되어 있다.

// android/vlc/modules/text_renderer/platform_fonts.h

#elif defined( __ANDROID__ )
//# define SYSTEM_DEFAULT_FONT_FILE "/system/fonts/DroidSans-Bold.ttf"
//# define SYSTEM_DEFAULT_FAMILY "Droid Sans Bold"
# define SYSTEM_DEFAULT_FONT_FILE "/system/fonts/NanumGothic.ttf"
# define SYSTEM_DEFAULT_FAMILY "Nanum Gothic"
# define SYSTEM_DEFAULT_MONOSPACE_FONT_FILE "/system/fonts/DroidSansMono.ttf"
# define SYSTEM_DEFAULT_MONOSPACE_FAMILY "Droid Sans Mono"

한글 자막 표시를 위해서는 DroidSans-Bold.ttfNanumGothic.ttf로 수정후 다시 빌드.

ToDo :

범용성을 위해 설정화면에 폰트 선택 메뉴 추가. 다음은 개발 시 참고 Class

PreferencesActivity.java - onSharedPreferenceChanged()
VLCInstance.java - updateLibVlcSettings()
LibVLC.java - init()
libvlcjni.c - nativeInit()

Result

Download Link

VLC-android-1.1.3-git-ARMv7-metalkin.apk
VLC-android-1.1.3-git-x86-metalkin.apk

Reference

반응형

댓글