使用freevo建置窮人版MMC/HTC - Howto
轉載自 http://eason.be/test/freevo-howto.htm
2005/12/6, v0.1, By Eason Lee
版權沒有,如需轉載請注明來源。
前言
寫這篇Howto主要目的是為了方便以後重新安裝時能夠快速入手,除此之外也期望能夠給有此需求的同好一些幫忙。
為什麼選用 freevo 呢?除了 freevo 之外,應該還有其他的軟體可以達成MMC(MultiMedia Center?)/HTC(Home Theatre Center)的功能吧,當然有的,例如鼎鼎大名且功能強大的 MythTV,不過因為我個人的希望不需透過X11,所以我選擇使用Freevo,當然我也沒去與MythTV做比較,有興趣的同好也可以試試MythTV。
行前準備
軟體需求: Linux, freevo, mplayer, 其他utilities
硬體需求: 端看個人預算與需求,基本配備建議CPU Pentium/AMD 1GHz以上,RAM 256MB以上,VGA 32MB以上,HD當然越大越好,DVD一台或多台,希望享受多聲道音效震撼就準備好一點的音效卡和喇叭,如果要看TV和錄影還需要TV-tuner和Video Capture Device。
以上需求僅供參考,截至目前我安裝的環境如下
軟體: Gentoo 2005.1, freevo v1.5.3, mplayer v1.0_pre7-r1...... 硬體: 老姐的舊NB (ASUS Z2400 series with PIII 1G, 384MB, build-in VGA ProSavage PM133 memory shared)
需求: 不用X11改用FrameBuffer
安裝
安裝您選擇的Distribution,以Gentoo為例
我的環境選用Gentoo,可能是最近和Ubuntu/Debian犯衝吧,怎麼裝都失敗,所以改換安裝過程有點久的Gentoo,如果有同好想試試Ubuntu/Debian或其他Distribution也同樣可行。安裝Gentoo已經有很好的 中文安裝導引,所以請自行參考一步一步來。
其中在build kernel時,我先前已說過不使用X11改用FreamBuffer,所以記得要在kernel打開以下的選項才能讓你的kernel支援FrameBuffer。
for 2.6.x kernel
-
Device Drivers -> Graphics support -> [*] Support for frame buffer devices <*> VESA VGA graphics support Console display driver support -> [*] Video mode selection support <*> Framebuffer Console support
在這邊要特別注意,在我設定的過程中發現,如果有使用bootsplash的話,Logo configuration記得不能選。還有如果在Graphics support有看到支援您正在使用的VGA卡的FrameBuffer Device,例如我使用的S3 Savage support,記得要選成M或不選,不然您在boot的時候會跳過vesafb而啟用savagefb,這樣您在grub或lilo設的mtrr,ywrap會失效,所以會看不到bootsplash的效果,這似乎是因為mtrr,ywrap只適用於vesafb,這部份還尚需釐清。不過,在我測試的過程中,使用vesafb無法啟用硬體加速,所以在用mplayer播影片時,CPU使用率會呈現趨近100%,而且load average會飆高到7.x。但如果我使用savagefb播放,CPU使用率只會呈現約60%,而load average只有0.x。所以如果自認硬體配備非常好的話,可以考慮使用支援bootsplash的vesafb。
那要怎麼辨別您目前用的FramBuffer Device是哪一個?可以用dfbinfo或fbset確認,例如我正在使用savagefb,dfbinfo出現的訊息如下
-
(*) DirectFB/Genefx: MMX detected and enabled (*) DirectFB/Graphics: S3 Savage4 Series 0.3 (convergence integrated media GmbH) (*) DirectFB/Core/WM: Default 0.2 (Convergence GmbH)
fbset -i 出現的訊息如下
-
Frame buffer device information: Name : TwisterP Address : 0xd8000000 Size : 33423360 Type : PACKED PIXELS Visual : PSEUDOCOLOR XPanStep : 2 YPanStep : 1 YWrapStep : 0 LineLength : 800 MMIO Address: 0xd7000000 MMIO Size : 524288 Accelerator : Unknown (138)
但是如果是用vesafb,則dfbinfo會出現
-
(*) DirectFB/Genefx: MMX detected and enabled (*) DirectFB/Graphics: MMX Software Rasterizer 0.6 (convergence integrated media GmbH) (*) DirectFB/Core/WM: Default 0.2 (Convergence GmbH)
而fbset -i的訊息如下
-
Frame buffer device information: Name : VESA VGA Address : 0xd8000000 Size : 15360000 Type : PACKED PIXELS Visual : TRUECOLOR XPanStep : 0 YPanStep : 1 YWrapStep : 1 LineLength : 2048 Accelerator : No
安裝完Gentoo且kernel已經支援FrameBuffer後,再來需要裝一些其他包含freevo的packages,在此先分享我的make.conf內容
-
# for common CFLAGS="-O3 -pipe -march=pentium3 -fomit-frame-pointer -mfpmath=sse,387 -msse -mmmx -funroll-loops -frerun-cse-after-loop -frerun-loop-opt -falign-functions=4 -fforce-mem -fforce-addr -finline-functions -finline-limit=400 -fmove-all-movables -freduce-all-givs -freorder-blocks -freorder-functions -frename-registers -ftracer" # for stage 1,2 #CFLAGS="-O2 -pipe -march=pentium3" CXXFLAGS="${CFLAGS}" LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s" MAKEOPTS="-j2" USE="pcmcia libcaca theora network aalib ggi svga djbfft dvd lirc ffmpeg vcd flac real dts a52 ieee1394 win32codecs fbcon directfb bash-completion mmxext live matroska sms irmc bluetooth avi threads nptl nptlonly aac alsa cjk esd exif iconv mp3 mmx mmap sse unicode xvid zh_TW -arts -cups -gnome -xmms -ipv6 -gstreamer -X -gtk -opengl -qt -xv" VIDEO_CARDS="savage" LINGUAS="zh_TW" #PORTDIR_OVERLAY="/usr/local/got" SYNC="rsync://ftp.isu.edu.tw/gentoo-portage/" GENTOO_MIRRORS="ftp://linux.ntcu.net/dists/gentoo"
我在USE內容已經加入-X -gtk -gnome -qt -opengl -xv代表所有的packages基本上都不會用到Xlibs,並且我開啟了許多就我所知的codecs support,例如ffmpeg, win32codecs, real等。另外還加入了fbcon和directfb,代表我需使用FrameBuffer和DirectFB,其他不足的部分請依個人需求加入make.conf或設定在/etc/portage/package.*。
安裝 freevo
設定完make.conf後直接輸入emerge sync;emerge -pv freevo,先瞭解會裝哪些東西,確認沒問題後就直接emerge freevo,然後出門上班上課去,回家再看結果吧。
在我安裝的過程中發現media-video/mplayer會幫你裝上realplayer和gtk+,不過現在portage內的mplayer如果把real拿掉會變成mplayer無法支援real的codecs,即使/usr/lib/win32已經link到/usr/lib/real還是一樣會出現找不到適當codecs的錯誤,因為你下mplayer -vfm help會看不到realvid,要看的到realvid才不會出現錯誤,例如我出現的訊息如下
-
vfm: info: (comment) null Null video decoder (no decoding) ffmpeg FFmpeg's libavcodec codec family (native codecs (http://ffmpeg.sf.net/)) theora Theora/VP3 (Theora project's VP3 codec) dshow DirectShow video codecs (win32 codecs) dmo DMO video codecs (win32 codecs) vfw Win32/VfW video codecs (win32 codecs) vfwex Win32/VfWex video codecs (win32 codecs) lzo LZO compressed Video (based on liblzo: http://www.oberhumer.com/opensource/lzo/) raw RAW Uncompressed Video (uncompressed) hmblck Hauppauge Macroblock/NV12/NV21 Decoder (uncompressed) nuv NuppelVideo decoder (native codecs) mpng PNG Images decoder (uses libpng, 8bpp modes not supported yet) ijpg JPEG Images decoder (uses Indipended JPEG Group's jpeglib) mtga TGA Images decoder (only 24bpp and 32bpp RGB targa files support so far) sgi SGI Image decoder () libmpeg2 MPEG 1/2 Video decoder libmpeg2-v0.4.0b (native) mpegpes MPEG 1/2 Video passthrough (for hw decoders) realvid RealVideo decoder (binary real video codecs) xvid XviD 1.0 decoder (No Comment) qtvideo Quicktime Video decoder (win32)
另外在裝到dev-python/pygame時會發生找不到X11/Xlib.h的錯誤,目前也找不到解決的方法只好勉強emerge x11-base/xorg-x11,然後pygame就沒問題了。freevo裝完後再把一些其他的packages裝一下吧,例如alsa-utils或其他你需要的等等。
基本設定
freevo的設定檔共有3個,/etc/freevo/freevo.conf, /usr/share/freevo/freevo_config.py, ~/.freevo/local_config.py,不過/usr/share/freevo/freevo_config.py不建議去修改,因為這算是~/.freevo/local_config.py的全域設定,所以要改/usr/share/freevo/freevo_config.py內的參數請修改~/.freevo/local_config.py。
freevo.conf
首先執行freevo setup來產生/etc/freevo/freevo.conf,產生完後記得看一下他寫進去的那些東西,基本上都可以修改,以下是我的/etc/freevo/freevo.conf內容
-
cdparanoia = /usr/bin/cdparanoia chanlist = us-cable display = fbdev2 fbxine = /usr/bin/fbxine flac = /usr/bin/flac geometry = 720x480 jpegtran = /usr/bin/jpegtran lame = /usr/bin/lame lsdvd = /usr/bin/lsdvd mencoder = /usr/bin/mencoder mplayer = /usr/bin/mplayer renice = /usr/bin/renice setterm = /usr/bin/setterm tv = ntsc version = 2.1
比較需要注意的地方是display, geometry, tv這三個參數,tv這最簡單,在台灣的就設成ntsc。再來geometry代表的是你進入freevo後的顯示解析度,最後是display,這個表示你video輸出使用的driver,也就是mplayer -vo可使用的driver,在我的系統我試過fbdev/fbdev2, directfb, vesa都沒問題。建議使用fbdev2,因為在我測試的結果,同樣的設定fbdev無法顯示中文字幕,而directfb的畫質感覺沒fbdev2來的好。至於fbdev和directfb有什麼差別我也不是很瞭解,我只知道fbdev/fbdev2是kernel的native module,不過並不支援硬體scaling?這部份不知有哪會長輩可以糾正小弟。
local_config.py
再來是~/.freevo/local_config.py,先cp /etc/freevo/local_conf.py ~/.freevo/local_config.py,再來參考/usr/share/freevo/freevo_config.py可改的參數來修改。這部份因為太多參數可以改,所以我僅列出我有修改的部份,其他詳細的參數設定說明請上 freevo wiki 查吧。
先列出我改過的部份
-
ROM_DRIVES = [ ('/media/cdrom', '/dev/hdb', 'DVD/CD ROM Drive') ] ROM_SPEED = 8 OVERLAY_DIR = os.path.join(FREEVO_CACHEDIR, 'vfs') MEDIAINFO_USE_MEMORY = 1 CACHE_IMAGES = 1 plugin.remove('tv.generic_record') plugin.remove('tv.view_favorites') plugin.remove('tv.manual_record') DIRECTORY_USE_MEDIAID_TAG_NAMES = 0 VIDEO_ITEMS = [ ('Movies', '/mmc/video/Movies'), ('Animations', '/mmc/video/Animations') ] VIDEO_MPLAYER_SUFFIX = [ 'avi', 'mpg', 'mpeg', 'wmv', 'bin', 'rm', 'rmvb', 'divx', 'ogm', 'vob', 'asf', 'm2v', 'm2p', 'mp4', 'viv', 'nuv', 'mov', 'iso', 'nsv', 'mkv' ] VIDEO_PREFERED_PLAYER = 'mplayer' AUDIO_ITEMS = [ ('MP3', '/mmc/audio/') ] AUDIO_SUFFIX = [ 'mp3', 'ogg', 'wav','m4a', 'wma', 'aac', 'flac', 'mka' ] AUDIO_PREFERED_PLAYER = 'mplayer' if CONF.display in ( 'directfb', 'dfbmga' ): MPLAYER_ARGS_DEF = ('-vfm ffmpeg,realvid -autosync 100 -nolirc -autoq 100 -vop scale=%s:-2 -fs -nojoystick -quiet ') % CONF.width else: MPLAYER_ARGS_DEF = ('-vfm ffmpeg,realvid -autosync 100 -nolirc -autoq 100 -vop scale=%s:-2 -fs -nojoystick -quiet ') % CONF.width
另外有注意到CACHE_IMAGES這參數吧,沒錯,可以預先產生cache來加快瀏覽目錄檔案的速度,所以要進入freevo可先執行freevo cache,就會幫你產生cache到OVERLAY_DIR 設定的目錄。不過在使用freevo cache時我發生了無法轉碼的錯誤,原因是有些real檔案內含的metadata包含GB2312或BIG5,不過我將dev-python/mmpython更新到0.4.9後就沒這問題發生,可能0.4.9已修正了unicode問題。
automount
如果需要看DVD/CD片需要automount幫你自動mount光碟,在這邊我使用ivman,安裝方式也請參考 ivman-howto。
到目前為止基本上freevo應該已經可以啟動了,輸入freevo試試。
中文設定
中文選單
如果您已經能近入freevo系統真的非常恭喜您,不過由於目前freevo還沒辦法看的到中文目錄與檔案,所以需要做少部份的設定。要顯示中文要先有中文字型,非常幸運的,目前Linux中文系統推行的還算不錯,中文字型當然首推 螢火飛長輩提供的AR PL New Sung。
freevo預設所使用的字型放在/usr/shares/freevo/fonts/,所以把fireflysung.ttf放到這邊來就可以了嗎?很可惜不是這樣,除了放過來還需要修改skins下有設定到<font>的.fxd檔,也就是說當你換skins就得自己改.fxd,這感覺好像很麻煩,有簡單一點方法嗎?剛好在freevo的maillist上看到有問到設定字型的問題, 有人提供了一個非常簡單的方法就是把/usr/shares/freevo/fonts/所有的字型全都link到你要的字型,所以我的情況我只需
-
# cp /usr/shares/freevo/fonts/*.ttf /path/backup;for i in `ls *.ttf` ;do ln -sf /usr/share/fonts/fireflysung/fireflysung.ttf $i; done
這樣就可以備份兼link到/usr/share/fonts/fireflysung/fireflysung.ttf。
字型有了再將LOCALE='UTF-8'加到~/.freevo/local_config.py,重新啟動freevo試看看,中文應該出現了。
中文字幕
有中文選單那字幕呢?不知道是我設定有問題還是?我一直無法讓mplayer吃到~/.mplayer/config,但是很奇怪的是直接在console下mplayer test.avi卻都沒問題,而且在MPLAYER_ARGS_DEF中加入-font=/usr/share/fonts/fireflysung/fireflysung.ttf似乎也不行,找了好久終於在/usr/lib/python2.4/site-packages/freevo/video/plugins/mplayer.py中發現這兩個參數OSD_DEFAULT_FONTNAME, OSD_DEFAULT_FONTSIZE,真是神奇這兩個參數竟然沒出現在官網文件中。將這兩個參數加入後,中文字幕就出現了。
-
OSD_DEFAULT_FONTNAME = '/usr/share/fonts/fireflysung/fireflysung.ttf' OSD_DEFAULT_FONTSIZE = 16
其他設定
Plugins (待補)
freevo有蠻多 plugins 可以用,不過太懶了這部份先不寫。
TV-OUT
NB直接透過功能鍵就可以TV-OUT,所以不用設定,改天換裝PC再來試試看。
遠端控制 (待補)
原本NB上的IrDA弄不出來,打算買個無線鍵盤或電腦搖控器來用就好。 ATI Remote Wonder 似乎是不錯的選擇,2.6.5之後的kernel已經有 native module。
結語
freevo其實是功能還算不少的HTC軟體,當然還是沒有MythTV來的強大,但是就一般使用者而言,這些功能已經非常足夠了。除此之外,freevo比起MythTV還具備一些優點,例如可以直接使用FrameBuffer,還有 不用Mysql和QT等。不過freevo可能還是欠缺一些您認為非常重要的功能,可以到 Freevo Wiki-WishList 留下您寶貴的意見提供development team參考。
References
http://sourceforge.net/mailarchive/message.php?msg_id=9881615
http://www.linuxdevcenter.com/pub/a/linux/2005/01/27/freevo.html