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 查询器,成员关系就会超时,表现为播放几分钟后断流。解决办法是开启查询器(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 或路由器上的 Web 服务。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 快速换台。

更多播放问题的排查方法,见频道黑屏、卡顿、没声音怎么办。