2007年6月21日

在 Linux 上觀看數位電視

因為在 XDite 看到 數位電視棒又來了,大家快搶 XD 這則訊息,所以在 博客來 訂了一本用不到的 Windows Vista升級調校高手制霸技 一書,以及所附贈的數位電視棒乙隻。

好了,現在的問題變成如何在 Linux 上看數位電視了。

驅動數位電視棒

其實 Linux 核心已經支援了不少的數位電視控制晶片,所以最簡單的作法就是將這些支援全部編成模組型式。方式有兩種:

  1. 透過 linuxtv.org 上的 DVB 工具,可以參考 Ubuntu Wiki 的 用Linux看數位電視
  2. 直接由 Kernel 重新編譯:也就是勾選 Device Drivers --> Multimedia devices --> Digital Video Broadcasting Devices --> [*] DVB For Linux 及所屬的模組後(當然 Video for Linux 支援也要開啟才行)重新 make; make modules_install 即可。
完成驅動程式準備後即可將電視棒插入 USB 槽中,只要 kernel 有支援的話應該就會出現類似以下的訊息,告知系統找到了什麼裝置(如 MSI Digivox Mini SL),還少了什麼東西(did not found the firmware file ):
usb 2-1: new high speed USB device using ehci_hcd and address 25 usb 2-1: configuration #1 chosen from 1 choice dvb-usb: found a 'MSI Digivox Mini SL' in cold state, will try to load a firmware dvb-usb: did not find the firmware file. ( dvb-usb-dibusb-6.0.0.8.fw ) Please see linux/Documentation/dvb/ for more details on firmware-problems. (-2) dvb_usb_dibusb_mc: probe of 2-1:1.0 failed with error -2 usbcore: registered new interface driver dvb_usb_dibusb_mc usb 2-1: USB disconnect, address 25

安裝 Firmware

Firmware 的問題比較簡單,因為第一次插入電視棒時系統便會主動告知,如上例的 dvb-usb-dibusb-6.0.0.8.fw 這個檔案,然後到 LinuxTV 的 Firmware 下載區 找到對應的檔案後下載並存放到 /lib/firmware 目錄下(可能必須自行建立)即可。不過如果系統無法明白告知所需的 Firmware 檔名的話只能請您結哀順便,等 kernel 改版後再試試看是否支援。

另外 Gentoo 的 portage 中已經提供了一整包 firmware 檔,安裝方式如下例:

# 若知道晶片組時可以指定 DVB_CARDS 變數限制安裝的 firmware,不然會全部安裝的。
$ emerge -v linuxtv-dvb-firmware

完成 firemware 檔案設定後即可重新拔插電視棒乙次,這次系統會自動載入 firmware 並回應初始化作業完成的訊息,如下例:

usb 2-1: new high speed USB device using ehci_hcd and address 27 usb 2-1: configuration #1 chosen from 1 choice dvb-usb: found a 'MSI Digivox Mini SL' in warm state. **WARNING** I2C adapter driver [MSI Digivox Mini SL] forgot to specify physical device; fix it! dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. DVB: registering new adapter (MSI Digivox Mini SL). **WARNING** I2C adapter driver [DiBX000 tuner I2C bus] forgot to specify physical device; fix it! DVB: registering frontend 0 (DiBcom 3000MC/P)… MT2060: successfully identified (IF1 = 1220) input: IR-receiver inside an USB DVB receiver as /class/input/input7 dvb-usb: schedule remote query interval to 150 msecs. dvb-usb: MSI Digivox Mini SL successfully initialized and connected.

設定頻道資訊

因為各地頻率、信號強弱不同的關係,必須先進行頻道掃描後才能提供播放工具訊號源的參考資訊。頻道掃瞄工具由 Linux TV 提供,全名為 linuxtv-dvb-apps 。Gentoo 使用者可以直接 emerge linuxtv-dvb-apps 即可完成安裝程序。

完成頻道掃瞄工具安裝之後即可進行頻道掃描,主要的目的是產生 channels.conf 以提供各類播放工具參考使用。除了 用Linux看數位電視 中的 TW.TXT 頻率參考表外,其實 Linux Kernel 也內建了一個頻率參考表 tw-Taipei(兩者不太一樣)可供參考,可以分別試試看是否可正常使用。

建立頻道列表必須透過頻率參考表進行,在 Gentoo 下(若非使用 Gentoo portage 安裝相關套件者,請自行參考安裝說明內之執行檔名及路徑)可以透過 dvbscan 指令進行,如下例(使用系統內附之頻率參考表,因為我無法使用 tw.txt 內的設定):

$ dvbscan /usr/share/dvb/scan/dvb-t/tw-Taipei > ~/.mplayer/channels.conf
※在掃描過程中若可以看的到頻道名稱,那應該有機會可以進行觀看。

播放節目

若使用 mplayer 的話,只要指定訊號來源為 dvb 即可,如下例:

$ mplayer dvb://

不過因為訊號不佳的關係,目前還沒有機會看到節目內容。

其他參考資訊:

  1. VDR Wiki: Gentoo DVB Driver
※ 2007-06-12 補充
  1. 做了一個小的,短距離的自製天線,規格沒有很正確,長度也不足以拉到窗戶邊,不過卻可以掃描到 TTV 的五個頻道。可惜掃的到並沒有用,在播放時除了要等很久之外還只能顯示出一大堆的雜亂區塊,以及搭配的噪音。
  2. 改善規劃:
    1. 找/買條更長的 Cable 線,讓天線有機會靠近窗戶上。
    2. 製作一正確規格之天線,甚至考慮做成這樣
※ 2007-06-22 補充
  1. 新的自製天線果然發揮了效果,果然天線還是要靠近窗邊才有用。不過這個天線蠻粗糙的,所以只能收到 12 個頻道。
  2. 播放實例 - 這是使用 MPlayer 進行播放,可以用 h 及 k 鍵換台:
    播放效果
  3. 原來交通台晚上沒事幹只好放音樂啊!