Raspberry Pi 使用 USB 電視棒收看數位電視頻道

這裡介紹如何在 Raspberry Pi 上面使用電視棒,直接收看免費的數位電視頻道。

目前市面上有許多千元以內的 USB 數位電視棒,只要接上天線再插上電腦,就可以直接使用電腦收看免費的數位電視節目,例如常見的民視、中視、台視與華視都可以直接收看。


而我們也可以在樹莓派(Raspberry Pi)上面插上一隻 USB 數位電視棒,直接在樹莓派上面看電視,就好像數位電視機上盒一樣,以下是我拿 ASUS My Cinema U3000 Mini DVBT Tuner 這隻數位電視棒來測試的過程。

由於我也是第一次嘗試在 Linux 下使用數位電視棒,我也沒有把握一定可以成功,所以我在拍賣網站選購電視棒的時候,是挑價格比較低的二手品(若是失敗的話損失比較小),另外再參考一下 DVB-T USB Devices,找一隻比較確定沒有問題的型號,最後找到一隻二手的 ASUS My Cinema U3000 Mini DVBT Tuner,在 Linux 下可以使用,而且含運費只要兩百多塊。

raspberry-pi-dvb-usb-tv-stick-1

這是電視棒的背面。

raspberry-pi-dvb-usb-tv-stick-2

這是接天線的插座。

raspberry-pi-dvb-usb-tv-stick-3

蓋子打開後,是 USB 的插頭。

raspberry-pi-dvb-usb-tv-stick-4

這隻 USB 電視棒有附贈天線,不過通常這樣的天線收訊都不太理想。

raspberry-pi-dvb-usb-tv-stick-5

接下來我們要先下載電視棒的韌體,安裝至 /lib/firmware/ 中:

cd /lib/firmware/
sudo wget http://linuxtv.org/downloads/firmware/dvb-usb-dib0700-1.20.fw

安裝好韌體之後,就可以把它插上樹莓派了,這裏我是使用 Raspberry Pi B+。

raspberry-pi-dvb-usb-tv-stick-7

這時候我們可以執行一下 dmesg 確認一下系統是否有抓到這隻電視棒

dmesg

正常來說應該會有下面這樣的訊息:
[   71.051920] usb 1-1.4: new high-speed USB device number 6 using dwc_otg
[   71.153060] usb 1-1.4: New USB device found, idVendor=0b05, idProduct=171f
[   71.153095] usb 1-1.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[   71.153110] usb 1-1.4: Product: STK7700
[   71.153124] usb 1-1.4: Manufacturer: DIBCOM
[   71.153138] usb 1-1.4: SerialNumber: 7414000129
[   71.313659] dvb-usb: found a ‘ASUS My Cinema U3000 Mini DVBT Tuner’ in cold state, will try to load a firmware
[   71.318286] dvb-usb: downloading firmware from file ‘dvb-usb-dib0700-1.20.fw’
[   71.457741] dib0700: firmware started successfully.
[   71.961986] dvb-usb: found a ‘ASUS My Cinema U3000 Mini DVBT Tuner’ in warm state.
[   71.964876] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   71.965191] DVB: registering new adapter (ASUS My Cinema U3000 Mini DVBT Tuner)
[   72.212227] usb 1-1.4: DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)…
[   72.244344] MT2266: successfully identified
[   72.451863] Registered IR keymap rc-dib0700-rc5
[   72.456634] input: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.4/rc/rc0/input3
[   72.457415] rc0: IR-receiver inside an USB DVB receiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.4/rc/rc0
[   72.463154] dvb-usb: schedule remote query interval to 50 msecs.
[   72.463194] dvb-usb: ASUS My Cinema U3000 Mini DVBT Tuner successfully initialized and connected.
[   72.463718] usbcore: registered new interface driver dvb_usb_dib0700

另一個檢查方式是直接使用 lsusb 來看:

lsusb

正常來說應該會看到我們剛剛插上去的 USB 電視棒:
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 005: ID 1c4f:0002 SiGma Micro Keyboard TRACER Gamma Ivory
Bus 001 Device 006: ID 0b05:171f ASUSTek Computer, Inc. My Cinema U3000 Mini [DiBcom DiB7700P]
Bus 001 Device 004: ID 046d:c018 Logitech, Inc. Optical Wheel Mouse

