CubieTruck如何在Ubuntu 14.04安裝 MiniDLNA 套件

MiniDLNA是在Linux裡面相當有名的 DLNA 伺服器套件,我曾用過 TombMedia,PS3MedisServer,感覺上配上 Android APP BubbleUPnP,還是MiniDLNA最上手。但很可惜的,MiniDLNA在Ubuntu 14.04時已經被下架了,聽說是會導致當機的關係,反正你現在用正規 apt-get install minidlna,會報找不到套件的問題。

所以這裡提供一個方法可以在 CubieTruck (理論上其他 ARM 機器也可以的,例如:Raspberry PI)上 Ubuntu 14.04版本上安裝 MiniDLNA,不需要自己編譯。首先到下面載點下載 .deb 套件

載點

這個套件是專門給 ARM機器在UBuntu 14.04版本上安裝的,若不符合請不要安裝。確定好之後請採用 dkpg 安裝

# dpkg -i minidlna_1.1.2+dfsg-1_ubuntu14.04.1_armhf.deb

第一安裝會裝不起來,因為很多依存性的 lib.so 檔案不存在,所以還要強制安裝一次,請輸入

# apt-get -f install

這樣全部的套件就可以裝好了,最後面也應該可以看到 miniDLNA跑起來了才對。接下來就編輯 /etc/minidlna.conf ,這個是最主要的設定檔案,我們只關心幾個欄位

欄位 解釋
media_dir=A,/mnt/data/mp3 A代表音樂,逗點後面改為自己的音樂目錄
media_dir=P,/mnt/data/picture P代表圖片,逗點後面改為自己的圖片目錄
media_dir=V,/mnt/data/Cinema V代表影片,逗點後面改為自己的影片目錄
friendly_name=CubieTruck 代表在別的設備上要看到的名稱
inotify=yes 把前面 #號去掉,代表 inode一旦有改變,就會更改到資料庫上。
db_dir=/mnt/data/var/minidlna 資料庫的目錄位址,確定擁有者和群族為 miniDLNA
log_dir=/mnt/data/var/minidlna 日誌的目錄位址,確定擁有者和群族為 miniDLNA
port=8200 把前面 #號去掉,使用8200 Port聯繫

如果有設定防火牆者,必須打開防火牆

ufw allow proto tcp from 192.168.1.0/24 to any port 8200
ufw allow proto udp from 192.168.1.0/24 to any port 1900

全部設定完之後記得要讓 miniDLNA重啟服務,大約會耗系統三到五分鐘掃描目錄的資料(依照你的多媒體檔案數量多寡而定),之後你就可以採用Android APP觀看自己DLNA Server的多媒體資料了。

service minidlna restart

使用CubieTruck播放Home DLNA影片到家裡電視

很多年前買了一台機上盒(不是Android的那種電視棒),專門用來播放一些影片,來源都是透過 Samba 從網路芳鄰來播放。最近用 CubieTruck 架設了 miniDLNA server,然後在Android手機上安裝 BubbleUPnP 客戶端軟體,這樣一來就可以在手機上透過 BubbleUPnP來播放之前的相片(可以以時間排序),影片和MP3。

但是今天打開機上盒時(不可以正在播放影片,也就是待機中),手機上的BubbleUPnP竟然可以搜尋到另一個Render,Air TV,也就是那台年代久遠的機上盒也支持UPnP。所以就把來源設為 CubieTruck miniDLNA,目的地設為機上盒接到電視,用手機的BubbleUPnP遙控,ㄟ,不只照片,連影片都可以播放耶,酷!

解決CubieTruck UPnP搜尋不到的問題

前幾天用 minidlna 架了一個媒體伺服器,第一天試用看來還不錯,可以用日期找到之前的照片。但是最近幾天就有點怪怪的,Android的客戶端軟體我是用 BubbleUPnP,這套可以搜尋到我其它的 UPnP Device,但是不是每一次都可以找到我的 CubieTruck 架的 miniDLNA 媒體伺服器。

首先,我先排除防火牆的問題,因為我把防火牆關了,運作也不正常,偶爾可以找到,除非你手動重新啟動 miniDLNA, 不然基本上是看不到的。而且我也確認了 UPnP 會走的 UDP 1900/1901 Port是沒問題的,Multicast 239.255.xx.xx 也被排除在外,TCP 8200更不用說了,找都還沒找到,連線不可能被建立,所以也不用討論是否被檔。

整個拓樸大約是這樣的

