Create TOC

2016년 10월 11일

Raspbian/Tvheadend 빌드

tvheadend에 h264_omx 코덱을 사용할 수 있게 빌드하는 방법을 기술한다.

빌드 환경 구성

$ apt-get install git cmake build-essential debhelper pkg-config fakeroot libavahi-client-dev libssl-dev libcurl4-gnutls-dev liburiparser-dev  libogg-dev libtheora-dev libvorbis-dev

빌드

$ git clone https://github.com/tvheadend/tvheadend.git
$ cd tvheadend

소스를 받고 빌드 전 아래와 같이 Makefile.ffmpeg 파일을 수정한다.

diff --git a/Makefile.ffmpeg b/Makefile.ffmpeg
index e07ef2d..ff99604 100644
--- a/Makefile.ffmpeg
+++ b/Makefile.ffmpeg
@@ -573,6 +573,9 @@ $(LIB_ROOT)/$(FFMPEG)/.tvh_build: \
                --enable-gpl \
                --extra-cflags="$(ECFLAGS)" \
                --extra-libs="$(ELIBS)" \
+               --enable-omx-rpi --enable-mmal \
+               --enable-decoder="h264_mmal" \
+               --enable-encoder="h264_omx" \
                --pkg-config="$(ROOTDIR)/support/pkg-config.ffmpeg" \
                $(foreach component,$(COMPONENTS),--enable-$(component)) \
                $(foreach extlib,$(EXTLIBS),--enable-$(extlib)) \

h264_omx가 profile을 지원하지 않기 때문에 transcoding.c파일도 수정해야 한다.

diff --git a/src/plumbing/transcoding.c b/src/plumbing/transcoding.c
index 630bb62..ffb9657 100644
--- a/src/plumbing/transcoding.c
+++ b/src/plumbing/transcoding.c
@@ -1347,8 +1347,11 @@ transcoder_stream_video(transcoder_t *t, transcoder_stream_t *ts, th_pkt_t *pkt)
       av_dict_set(&opts, "preset",  t->t_props.tp_vcodec_preset, 0);
       tvhinfo(LS_TRANSCODE, "%04X: Using preset %s", shortid(t), t->t_props.tp_vcodec_preset);

-      // All modern devices should support "high" profile
-      av_dict_set(&opts, "profile", "high", 0);
+      if (0 != strcmp(ocodec->name, "h264_omx"))
+         {
+        // All modern devices should support "high" profile
+        av_dict_set(&opts, "profile", "high", 0);
+      }

       if (t->t_props.tp_vbitrate < 64) {
         // encode with specified quality and optimize for low latency

Makefile.ffmpeg, transcoding.c 파일 수정이 끝나면 아래와 같은 방법으로 빌드한다.

$ AUTOBUILD_CONFIGURE_EXTRA=--enable-ffmpeg_static\ --disable-libx264_static\ --disable-libx265\ --disable-libvpx\ --disable-libtheora_static\ --disable-libvorbis_static\ --disable-bintray_cache ./Autobuild.sh

빌드가 완료되면 아래와 같이 패키지를 설치한다.

$ cd ..
$ sudo dpkg -i tvheadend_4.1-2261~ga9bc3bc-dirty_armhf.deb

Raspbian/ffmpeg 빌드

raspiberry pi 3에서 사용할 ffmpeg를 빌드하는 방법을 설명한다.

빌드 환경 구성

패키지 설치

$ apt-get install git cmake build-essential libomxil-bellagio-dev libx264-dev libass-dev libfreetype6-dev libmp3lame-dev

MMAL 설치

$ git clone https://github.com/raspberrypi/userland.git
$ cd userland
$ ./buildme

빌드된 파일은 /opt/vc에 설치된다.

빌드

$ sudo apt-get install  libx264-dev libass-dev libfreetype6-dev libmp3lame-dev
$ git clone git://source.ffmpeg.org/ffmpeg.git
$ cd ffmpeg
$ ./configure --enable-libfreetype --enable-gpl --enable-nonfree --enable-libx264 --enable-libfaac --enable-libmp3lame --bindir=/usr/local/bin --enable-static --enable-omx-rpi --enable-mmal
$ make -j4
$ sudo make install

빌드가 완료되면 아래와 같이 실행해서 codec을 확인해본다.

$ ffmpeg -codecs | grep "\(mmal\|omx\)"
ffmpeg version N-81883-gbeb877b Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.9.2 (Raspbian 4.9.2-10)
  configuration: --enable-libfreetype --enable-gpl --enable-nonfree --enable-libx264 --enable-libass --enable-libmp3lame --bindir=/usr/local/bin --enable-static --enable-omx-rpi --enable-mmal
  libavutil      55. 32.100 / 55. 32.100
  libavcodec     57. 60.101 / 57. 60.101
  libavformat    57. 51.102 / 57. 51.102
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 63.100 /  6. 63.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  2.100 /  2.  2.100
  libpostproc    54.  0.100 / 54.  0.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_mmal ) (encoders: libx264 libx264rgb h264_omx )
 DEV.L. mpeg2video           MPEG-2 video (decoders: mpeg2video mpegvideo mpeg2_mmal )
 DEV.L. mpeg4                MPEG-4 part 2 (decoders: mpeg4 mpeg4_mmal )
 D.V.L. vc1                  SMPTE VC-1 (decoders: vc1 vc1_mmal )

