Releases: stackia/rtp2httpd
v3.10.1
新功能
1. CORS 跨域访问支持
现在可以通过 cors-allow-origin 选项来启用 CORS 跨域访问支持。
第三方浏览器播放器(非内置网页播放器),如果想访问 rtp2httpd 转换出来的流,会受到浏览器跨域访问限制,导致无法播放。此时可以设置 cors-allow-origin = * 或者 cors-allow-origin = <播放器域名>,来允许接受跨域访问。
这个选项也在 OpenWrt LuCI UI 上提供,名称为 CORS 允许的源。
2. HTTP 代理支持时间处理能力 (r2h-seek-offset / 时区修正)
类似之前 RTSP 代理已经支持的时间处理能力,现在 HTTP 代理也加入支持。
完整文档:时间处理与时区转换
3. 网页播放器:支持 MPEG-1 Layer 2 (MP2) 音频软解
国内 IPTV 大多数高清、标清频道使用 MP2 音频编码,一些浏览器(例如 iOS Safari)无法原生支持 MP2 解码,导致节目无法播放,或者只有画面没有音频。
因此网页播放器现在引入了 MP2 音频软解能力,在 iOS Safari 默认启用,在其他浏览器默认关闭。经测试大多数节目已经可以正常在 iOS Safari 上正常播放。在其他浏览器如果想要启用软解,可以点击侧边栏设置按钮,启用 MP2 音频软解 选项。
音频软解依赖于浏览器 Web Worker 和 Web Assembly 能力在后台解码,会占用一些计算资源,在手机上有可能会产生轻微发热,这是正常现象。此外,受限于浏览器,使用软解时在手机上无法保持后台播放。
4. 网页播放器:支持播放 HLS 源
一些运营商 IPTV 使用 HLS 协议处理直播和回看(特征是抓包得到的直播、回看地址是 http:// 开头)。在上个版本 rtp2httpd 已经支持了 HTTP 代理能力,能够把 IPTV 内网 HLS 源代理到局域网或公网,也恰好解决了网页端播放 HLS 的跨域访问限制问题。
从这个版本起,网页播放器也加入 HLS 播放能力,现在应该可以正常播放 HLS 流。
HLS 播放依赖浏览器对 HLS 的原生支持,注意 Chrome 于近期才支持原生播放 HLS,需要使用 Chrome >= 142 版本。Firefox 暂不支持。
所有支持的浏览器列表:https://caniuse.com/http-live-streaming
5. 网页播放器:支持解析 ${...|UTC} 回看时间占位符
例如 starttime=${(b)yyyyMMdd|UTC}T${(b)HHmmss|UTC}。
完整文档:内置播放器支持的时间占位符
问题修复
- 修复 M3U 解析时,文件包含 UTF-8 BOM 导致解析失败问题 by @monsterzzzz
- 修复 M3U 中经过 HTTP 代理的 URL,当客户端传入 playseek 参数时,未能正确向上游发送问题
- 修复 HTTP 代理不能正确处理 HEAD 请求问题
- 修复 HTTP 代理在上游断开连接时,有概率 socket/epoll 未正确清理导致 CPU 空转问题
- 修复 RTSP 在上游断开连接时,有概率丢弃末尾几个包,导致客户端解码失败问题
- 网页播放器:有多个线路可选时,仅记住上次成功播放的线路
- 网页播放器:微交互优化,例如焦点控制、a11y、样式微调
- 网页播放器:为了支持 HLS 和音频软解,解码链路 @rtp2httpd/mpegts.js 进行了大量重构,性能更优,体积还更小
v3.9.1
v3.9.0
新功能
1. 网页播放器:支持将相同频道多个源聚合起来,显示为单个频道+多条线路
例如,对于下面这段 m3u,三个不同清晰度的源,将会聚合为一个频道显示在列表中,并可以切换清晰度
#EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://upload.112114.xyz/logo/广东卫视4K.png" group-title="卫视",广东卫视
rtp://239.253.64.96:5140/?fcc=10.255.75.73:15970$超高清
#EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://upload.112114.xyz/logo/广东卫视.png" group-title="卫视",广东卫视
rtp://239.253.64.200:5140/?fcc=10.255.75.73:15970$高清
#EXTINF:-1 tvg-id="广东卫视" tvg-name="广东卫视" tvg-logo="https://upload.112114.xyz/logo/广东卫视.png" group-title="卫视",广东卫视
rtp://239.253.64.44:5140/?fcc=10.255.75.73:15970$标清
详细文档见:https://github.com/stackia/rtp2httpd/blob/main/docs/m3u-integration.md#线路标签
2. 网页播放器:频道列表显示当前正在播放的节目
频道列表现在会显示每个频道正在播放的节目,一目了然!
3. 网页播放器:手机端可添加到桌面,UI 尺寸优化(频道分组、搜索框更紧凑)
例如,在 iOS 使用 Safari 打开网页浏览器,点击右下角三个点 -> 分享 -> 添加到主屏幕,可以把网页播放器变成类似 app 一般的体验。
ScreenRecording_02-19-2026.5-49-16.AM_1.MP4
问题修复
- 修复“组播周期性重加入”功能在 IGMPv2-only 交换机下无效问题 by @tuzkiyoung
- 对于一些运营商,即便使用 RTSP TCP 传输模式,服务器也会在一段时间后主动断开连接(例如上海电信)。所以 rtp2httpd 现在也会定期发送 keep alive 请求来避免服务器会话超时断开连接。
- 之前版本只在 UDP 传输模式下发送 keep alive,现在无论 TCP/UDP 模式都会发送
- 修复 m3u 转换时,catchup-source 在 append 模式下,在一些情况下不能正确拼接问题(例如用户错误使用了
catchup-source="?playseek=xxx",但实际期望的拼接符号是&)。现在会智能选择&或?作为 catchup-source 开头,保证最终 URL 是合法的。 - 转换后的 playlist.m3u,其中的 URL 将不再进行 URL encode,这样有更好的可读性
- 经过反代的 HTTP URL 现在也会在 playlist.m3u 中以服务名替代完整 URL(和 RTP/RTSP 保持一致)
- 网页播放器:修复在回看时,因为解码失败或网络波动导致重连时,播放进度丢失问题
v3.8.3
v3.8.2
- 修复上个版本中,有概率客户端被错误标记为断开连接并无法正确清理资源问题
- HTTP 代理现在可以改写 m3u,把其中所有 URL 都改写为经过 rtp2httpd 代理的地址,确保 HLS 能正常播放
- 修复 OpenWrt LuCI UI 中缺少部分文本中文翻译问题 by @yaoyao5128
v3.8.1
v3.8.0
这个版本存在一些严重 bug,将会稍后在后续版本修复,暂不建议更新
新功能
- 新增 HTTP 反代能力 (http2http)
- 用法见 https://github.com/stackia/rtp2httpd/blob/main/docs/url-formats.md#http-代理
- 主要用途是把 IPTV 内网的 HLS 源转发到局域网或者公网,方便观看
- 目前网页播放器暂时不支持播放 HLS 源,在下个版本将会做适配
r2h-token除了可以通过 URL 参数传递,现在也支持 通过 Cookie 或者 User Agent 来传递- RTSP 现在支持使用 STUN 进行 NAT 穿透
- 配置项见 https://github.com/stackia/rtp2httpd/blob/main/docs/configuration.md#rtsp-nat-穿透
- 使用场景:对于仅支持 UDP Transport 的 RTSP 服务器,当 rtp2httpd 位于 NAT 之后,通过 STUN 也许能够实现 NAT 穿越。
- 借鉴了 plsy1/rtsproxy
问题修复
- 经转换的
playlist.m3u,其中 EPG URL 优先使用压缩版本/epg.xml.gz(原先写死了/epg.xml导致一些客户端加载性能不佳) by @mjl371
文档
- 新增 性能测试报告,对比了 rtp2httpd / msd_lite / udpxy / tvgate 在常见和极限场景下的性能。
v3.7.0
新功能
- 新增配置项
udp-rcvbuf-size用于手动指定 UDP 接收缓冲区大小(默认 512KB)- 频繁遇到丢包花屏可以尝试增大这个选项
- 需要以 root 权限运行才有效(对于 Docker,需要指定
--cap-add=NET_ADMIN) - 在 OpenWrt LuCI UI 也新增了这个选项
UDP 接收缓冲区大小
- 新增 RTP 乱序包重排能力,改善一些网络环境下的乱序包花屏问题
- 开箱即用,无需任何配置
- 新增 FEC 前向纠错功能,在 URL 上指定
?fec=<端口>来启用- 有些运营商支持 FEC 前向纠错,用户观看一个频道时,同时接收两个组播流,一个组播流负责发送 RTP 包,另一个组播流负责发送 FEC 冗余包,当 RTP 流丢包时,可以利用 FEC 流进行恢复。
- FEC 流和 RTP 流使用相同的组播 IP,不同的端口。抓包出来的
ChannelFECPort就是 FEC 端口。 - 由于不同运营商的 FEC 纠错算法有差异,未必能支持所有 FEC 算法,如遇问题请提 issue 反馈(需提供抓包文件)
- URL 示例:
http://<ip>:<port>/rtp/239.253.64.120:5140?fcc=10.255.14.152:8027&fcc-type=huawei&fec=5142
- 一键安装脚本:使用 OpenWrt 自带的
uclient-fetch代替curl避免一些人没有安装curl导致脚本失败
问题修复
- 修复转换后的
playlist.m3u未在 EPG URL 带上r2h-token,导致 EPG 加载失败 by @mjl371 - Web 状态面板不再对每个客户端 URL 重复显示
r2h-token=xxxx,保持 UI 清爽
v3.6.2
- 网页播放器:频道 logo 图片加载使用 no-referrer policy,避免一些网站的防盗链设置导致图片加载失败
- 修复在非常罕见的情况下,RTSP 连接会卡在
RTSP 完成 TEARDOWN状态且一直不会释放 - 设置 UDP RCVBUF 时,尝试使用
SO_RCVBUFFORCE以突破一些固件的默认内核参数net.core.rmem_max限制,可以改善 4K 视频流偶尔花屏马赛克问题 - 修复对于一些特殊的 RTSP 上游,断开连接时出现
RTSP: Socket event handling failed报错