安裝好硬體與韌體之後,要安裝一下 DVB 的工具套件:

sudo apt-get install dvb-apps

使用 scan 掃描頻道:

scan /usr/share/dvb/dvb-t/tw-Taipei > channels.conf

或是

scan /usr/share/dvb/dvb-t/tw-Kaohsiung > channels.conf

掃描時所使用的初始掃描檔會因為每個地區不同,大家要依照自己所屬的區域來選擇。另外我發現在 Ubuntu Linux 中系統只有提供一個 tw-All 的初始掃描檔,內容如下:
T 533000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 539000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 545000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 551000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 557000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 563000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 569000000 6MHz 2/3 NONE QAM64 8k 1/4 NONE
T 575000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 581000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 587000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE
T 593000000 6MHz 2/3 NONE QAM16 8k 1/4 NONE

我目前也不確定哪一個比較好。

掃描出來的頻道列表會類似這樣:
中視數位台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1001:1002:100
中視新聞台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1011:1012:101
中視綜藝台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1021:1022:102
中視HD台:533000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:1031:1032:103
公共電視 PTS:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2011:2012:201
公視2台 PTS2:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2021:2022:202
客家電視 HTV:545000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2031:2032:203
民視綜合台:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3001:3002:300
民視交通台:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3011:3012:301
民視新聞台:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3021:3022:302
民視資料廣播:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:0:0:303
民視HD台:557000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_AUTO:QAM_16:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:3041:3042:304
公視 HD:569000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:2001:2002:200
台灣電視台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4001:4002:400
台視財經台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4011:4012:401
台視綜合台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4021:4022:402
台視 HD台:581000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:4031:4032:403
華視CTS:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5011:5012:501
華視教育台:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5021:5022:502
華視新聞資訊台:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5031:5032:503
華視HD:593000000:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_2_3:FEC_2_3:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_4:HIERARCHY_NONE:5041:5042:504

這個檔案內容的格式是以冒號分格的表格,第一個欄位是頻道的名稱。

使用 tzap 依據頻道名稱選擇要收看的頻道:

tzap  -r -c channels.conf "CHANNEL NAME"

使用 mplayer 播放節目:

mplayer /dev/dvb/adapter0/dvr0

正常來說這樣就可以收看了,不過我發現樹莓派的處理速度不夠快,這樣播的話會跑不動,後來我將解析度降低才能順利播放:

mplayer /dev/dvb/adapter0/dvr0 -vfm ffmpeg -lavdopts lowres=1:fast:skiploopfilter=all

這是在樹莓派上面播放公視節目的畫面:

raspberry-pi-dvb-usb-tv-stick-8

由於我是第一次嘗試在 Linux 中使用電視棒,目前遇到許多問題,首先因為天線是使用附贈的天線,收訊不良,只能收到少數幾個頻道,我目前正在想辦法改善天線的收訊品質,另外 Raspberry Pi 的處理速度有點慢,就算 CPU 超頻到 1GHz,還是沒辦法讓 MPlayer 以正常的解析度播放,只能用比較低的解析度來播放,不過看新聞是堪用了。

如果您對於樹莓派的應用有興趣,建議您可以繼續閱讀物聯網的相關文章。

參考資料:Linux TV

樹莓派, 物聯網

4 Comments

  1. 阿呆

    太棒了~大大這個專案,小弟會依照大大的實作方式,也嘗試實作一次.

  2. 2呆

    你這是使用電視棒的範例,有試過直接接同軸電纜,有這種裝置嗎?

    • G. T. Wang

      用同軸電纜接天線嗎?

      • 2呆

        你好,我的意思是
        拿掉電視棒附的天線,改直接同軸電纜 接 電視棒。

        我找到解法了,有”mcx轉F頭”接頭即可 ,原本您的範例是 (天線–>電視棒) –> pi,現在是 (同軸–>電視棒) –>pi。

        我的來源是電視同軸電鑬,不需要天線。

Leave a Reply