2013年6月7日 星期五

Raspberry PI : disable IPv6 讓 XBMC 的 AirPlay 正常

2013年6月7日 星期五
之前在測試 Raspbmc 的 AirPlay 並不是很順利,常常會出現「無法播放視訊」的對話框,有時可以,但是大部份都不行,找了好久,都沒看出端倪,猜想大概是程式不夠成熟的關係吧!今天不小心找到原因了,都是 IPv6 在做怪,把 Raspberry PI 的 IPv6 關掉,就可以很流暢的在 iPad 上播放影片給 XBMC 了。

下面是在還沒有改之前,經常出現在 iPad 上的畫面:


臨時 disable IPv6 的方法

如果在 Raspberry PI 的 Console 中輸入底下的指令:
ifconfig -a

可以看到類似底下的結果:

特別注意箭頭所指的 「inet6 address ....」那行,這表示系統目前有啟用 IPv6,在這種組態下,xbmc 的 AirPlay 接收到 iPad 送來的控制資料的成功機率較低。

可以先試試看,將 Raspberry PI 的 IPv6 關掉,執行底下這行指令:
sudo sysctl net.ipv6.conf.all.disable_ipv6=1

如果我們再次執行「ifconfig -a」來查看網路介面的組態,應該會變成類似底下的內容:

「inet6 addr:......」IPv6 的組態不見了,只剩下「inet addr:......」IPv4 的部份。

將 Raspberry PI 的 IPv6 disable 以後,再利用 iPad 試著播放影片,並導向給 Raspberry PI 中的 XBMC ,應該不會再出現錯誤訊息了。


利用 sysctl 組態暫時 disable IPv6

那如何將 IPv6 disable 變成 Raspberry PI 的預設值,而不用每次得在重新啟動後打指令呢?Raspberry PI 在啟動時會去讀取「/etc/sysctl.d」目錄中的 *.conf ,並讓 sysctl 去執行檔案中的內容,因此,我們可以在 /etc/sysctl.d 中新增一個叫「disableipv6.conf」,執行底下的指令:
sudo nano /etc/sysctl.d/disableipv6.conf

然後再該檔中新增 IPv6 disable 的參數:
net.ipv6.conf.all.disable_ipv6=1

編輯完畢後,將該檔案儲存起來,這樣,下一次啟動時,IPv6 就會被關掉了。


啟動時不載入 ipv6 module

想關得更徹底一點是根本在 boot 時,就不要載入 ipv6 的模組,我們可以將「ipv6」加入modprobe 的「blacklist」清單中。在「/etc/modprobe.d」目錄中,編輯或新增一個檔名為「ipv6-blacklist.conf」的檔案,執行:
sudo nano /etc/modprobe.d/ipv6-blacklist.conf

然後在裡面加入底下的內容:
blacklist ipv6

修改完,將檔案儲存,這樣子,下次啟動時,ipv6 的模組就不會被載入了。


關於 XBMC 上的解析度

如果 IPv6  disable 了,卻仍然出現「無法播放視訊」的對話框,有可能發生在使用 HDMI 時,因為它預設的解析度是 1080P ,解析度高,造成運算能力不強的 Raspberry PI 負載過重而出不來。不只是 AirPlay 有問題,甚至連使用「TED Talk 」、「YouTube」......等視訊附加元件也會有影片載入很久播放不出來的情形。
我試著由系統設定中去設定視訊的解析度,設為 1024x768 就正常了,難怪我在那台平價的 7吋小螢幕上都很流暢,而在 42吋的大螢幕上以 HDMI 連接卻老是卡住。


相關文章


1 則留言:

  1. 1080p30fps h264 的影片 Raspberry PI 中的 omxplayer 會使用硬解,
    播放沒問題,但得注意 memory_split 的設定,官方建議設到 64 以上,
    用於 GPU 解碼暫存。

    回覆刪除

 
雄::gsyan © 2009. Design by Pocket