Revue
繁體中文

指南

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 怎麼播放、出問題時怎麼檢查。

整體架構

  1. IPTV 網路(通常是一個獨立的 VLAN)接到一台常開的裝置上,例如路由器、軟體路由器或 NAS。
  2. 這台裝置上的 udpxy 或 rtp2httpd 依需求加入群播群組,再把收到的串流用 HTTP 傳給提出請求的用戶端。
  3. 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 新增並播放

  1. 在 Revue 進入 設定 › M3U 播放清單(IPTV) › 新增 M3U 播放清單,填入 M3U 檔案的網址後儲存。詳細步驟請見匯入 M3U 播放清單與節目表。
  2. 打開一個頻道,按遙控器的右鍵。右上角的面板會顯示格式,例如 1080i@25、位元率 9.6 Mbps、HLG 頻道的 HDR,以及杜比或多聲道音訊的格式。看到位元率在跳動,就代表資料正常進來。
  3. 想讓電視跟著頻道切換 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 快速轉台。

更多播放問題的檢查方法,請見頻道黑畫面、卡頓、沒聲音怎麼辦。