티스토리 뷰

1. 서문

앞서 "불필요한 구성요소를 적재하지 않는 방법"을 통해

부팅시간 단축과 메모리 확보(내지 더 저용량에서의 구동)가 가능헀습니다.


앞에서 제시한 방법으로 한글자막을 지원하면서 동영상 구동이 가능한 마지노선(?)으로

약 76메가 정도의 메모리를 언급했으나 더 적은 메모리...

예를 들어 실제로 구성이 가능하면서 더 적은 조합인 64MB에서 구동 가능한 방법을 적겠습니다.


첫번째로 생각한 방법은 MoviX 동작 시 선택적으로 적재하는 부가적인 요소 외에

(이것은 이미 무조건 적재하지 않는 방법을 다뤘습니다.)

기본적인 요소들 중에서도 제거할 수 있는 것은 없는가 하는 것이었는데

실제 커널 정도를 제외하면 제거한다고 효과를 볼 수 없는 정도의 용량이었습니다.


그래서 달리 생각한 것이 더 저용량인 폰트파일을 선택하는 방법입니다.



2. 저용량 폰트 선택

앞서 예로 든 한글폰트 파일은 gulim.ttc로 용량은 약 12.8MB 정도입니다.

이보다 더 적은 크기의 한글폰트 파일을 선택하면 간단하게 해결됩니다.

(가장 단순하게 먼저 생각할 수 있는 방법임에도 불구하고 뒤늦게 이를 다루는 사정은

폰트를 다뤄본 경험 부족인지 한글폰트 파일은 모두 저만한 크기라 생각했던 것이죠.)

 

인터넷을 뒤져보면 더 저용량인 한글 폰트를 발견하실 수 있는데

모든 한글 폰트 파일이 자막을 표현할 수 있는 것은 아닌 것 같습니다.

 

예를 들 폰트파일은 '휴먼아미체'로 압축 해제 시 용량은 611KB 정도입니다.

(이 포스트의 수정 이전에 소개한 '송강체'는 한글 표현은 가능하나

알파벳과 숫자를 표현하지 못 하더군요. 이 포스트의 수정 이유입니다.)

 

 

3. 폰트 강제 로딩

먼저 할 일은 폰트를 강제로 로딩하도록 소스를 변경하는 일입니다.

대상 파일은 바로 앞의 포스트에서 언급한 rc.movix 파일입니다.

경로는 시디 내 [movix] 안에 있습니다.

 

수정이유는...

MoviX에서 기본적인 요소 로딩 시 사용되는 메모리 용량은 55MB 정도입니다.

64MB 메모리 사용 시라면 약 9MB 정도의 여유가 있는 셈이죠.

그런데 MoviX에서는 부팅 시에 폰트파일 로딩 전에

남은 메모리량을 검사하여 일정용량에 못 미치면 자동으로 로딩을 하지 않습니다.

(원본 소스 파일을 참고하면 약 19메가 정도를 기준으로 하는 것 같습니다.)

그러므로 강제로 로딩하도록 소스를 수정해줍니다.

혹은 그 기준 되는 용량을 일정수준 이하로 줄이는 것도 방법이 될 겁니다.


물론 이전 포스트에서 다뤘듯이 다른 선택적으로 로딩하는 부가적인 항목들 역시

로딩하지 않도록 소스수정하기를 권합니다. 자세한 내용은 앞선 포스트들을 참고하시고...


해당 파일에서 아래 부분이 수정할 대상입니다.

이전에 이 파일을 수정한 적이 없거나 혹은 앞선 포스트에서

주석처리로만 수정했다면 449 ~ 472 라인까지입니다.

만약 앞선 포스트에서 저와 똑같이 삭제하는 식으로 수정했다면

대략 302 ~ 325 라인 정도입니다.

---------------------------------------------------------------------------------------

#### 14th splash screen msg
if [ $bs = yes ] ;  then
   /usr/sbin/progress $text_x $text_y $text_box_dx $text_box_dy 0
   /usr/sbin/fbtruetype -x $text_x -y $text_y -t $text_color -s $text_size "Importing subtitles in RAM"
   echo "show 60000" > /proc/splash
fi
### Loading the subtitles character sets
rm -rf /root/.mplayer/font
if [ `getFreeRam` -gt 20000 ] || [ $MEDIA = hd ]; then
    echo "Loading MPlayer subtitles character sets in RAM..."
    $CP $CDROM/mplayer/mplayer-fonts/       /tmp/
    ln -s /tmp/mplayer-fonts/                 /root/.mplayer/
    ln -s /root/.mplayer/mplayer-fonts/FreeSerif.ttf /root/.mplayer/subfont.ttf
