上篇我們已經在 odroid HC4 裡面安裝好 debian 和 OpenMediaVault,也啟用了 SMB,但如果要串流影片到 android TV 上,SMB 的方式雖然夠用,但介面比較不友善。因此我們試試 Plex 這套解決方案吧!
Plex 是什麼?
他是自建影音串流伺服器 + app 的整套解決方案。我們在自己的 NAS 上起 Plex server 端,讓他去吃 NAS 上的影片等檔案,並自動分析配上影片標題和封面圖片。再透過 Plex app,如 web、mobile、或是 android TV 等 client 端串流播放。
整體架設過程非常簡單,也能實現從外部網路播放。雖然他是商業化解決方案,大部分功能功能都免費,只有 mobile app 和一些進階權限功能需要付費。
不過就算要在 mobile 上使用,直接用瀏覽器開 web app 也行。我大部分在 android TV 上跑,因此免費方案十分足夠!就讓我們開始吧!
架設 Plex server 端
使用以下 docker-compose yaml 。其中:
- network_mode:
依照 docker hub 上的 readme 建議設定為 host。
這部分如果要設定為 bridge 也行,只是依照文件來看,如果要完善的功能會需要 expose 蠻多 port,外加他會把內網 ip 誤判為外網 ip(因為 bridge 所以網段不同)因此建議使用 host。
- volumes:
config 是用來儲存設定檔, 依照個人需求給定,我這邊是掛在與 docker-compose file 同一層目錄。
剩下的 movies 等等目錄是掛入 NAS 的影音檔資料夾,名稱可以完全自訂,只要自己能夠區分即可。
- PUID 與 PGID:
避免掛入影音檔所在的 host folder 有權限問題,這邊記得給定與對應料夾相同的擁有者 id(可在 shell 下使用 id 指令來得知帳號群組所對應的 id)。
- PLEX_CLAIM:
Plex 整套解決方案包含雲端帳號系統,如果要讓你的 Plex server 加入某一個 Plex account,必須先登入 Plex 網站,取得帳號的 claim(可以想成 token)並填入此,啟動一次後就能把你的 Plex server 註冊到 Plex account 下,如此才能使用 app 串流播放。後面會提供詳細步驟,一開始驗證階段可以先略過。
version: "2.1"
services:
plex:
image: ghcr.io/linuxserver/plex
container_name: plex
network_mode: host
restart: always
mem_limit: 1.5G
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
volumes:
- ./config:/config
- ./Movie:/movies <舉例,依照你的情況而定>
- <掛入其他影音資料夾>...
environment:
- PUID=1000
- PGID=100
- VERSION=docker
- PLEX_CLAIM=claim-84dxqpKtCpCBMMEtDBJ9 <可略>
緊接著使用以下指令啟動 container
docker-compose up -d
立刻到瀏覽器連線看看
http://<your_nas_ip>:32400
如果能看到畫面表示成功!(用 docker 實在也很難失敗XD)
註冊 Plex Server 端
下一步要註冊我們的 Plex Server,首先到 Plex 官網申請一個帳號
登入後透過 https://www.plex.tv/claim/ 可以取得一個 4 分鐘內有效的 claim
立刻複製貼到剛剛的 yaml file
...
environment:
...
- PLEX_CLAIM=<貼到這裡>
重啟 container
docker-compose restart
回到瀏覽器 reload local 的 Plex server 頁面,就會看到確認登入訊息,登入後一路給他按確定下去!
完成!
加入檔案到 Plex 媒體庫
點按右上方的「設定」icon,再依序點「媒體庫」、「新增媒體庫」
依照 UI 提示設定影音類型,這邊 UI 都做得很直覺簡單。主要是新增資料夾這一步,要選擇剛剛我們從 host 掛入的 folder。
新增後 Plex 會啟動掃描,自動到網路搜尋影片對應的封面與資料,這樣就能無痛完成自己的影音媒體庫!
實測後發現 Plex 會透過檔名去抓資料,所以會有找不到的情況,此時只能手動一一修改了。
遠端存取
到 設定 -> 遠端存取 開啟後,路由器不需要設 port forwarding,Plex 直接使用打穿的方法(我猜的)讓使用者連回 NAS 串流影片,我覺得這蠻方便大家可以試試看!
Plex web app 傳送門:https://app.plex.tv/desktop
串流品質
Plex 預設只要在不同網段,就會自動對影片做即時壓縮,可是 HC4 的 SoC 沒有強悍到可以即時壓縮高品質的影片,好在現在光纖網路普及,上傳頻寬錯錯有餘,直接把畫質開到最大吧!
到 設定 -> 品質 取消勾選「自動調整品質」,並將「影片品質」下拉選單改成「最大」
前面提到 docker 網路使用 host 不用 bridge 其實和這裡也有關係。假如今天開啟即時壓縮功能,Plex 判定的標準是看 client 和 server 是否在同一個網段,不同則壓縮,相同則原檔串流。假如使用 bridge 模式,雖然 client 和 server 看似在同一個住家 wifi 環境中,但 Plex container 用的網段和 host 不同(因為 bridge mode),導致 Plex 誤判而壓縮影片。當然如果關閉壓縮功能就沒有差異,這部分因人而異。
到這裡全部架設完成,趕快到 android tv 或是電腦上串流看看吧!
範例原始碼在此下載:github
延伸閱讀:
自己 DIY 一個 NAS 吧! – 安裝 OpenMediaVault 到 odroid HC4
自己 DIY 超省電 BT 下載機吧!- 安裝 ruTorrent 到 odroid HC4
如何讓 Odroid HC4 連接 Wifi?
參考資料:
Docker Hub: linuxserver/plex