Releases: stackia/rtp2httpd
Releases · stackia/rtp2httpd
v3.3.0
新功能
- 支持华为 FCC 协议
- 国内有四种 FCC 协议:电信(中兴)、华为 v1、华为 v2、烽火。此前 rtp2httpd 只实现了电信协议,这个版本新增了华为 v1 协议。
- 华为协议有更好的稳定性和 NAT 穿透能力。有些省份必须依赖 NAT 穿透才能使用 FCC(例如山西电信、山西联通)。
- 华为 IPTV 平台同时支持电信协议和华为协议。从这个版本开始,对所有 8027 端口 FCC 服务器都默认使用华为 v1 协议交互。
- 如果你遇到问题,可以使用
fcc-type参数手动指定协议类型,见文档 fcc-type 参数说明
- 支持
wget作为curl/uclient-fetch不存在时的替代工具 - 优化 Docker 镜像大小,用 alpine 作为 base,从 90 MB 缩减到 9 MB
问题修复
- 改进 M3U/EPG 更新失败时的重试逻辑,现在将会尝试尽快重试,而不是等下一个更新周期
- 解决了之前 rtp2httpd 随开机启动时,经历短暂无网状态导致无法及时拉取 M3U/EPG 问题
- 修复长时间运行可能随机崩溃问题
- 这个问题由 v3.2.0 引入,仅在使用外部 M3U 时发生
- 修复
/epg.xml.gz在一些播放器无法识别问题(例如酷9) - 修复状态面板的"断开"、"修改日志等级"有概率失败报错问题
- 调整网页播放器 RTSP 回放时的片段长度,改善对一些源的兼容性
New Features
- Huawei FCC protocol support
- There are four FCC protocols in China: Telecom (ZTE), Huawei v1, Huawei v2, and FiberHome. Previously rtp2httpd only implemented the Telecom protocol; this version adds Huawei v1.
- The Huawei protocol offers better stability and NAT traversal capability. Some provinces require NAT traversal to use FCC (e.g., Shanxi Telecom, Shanxi Unicom).
- Huawei IPTV platforms support both Telecom and Huawei protocols. Starting from this version, all FCC servers on port 8027 default to using the Huawei v1 protocol.
- If you encounter issues, you can manually specify the protocol type using the
fcc-typeparameter. See fcc-type parameter documentation
- Support for
wgetas a fallback whencurl/uclient-fetchis not available - Optimized Docker image size using alpine as base, reduced from 90 MB to 9 MB
Bug Fixes
- Improved retry logic when M3U/EPG updates fail — now retries as soon as possible instead of waiting for the next update cycle
- Resolves the issue where rtp2httpd started at boot could not fetch M3U/EPG in time due to brief network unavailability
- Fixed potential random crash during long-running operation
- This issue was introduced in v3.2.0 and only occurs when using an external M3U
- Fixed
/epg.xml.gznot being recognized by some players (e.g., Ku9) - Fixed intermittent failures when using "Disconnect" or "Change Log Level" in the status panel
- Adjusted RTSP playback segment length in the web player to improve compatibility with some sources
v3.2.2
v3.2.1
v3.2.0
新功能
- 支持使用
uclient-fetch作为未安装curl时的替代uclient-fetch在 OpenWrt 默认已自带,是非常轻量的curl替代品
- 转换后的 M3U (
/playlist.m3u) 和 EPG (/epg.xml.gz) 支持 ETag 缓存协商 - 网页播放器新增画中画模式
- 网页播放器新增强制 16:9 画面比例选项
- 考虑到国内标清频道强行把 16:9 画面缩放到 4:3,这个选项默认设置为开启
- 优化网页播放器前端资源内嵌方式,binary 体积减小 18%
- 目前 x86_64 binary 为 308 KB,剔除前端资源后仅为 138 KB
- 作为对比,msd_lite 是 148 KB,udpxy 是 71 KB,其他同类 Go 或 Rust 编写的程序则是几 MB 起步
- rtp2httpd 在很小的体积内,实现了丰富的功能和优于 msd_lite 的性能
- 这是启用
-O3(性能优化)而非-Os(体积优化)的编译结果 - 以上陈述,是为了打破一些人认为 rtp2httpd 加入播放器导致臃肿、性能变差的观点
- 事实上追求体积更小是没多少意义的,大多数用来折腾的路由器普遍 CPU、内存、闪存性能过剩
问题修复
- 修复由于周期性 IGMP Membership Report 未设置 Router Alert 选项,导致在 omcproxy 下无法工作问题
- 修复在 rtp2httpd.conf 配置中直接编写带有
x-tvg-url的 M3U 时,EPG 不能定时自动更新问题- EPG 的更新周期和 M3U 一样,由
external-m3u-update-interval配置项控制 external-m3u-update-interval的默认值已由 24 小时调整为 2 小时
- EPG 的更新周期和 M3U 一样,由
- 修复随开机启动时,因可能暂时没有网络而导致外部 M3U 拉取失败,程序直接崩溃问题
- 修复网页播放器 EPG 节目单只显示 3 天数据问题,现在可以正确显示所有日期的节目
- 修复无法解析 rtp2httpd.conf 中
=左右不带空格的写法(例如key=value) - 修复上游超时、报错时,未给客户端发送 HTTP 状态码而直接断开连接问题
New Features
- Support for
uclient-fetchas a fallback whencurlis not installeduclient-fetchcomes pre-installed on OpenWrt and is a very lightweightcurlalternative
- Converted M3U (
/playlist.m3u) and EPG (/epg.xml.gz) now support ETag cache negotiation - Web player: new Picture-in-Picture mode
- Web player: new force 16:9 aspect ratio option
- Enabled by default, as many SD channels in China force-scale 16:9 content to 4:3
- Optimized web player frontend resource embedding, reducing binary size by 18%
- Current x86_64 binary is 308 KB, only 138 KB without frontend resources
- For comparison: msd_lite is 148 KB, udpxy is 71 KB, while similar Go or Rust programs start at several MB
- rtp2httpd achieves rich functionality and better performance than msd_lite in a very small package
- This is compiled with
-O3(performance optimization) rather than-Os(size optimization)
Bug Fixes
- Fixed periodic IGMP Membership Report missing the Router Alert option, causing incompatibility with omcproxy
- Fixed EPG not auto-updating when M3U with
x-tvg-urlis directly written in rtp2httpd.conf- EPG update interval is now controlled by the
external-m3u-update-intervaloption, same as M3U - Default value of
external-m3u-update-intervalchanged from 24 hours to 2 hours
- EPG update interval is now controlled by the
- Fixed program crash on boot when external M3U fetch fails due to temporary network unavailability
- Fixed web player EPG program guide only showing 3 days of data; now correctly displays all dates
- Fixed inability to parse
key=value(without spaces around=) in rtp2httpd.conf - Fixed upstream timeout/error not sending HTTP status code to client before disconnecting
v3.1.3
- 修复当 IPTV 接口的 PPPoE 重新拨号后,程序必须重启才能恢复正常的问题
- 修复状态面板上,多个相同 IP 的客户端,只有一个被显示出来
- 网页播放器增加一个实验性选项:回看切片尾偏移,默认是 0,即每次回看请求从起始时间到当前时刻的片段
- 优化网页播放器的重试逻辑,当有解码失败(丢包)时,可以自动重试,不会像之前那样卡住
- Fixed the issue where the program must be restarted after the IPTV interface PPPoE reconnects
- Fixed only one client being displayed on the status panel when multiple clients share the same IP
- Web player: added an experimental option for catchup segment end offset (default 0, meaning each catchup request covers from the start time to the current moment)
- Improved web player retry logic: when decoding fails (packet loss), it now automatically retries instead of getting stuck
v3.1.2
- 切换到 OpenWrt 24.10 SDK 来构建 ipk 包,解决在 24.10 上安装语言包时出现报错问题
- LuCI 会受到浏览器缓存影响,如果升级后出现问题,需要 Ctrl+F5 刷新 或 清空浏览器缓存 或 使用无痕模式访问 解决
- Switched to OpenWrt 24.10 SDK for building ipk packages, resolving language pack installation errors on 24.10
- LuCI may be affected by browser cache. If issues occur after upgrading, use Ctrl+F5 to hard refresh, clear browser cache, or use incognito mode
v3.1.1
- 增加
--xff配置项,独立控制是否接受X-Forwarded-For头 (by @zzzz0317 in #114)- 如果
--hostname配置了http://或https://开头的地址,这个选项会自动开启 - 具体行为见 公网访问建议
- 如果
- OpenWrt 开机启动顺序从 50 调整为 99
- rtp2httpd 启动时会拉取 m3u,需要保证网络就绪,因此需要较晚启动
- 修复 OpenWrt 包每次升级后,
/etc/rtp2httpd.conf被重置为默认问题,现在会保留之前编辑过的文件 - 优化 LuCI UI 布局,由于设置项越来越多,现在使用多个 tab 来组织
- 升级后,需要清空浏览器缓存(或用无痕模式访问),才可以看到更新的 LuCI UI
- 为方便各位自行编译 OpenWrt 包或固件,本项目已提供开箱即用的 Makefile,用法见 OpenWrt 编译安装
- Added
--xffoption to independently control whether to accept theX-Forwarded-Forheader (by @zzzz0317 in #114)- Automatically enabled when
--hostnameis configured with anhttp://orhttps://URL - See Public Access Guide for details
- Automatically enabled when
- OpenWrt boot order changed from 50 to 99
- rtp2httpd fetches m3u on startup and requires network readiness, so it needs to start later
- Fixed
/etc/rtp2httpd.confbeing reset to defaults after each OpenWrt package upgrade; the previously edited file is now preserved - Optimized LuCI UI layout with multiple tabs due to the growing number of settings
- After upgrading, clear browser cache (or use incognito mode) to see the updated LuCI UI
- For those who want to build OpenWrt packages or firmware themselves, the project now provides a ready-to-use Makefile. See OpenWrt Build Integration
v3.1.0
- 当使用反向代理时,rtp2httpd 现在能够解析
X-Forwarded-For头作为客户端实际地址,显示在状态面板上 - 支持在 URL 上带上 &r2h-seek-offset=xx 作为回看时间偏移量
- 内置 Web 播放器现在支持更多复杂的 catchup-source 时间占位符格式,具体见 内置播放器支持的时间占位符
- 回看时间参数现在能自动识别和兼容
playseek和tvdr两种格式,并且支持自定义,整个时间处理系统强大而灵活,详见 时间处理与时区转换 - 支持 RTSP Digest 认证
- 修复 Docker 镜像未安装 curl 问题
- 修复
catchup="append"模式下,m3u 转换后的 catchup-source 未能把开头的&转为?导致 URL 错误
- When using a reverse proxy, rtp2httpd can now parse the
X-Forwarded-Forheader as the actual client address, displayed on the status panel - Support for &r2h-seek-offset=xx in URLs as a catchup time offset
- The built-in web player now supports more complex catchup-source time placeholder formats. See Built-in Player Time Placeholders
- Catchup time parameters now auto-detect and support both
playseekandtvdrformats, with customization support. The entire time processing system is powerful and flexible. See Time Processing & Timezone Conversion - RTSP Digest authentication support
- Fixed Docker image missing curl
- Fixed
catchup="append"mode where the converted catchup-source failed to replace the leading&with?, resulting in invalid URLs
v3.0.4
- 修复 M3U 定时更新后,
#EXTM3U头消失问题 - 修复 LuCI UI 的打开状态页、播放器页按钮,在主机名/域名填写带有
http://前缀 URL 时,无法正确打开页面问题 - 修复使用 r2h-token 时,用内置网页播放器播放视频时,出现
Invalid RTP/UDP URL format错误日志问题
- Fixed
#EXTM3Uheader disappearing after scheduled M3U updates - Fixed LuCI UI status page and player page buttons not opening correctly when the hostname/domain is configured with an
http://prefix - Fixed
Invalid RTP/UDP URL formaterror log when playing video with the built-in web player while using r2h-token
v3.0.3
- Host 头检查只匹配域名,不再匹配端口,增加对反代透传 Host 头的兼容性
- 修复使用反代并有 URL 前缀时,内置播放器不能加载 playlist.m3u 问题
- M3U 转换时,服务地址加入 group-title 前缀
- 当 M3U 中有重复的频道名时,现在能够正确识别并创建带有数字后缀的 URL
- 移除未按预期工作的内置 daemonise 支持(
--daemonise参数)。后台运行建议使用系统机制(init.d, systemd 等)。
- Host header check now only matches the domain, no longer matches the port, improving compatibility with reverse proxies forwarding the Host header
- Fixed built-in player failing to load playlist.m3u when using a reverse proxy with a URL prefix
- M3U conversion now includes group-title prefix in service addresses
- Duplicate channel names in M3U are now correctly identified and assigned URLs with numeric suffixes
- Removed the built-in daemonize support (
--daemoniseparameter) which was not working as expected. Background execution should use system mechanisms (init.d, systemd, etc.)