else
   echo "there isn't enough RAM for loading all possible character sets..."
   echo "you will get only the FreeSansBoldOblique.ttf set"
   sleep 1
   mkdir /tmp/mplayer-fonts/
   $CP $CDROM/mplayer/mplayer-fonts/FreeSansBoldOblique.ttf /tmp/mplayer-fonts/
   ln -s /tmp/mplayer-fonts/                   /root/.mplayer/
   ln -s /root/.mplayer/mplayer-fonts/FreeSansBoldOblique.ttf /root/.mplayer/subfont.ttf
fi

sleep 2

-----------------------------------------------------------


아래와 같이 주석처리(#)해서 몇 부분을 비활성화 시켰습니다.

----------------------------------------------------------------------------------------

#### 14th splash screen msg
if [ $bs = yes ] ;  then
   /usr/sbin/progress $text_x $text_y $text_box_dx $text_box_dy 0
   /usr/sbin/fbtruetype -x $text_x -y $text_y -t $text_color -s $text_size "Importing subtitles in RAM"
   echo "show 60000" > /proc/splash
fi
### Loading the subtitles character sets
rm -rf /root/.mplayer/font
# if [ `getFreeRam` -gt 20000 ] || [ $MEDIA = hd ]; then
    echo "Loading MPlayer subtitles character sets in RAM..."
    $CP $CDROM/mplayer/mplayer-fonts/       /tmp/
    ln -s /tmp/mplayer-fonts/                 /root/.mplayer/
    ln -s /root/.mplayer/mplayer-fonts/FreeSerif.ttf /root/.mplayer/subfont.ttf
# else
#   echo "there isn't enough RAM for loading all possible character sets..."
#   echo "you will get only the FreeSansBoldOblique.ttf set"
#   sleep 1
#   mkdir /tmp/mplayer-fonts/
#   $CP $CDROM/mplayer/mplayer-fonts/FreeSansBoldOblique.ttf /tmp/mplayer-fonts/
#   ln -s /tmp/mplayer-fonts/                   /root/.mplayer/
#   ln -s /root/.mplayer/mplayer-fonts/FreeSansBoldOblique.ttf /root/.mplayer/subfont.ttf
fi

sleep 1

----------------------------------------------------------------------------------------

 

※ sleep은 정확히 어떤 명령인지는 모르겠습니다.

아마 쓰레드 처리와 관련된 것이 아닌가 싶기도 하네요.

일단은 윗쪽의 sleep 1 부분은 주석처리하고 아래쪽의 sleep 2를 sleep 1으로 바꿨습니다.

 

이렇게 하면 남은 용량을 검사하지 않고 무조건 폰트를 로딩합니다.

물론 폰트 파일 크기가 남은 메모리보다 작아야 하고 폰트 파일 로딩 후에도

mplayer 구동을 위한 최소한의 메모리가 남아야겠죠.

 

 

4. 폰트파일추가

MoviX 관련 첫번째 포스트에 설명한 바와 같이

hmami.ttf를 시디의 [mplayer]-[mplayer-fonts] 경로에 넣어줍니다.

(64MB에서 구동을 원한다면 해당경로 내 다른 폰트 파일은 모두 삭제하는 것이 좋습니다.)

 

부팅과 동시에 자동로딩을 원한다면 앞선 포스트에서 설명했듯이

시디 내의 [movix] 경로 내의 movix.pl 파일을 수정하면 됩니다.

 

$fset = "hmami.ttf"

$fcode = "cp949"


자세한 내용은 이 카테고리의 2번째 포스트를 참고하시기 바랍니다.

hmami.ttf 는 '휴먼아미체'의 파일명입니다. 변경가능하니 편한대로 하시길...



5. 동작

새롭게 세팅한 시디로 동작해보았습니다.

아래 화면은 이전 포스트처럼 부팅 직후 사용 중인 메모리를 확인해 본 것입니다.


사용자 삽입 이미지
 

부팅 완료 후 여유 메모리가 9720KB (약 9.5MB) 정도임을 알 수 있습니다.

이 정도면 재생에 큰 지장은 없을 것이라 보입니다.


 
사용자 삽입 이미지

동영상 재생 중 화면입니다.

아주 잘 돌아갑니다. 위 자막이 '휴먼아미체'입니다.
(화면은 Ally McBeal Season 1 Episode 8 의 한 장면입니다. --; Mr.비스켓...)
동영상의 퀄러티에 따라 소모 메모리량이 얼마나 차이가 날런지 모르나
보유 중인 다른 동영상들도 튕김없이 잘 재생이 되었습니다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크