[H1]----wired----[R1]----wired----[R2]----wireless----[H2]
CubieTruck       DIR-655          DIR-655             Andoird
miniDLNA         router           router              BubbleUPnP
server           DLink            DLink               client

這是一個很普通的路由,一般家裡的應用。因為之前我有在Embedded System hard code過UPnP,所以我想問題出在 multicast 封包在這些路由裡面給搞丟了。本想用 tcpdump 來看看的,但是最近老婆大人在練 “來自星星的你”,所以聽完這些封包,我可能就回星星去了。

所以我只能先從系統一些參數修改來試試看,第一個懷疑的是橋接的 multicast_snooping,因為我有裝 hostapd,所以有一個虛擬的橋接介面 br0,搞不好是那裏把 multicast 封包給搞丟了。所以按圖索驥,找到這個參數位置 /sys/devices/virtual/net/br0/bridge/multicast_snooping,預設值是 1,BubbleUPnP送出這些Multicast封包,會不會CubieTruck是聽太多了,導致封包搞丟了。所以把它給關了

echo “0” > /sys/devices/virtual/net/br0/bridge/multicast_snooping

結果BubbleUPnP就立刻找到CubieTruck,再多試幾天看看結果,如果可以,是要把它寫到 /etc/sysctl.conf 裡面的。

在真相還沒大白之前,每個路由器都有嫌疑,但是無奈這些路由器改不了參數,只能先從 CubieTruck 開刀了。

CubieTruck安裝DLNA Server

之前買了一台機上盒,用來播放一些電影和電視劇,協議都是用Samba,所以必須用帳號密碼。心想,在家裡幹嘛要帳號密碼呢?用DLNA不就好了嘛?這樣一來,Android手機或平板也可以很容易地播放CubieTruck的媒體,不需要用Samba繞一圈來播放了。

首先,我們先安裝套件 DLNA Server – minidlna

apt-get install minidlna

這個套件比較大,大概是25MB,所以安裝會比較久,而且之後會產生一個 Database .db檔案,檔案大小會跟你的媒體數量有關的,所以空間不夠的人,就參考參考囉。

剛剛說到 Database .db檔案和 log檔案當安裝好時,預設路徑是 /var/lib/minidlna,所以擔心自己 NAND被寫穿的人,自己就另建目錄囉,像我就健在外部硬碟上。

mkdir /mnt/data/var/minidlna
chown -R minidlna:minidlna /mnt/data/var/minidlna

如果要用預設值,請跳過上述兩個步驟。接下來到 /etc目錄下編輯 nano /etc/minidlna.conf 這個檔案,我們有興趣的欄位有

  • friendly_name=CubieTruck DLNA Server
  • media_dir=A,/mnt/data/mp3 # A代表Audio聲音,後面加上自己想要的路徑
  • media_dir=V,/mnt/data/cinema # V代表Video影像,後面也是加上自己的路徑
  • media_dir=P,/mnt/data/picture #P代表Picture照片,路徑自己加上
  • db_dir=/mnt/data/var/minidlna ?#剛剛設定的 database 目錄,或者使用預設的 /var/lib/minidlna

然後重建 media database,然後重啟。

service minidlna stop
service minidlna force-reload
service minidlna start

如果設定沒有錯的話,這樣就可以重啟成功了。但是系統需要一段時間去掃描上述的目錄,具體時間跟你的檔案數量有關,不過至少是要幾分鐘以上的,你可以到剛剛的 database 目錄去看看 files.db 的檔案大小是否有增加。

資料庫建立完畢之後,用 Android 就可以看到 CubieTruck DLNA Server,可以直接播放上述的媒體了。

p.s. 最好把 /etc/minidlna.conf 裡面的 inotify=yes選項打開,這樣有新的檔案時就可以自動加入。但是如果媒體數量很多時,那就必須修改 /etc/sysctl.conf 檔案裡面新增

fs.inotify.max_user_watches = 100000 #依照你自己所需,預設值好像是8192而已

然後輸入下述命令生效

sysctl -p

然後到 /proc/sys/fs/inotify/max_user_watches 這個檔案是否已經被更改。

如果你對安全性要求很強的話,那把它加到防火牆內,用的 port 是 1900 (for UPnP)和 8200 (for HTTP media streaming)

ufw allow from 192.168.1.0/24 to any port 1900 proto udp
ufw allow from 192.168.1.0/24 to any port 8200 proto tcp

上述假定只讓 192.168.1.* 的機器進來,依照自己需要更改。