Vim 8.0/Win32에서 vim-signify 오류 수정

한글 Windows 7 환경에서 Vim 8.0 x64 빌드를 사용할 경우 vim-signify 플러그인에서 오류가 발생한다.

lang mes C를 해도 메시지가 한글로 표시되기 때문에 나타나는 문제이다. 아래와 같이 소스를 수정해주면 문제가 해결된다.

diff --git a/autoload/sy/fold.vim b/autoload/sy/fold.vim
index 35028d8..a51ef54 100644
--- a/autoload/sy/fold.vim
+++ b/autoload/sy/fold.vim
@@ -100,7 +100,11 @@ function! s:get_lines() abort

   let lines = []
   for line in split(signlist, '\n')[2:]
-    call insert(lines, matchlist(line, '\v^\s+line\=(\d+)')[1], 0)
+    let tokens = matchlist(line, '\v^\s+line\=(\d+)')
+    if 0 == len(tokens)
+      let tokens = matchlist(line, '\v^\s+줄\=(\d+)')
+    endif
+    call insert(lines, tokens[1], 0)
   endfor

   return reverse(lines)
diff --git a/autoload/sy/sign.vim b/autoload/sy/sign.vim
index 6af68ff..2cd818b 100644
--- a/autoload/sy/sign.vim
+++ b/autoload/sy/sign.vim
@@ -30,9 +30,11 @@ function! sy#sign#get_current_signs() abort
     silent! execute 'sign place buffer='. b:sy.buffer
   redir END
   silent! execute 'language message' lang
-
   for signline in split(signlist, '\n')[2:]
     let tokens = matchlist(signline, '\v^\s+line\=(\d+)\s+id\=(\d+)\s+name\=(.*)$')
+    if 0 == len(tokens)
+      let tokens = matchlist(signline, '\v^\s+줄\=(\d+)\s+id\=(\d+)\s+이름\=(.*)$')
+    endif
     let line   = str2nr(tokens[1])
     let id     = str2nr(tokens[2])
     let type   = tokens[3]

수정 후 fold.vimcp949, sign.vimutf-8로 저장해야 한다.

Vim/Win32 메뉴 표시 언어를 영어로 고정

아래와 같은 내용을 _vimrc에 추가한다.


if has('win32')
 lan mes en_US
 if has('menu') && has('multi_lang') && has('gui_running')
  set langmenu=en_US
  source $ViMRUNTIME/delmenu.vim
  source $ViMRUNTIME/menu.vim
 endif
endif