2012年5月15日 星期二

VLC (VideoLAN Client)編譯

當測試 IP Camera上的串流媒體時,需要一個能夠調校的用戶端程式,用以調整各種參數以進行實驗。鑒於VLC 是一個開放原始碼的專案,可以讓我在原始碼的層級進行很細節的調整,因此選擇了此程式作為測試使用。


下面紀錄 VLC 的編譯過程,

一、程式碼的部份可以使用 Git 下載
git clone git:\\git.videolan.org\vlc.git



二、Ubuntu環境編譯 (Linux 3.2.0-24-generic-pae #37-Ubuntu SMP)
安裝指引(INSTALL)寫得很簡單,執行 ./bootstrap, ./configure, make ,make install 就可以完成了。
實際安裝結果卻發現缺少許多函數庫,此錯誤的經驗摘錄如後:  
  1. 執行 ./bootstrap 會出現 libtoolize 錯誤,此時若直接執行 ./configure,當然會出現錯誤。
    configure.ac:419: error: m4_undefine: undefined macro:
    AC_DEPLIBS_CHECK_METHOD
    configure.ac:419: the top level
    autom4te: /usr/bin/m4 failed with exit status: 1
    aclocal: /usr/local/bin/autom4te failed with exit status: 1
  2. 此錯誤是因為缺少 libtool, 解法為 "sudo apt-get install libtool ",接著重新執行 ./bootstrap 便可以正確的產生 configure 檔案。
  3. 執行./configure ,此時又發生新的錯誤 configure: error: No package 'dbus-1' found, 此問題可以透過安裝  libdbus-1-dev解決。"sudo apt-get install libdbus-1-dev"。
  4. 但接著又會出現缺少某個函數庫的錯誤,看來這方法是有問題的,應該得換個方法才是。
正確的安裝方式應該是執行 "apt-get build-dep vlc",將相關的函數庫一次全部安裝。
安裝完成之後,後續步驟就跟INSTALL說明的一樣簡單囉
  • ./bootstrap 
  • ./configure 
  •  make (此時程式已經編譯完成,可以直接執行,位置是 vlc/bin/vlc)
  •  sudo make install

二、Windows 環境編譯 (https://wiki.videolan.org/Win32Compile/)
VideoLAN官方網站建議的方式是在 Linux 環境安裝 MinGW,利用cross compile的方式編譯 Windows 版本的執行檔,再將此執行檔複製到 Windows 系統下執行。
為了簡單起見,當然是直接使用官方的作法囉,步驟整理如下:
1. 首先安裝 Virtual Box,並在Virtual Box安裝Ubuntu,接著下載 minnow (注意:若要編譯最新版的 VLC,  Ubuntu 版本需要大於 14.04 才行)
  • apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 mingw-w64-tools
2.下載程式碼 
    $ git clone git://git.videolan.org/vlc.git 
3. 接著需要安裝下列 package,此部分可透過 "apt-get build-dep vlc" 完成。如果安裝過程有錯誤的話,可能是版本過舊。執行 "sudo  apt-get update" 之後在安裝 build-dep 即可
  • lua5.1
  • all autotools: libtool, automake, autoconf, autopoint, make, gettext
  • pkg-config
  • git
  • subversion
  • cmake, cvs if you want to rebuild contribs
  • zip [for creating .zip package], p7zip [for .7z package], nsis [for .exe auto-installer].  
4. 安裝第三方的library
  • $ mkdir -p contrib/win32
  • $ cd contrib/win32
  • $ ../bootstrap --host=i686-w64-mingw32 --build=x86_64-pc-linux-gnu
  • $ make prebuilt 
5. 前置作業完成之後,回到VLC的根目錄,執行
  • ./bootstrap  
  • mkdir win32 && cd win32 
  • ../extras/package/win32/configure.sh --host=i686-w64-mingw32  --build=x86_64-pc-linux-gnu
  • make
  • make package-win-common
若是編譯最新版本時,出現錯誤,建議參考官方說明文件。

掌握編譯VLC的方法,往後若測試串流媒體時發現不順暢的情況,就可以更改程式,加上log來幫助查找原因囉。


參考資料:
http://wiki.videolan.org/Developers_Corner