IPTV 群播轉單播:用 udpxy、rtp2httpd 在 Apple TV 上看
Revue 無法直接播放 rtp://、udp:// 這類群播(也有人稱多播)位址。做法是:在路由器、軟體路由器或 NAS 上執行 udpxy 或 rtp2httpd,把 IPTV 群播轉成 HTTP 單播;再把 http://<轉送裝置 IP>:<連接埠>/rtp/<群播位址>:<連接埠> 這樣的網址寫進 M3U 播放清單,新增到 Revue。轉換後的串流是 MPEG-TS,Revue 原生解碼交錯式 1080i 與 MP2、AC-3、E-AC-3 音訊,並逐台辨識 4K HLG。
路由器端的設定教學已經很多。本文只整理必要的設定重點,重心放在轉換之後 Apple TV 怎麼播放、出問題時怎麼檢查。
整體架構
- IPTV 網路(通常是一個獨立的 VLAN)接到一台常開的裝置上,例如路由器、軟體路由器或 NAS。
- 這台裝置上的 udpxy 或 rtp2httpd 依需求加入群播群組,再把收到的串流用 HTTP 傳給提出請求的用戶端。
- Apple TV 透過家裡的區域網路,用一般的 HTTP 網址播放。
這樣做有兩個好處。第一,群播不會進到 Wi-Fi:群播在 Wi-Fi 上以最低速率傳送,掉封包也不會重傳,看高位元率頻道很容易卡頓。第二,家裡多台裝置可以共用同一個轉送程式。
事前準備
- 一台能接上 IPTV 網路且常開的裝置,用來執行 udpxy 或 rtp2httpd:OpenWrt 路由器、軟體路由器、NAS,或能跑 Docker 的電腦都可以。
- 頻道的群播位址和連接埠。本文不提供,也不說明取得方式。請只播放你有權觀看的頻道。
- 一台安裝 tvOS 26 或以上版本的 Apple TV,並安裝 Revue。
步驟一:讓群播進到轉送裝置
VLAN。 很多 IPTV 網路用獨立的 VLAN 傳送。常見做法是一條網路線用 802.1Q 標籤同時承載上網和 IPTV 兩個 VLAN,再由路由器依標籤拆開。VLAN ID 依網路而不同,請以你自己網路的設定為準。設定好之後,轉送裝置上會有一個接在 IPTV 網路上的網路介面,例如 eth0.<VLAN ID>。後面設定轉送程式時會用到它的名稱。
IGMP。 udpxy 和 rtp2httpd 會自動在 IPTV 網路介面上加入群播群組。轉送程式直接在連接 IPTV 網路的那台裝置上執行時,不需要 igmpproxy。只有機上盒這類要直接接收群播的裝置放在路由器後面時,才需要 igmpproxy 或 omcproxy。
IGMP Snooping。 區域網路裡的交換器或網路橋接開啟 IGMP Snooping 後,群播只會送到有訂閱的連接埠,不會塞滿整個區域網路和 Wi-Fi。OpenWrt 的網路橋接預設關閉 Snooping。開啟 Snooping、但網路裡沒有 IGMP 查詢器(Querier)時,成員關係會逾時,症狀是看幾分鐘就斷線。解決方法是開啟查詢器(OpenWrt 網路橋接的 multicast_querier),或讓轉送程式定期重新加入群播群組。
防火牆。 轉送裝置要在 IPTV 那一端放行 IGMP,以及目的位址在 224.0.0.0/4 的 UDP。只開放轉送程式的 TCP 連接埠是不夠的。
步驟二:執行 udpxy 或 rtp2httpd
兩個程式都會把群播轉成 HTTP 上的 MPEG-TS 串流,Revue 都能直接播放。
| udpxy | rtp2httpd | |
|---|---|---|
| 維護狀況 | 不再增加新功能,偶有修正 | 持續維護 |
| 預設連接埠 | 沒有預設值,必須用 -p 指定,常用 4022 |
5140 |
| 預設用戶端數上限 | 3 | 5 |
| 額外功能 | 無 | FCC 快速轉台、RTSP 轉 HTTP、列出用戶端的狀態頁 |
| 安裝 | OpenWrt 官方套件庫有 udpxy 和 luci-app-udpxy |
OpenWrt 官方套件庫沒有;專案的發布頁提供安裝套件,也有官方 Docker 映像檔 |
想要簡單、裝置上也已經裝好,用 udpxy。想要快速轉台或更多診斷資訊,用 rtp2httpd。
udpxy
常用參數:
-p:監聽連接埠,必填。-a:監聽的網路介面,也就是 Apple TV 存取的區域網路那一端。-m:接收群播的網路介面,也就是 IPTV 那一端。-c:最大用戶端數,預設只有 3。家裡有多台裝置同時看的話,要調高。-M:每隔幾秒重新加入群播群組,預設關閉。遇到固定時間斷線時,可以設成 30 以上。
例如:
udpxy -p 4022 -a <區域網路介面> -m <IPTV 介面> -c 10
在 OpenWrt 上,/etc/config/udpxy 預設是 disabled '1',要改成 0 才會啟動。設定項目和參數的對應如下:bind 對應 -a,source 對應 -m,max_clients 對應 -c,mcsub_renew 對應 -M。
啟動後,用瀏覽器開啟 http://<轉送裝置 IP>:4022/status,看得到狀態頁就代表程式正在執行。
頻道網址的格式:
http://<轉送裝置 IP>:4022/udp/<群播位址>:<連接埠>
http://<轉送裝置 IP>:4022/rtp/<群播位址>:<連接埠>
/udp/ 會自動判斷串流是純 TS 還是 RTP 封裝;/rtp/ 則直接當成 RTP 封裝處理。不確定的話用 /udp/。
rtp2httpd
常用設定:
- 監聽連接埠預設是 5140。
--upstream-interface(設定檔裡是upstream-interface):IPTV 那一端的網路介面。要填ip link裡看到的實際裝置名稱,不能填 OpenWrt 的邏輯介面名稱。--maxclients(設定檔裡是maxclients):最大用戶端數,預設 5。注意 rtp2httpd 的-m是用戶端數,和 udpxy 的-m意思不同。- 設定檔裡的
mcast-rejoin-interval:定期重新加入群播群組,預設關閉。遇到固定時間斷線時,官方文件建議設成 30 到 120 秒。
設定檔預設在 /etc/rtp2httpd.conf,OpenWrt 上則用 /etc/config/rtp2httpd。用 Docker 執行時,要使用 host 網路模式。
啟動後,http://<轉送裝置 IP>:5140/status 是狀態頁,可以看到每個用戶端的位址和頻寬。頻道網址的格式:
http://<轉送裝置 IP>:5140/rtp/<群播位址>:<連接埠>
rtp2httpd 的 /rtp/ 和 /udp/ 沒有差別,用哪一個都可以。FCC 快速轉台需要你所在網路的 FCC 伺服器位址,請以你自己網路的設定為準。
步驟三:寫 M3U 播放清單
每個頻道寫成一列 #EXTINF,下一列是 HTTP 網址:
#EXTM3U
#EXTINF:-1 tvg-id="<節目表裡的頻道 id>" group-title="高畫質",<頻道名稱>
http://192.168.1.1:4022/udp/<群播位址>:<連接埠>
- 如果手上的清單是
rtp://或udp://格式,就把每一列改寫成上面的 HTTP 形式。rtp2httpd 也可以在設定裡用external-m3u讀入外部 M3U,再從/playlist.m3u提供改寫好的清單。 - 把 M3U 檔案放在 Apple TV 能用 HTTP 存取的地方,例如 NAS 或路由器上的網頁服務。Revue 無法從本機檔案匯入播放清單。
- 想顯示節目表的話,在
tvg-id填入 XMLTV 裡對應的頻道id。Revue 不會讀取播放清單第一列的x-tvg-url,節目表網址要在設定裡另外填。
步驟四:在 Revue 新增並播放
- 在 Revue 進入 設定 › M3U 播放清單(IPTV) › 新增 M3U 播放清單,填入 M3U 檔案的網址後儲存。詳細步驟請見匯入 M3U 播放清單與節目表。
- 打開一個頻道,按遙控器的右鍵。右上角的面板會顯示格式,例如
1080i@25、位元率9.6 Mbps、HLG 頻道的HDR,以及杜比或多聲道音訊的格式。看到位元率在跳動,就代表資料正常進來。 - 想讓電視跟著頻道切換 50Hz 和 HDR,請在 tvOS 設定裡開啟「符合內容」。
如果你的 IPTV 網路也提供 RTSP 單播網址,Revue 可以直接播放,不需要轉送。前提是 RTSP 裡裝的是 MPEG-TS,而且伺服器支援 TCP 傳輸;需要登入的 RTSP 不支援。
常見問題
| 狀況 | 原因與處理 |
|---|---|
| 「無法播放」,下方是「不支援的 URL」之類的系統訊息 | 播放清單裡還是 rtp:// 或 udp:// 網址。請改寫成轉送程式的 HTTP 網址。 |
| 一直載入,播不出來 | 先在電腦上用 VLC 打開同一個 HTTP 網址。如果 VLC 也播不出來,問題在轉送那一端:檢查轉送程式的 IPTV 介面設定(udpxy 的 -m、rtp2httpd 的 --upstream-interface)和防火牆。狀態頁打得開,只代表區域網路那一端正常,不代表有收到群播。 |
| 看幾分鐘就斷,或每隔固定時間斷一次 | 開了 IGMP Snooping 卻沒有查詢器。開啟查詢器,或讓轉送程式定期重新加入(udpxy 的 -M、rtp2httpd 的 mcast-rejoin-interval)。 |
| 卡頓、破圖 | 轉送裝置接 IPTV 的那一端一定要接網路線,群播不要走 Wi-Fi。4K 頻道位元率高,Apple TV 最好也接網路線。 |
| 一台能看,再開一台就打不開 | 轉送程式的用戶端數到上限了。udpxy 預設 3 個,rtp2httpd 預設 5 個,請依需要調高。 |
| 有畫面沒聲音 | Revue 支援 AAC、MP2、AC-3 和 E-AC-3。只有其他音訊格式的頻道會沒有聲音。播放途中切換到 AirPlay 揚聲器的話,請轉台或重新打開頻道。 |
| 有聲音沒畫面 | 這個頻道可能是 MPEG-2 視訊,Revue 不解碼 MPEG-2 視訊。 |
| 轉台時黑畫面 1–2 秒 | 開啟「符合內容」後,電視正在切換影格率或動態範圍,屬於正常現象。在格式相同的頻道之間轉台,不會再切換。 |
| 轉台很慢 | 每次轉台,轉送程式都要重新加入群播群組,再等到下一個關鍵影格才會出現畫面。rtp2httpd 的 FCC 可以縮短這段時間,前提是你的網路有 FCC 伺服器,見rtp2httpd FCC 快速轉台。 |
更多播放問題的檢查方法,請見頻道黑畫面、卡頓、沒聲音怎麼辦。