Skip to content

Releases: stackia/rtp2httpd

v3.3.0

12 Nov 17:20

Choose a tag to compare

新功能

  • 支持华为 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-type parameter. See fcc-type parameter documentation
  • Support for wget as a fallback when curl / uclient-fetch is 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.gz not 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

11 Nov 08:01

Choose a tag to compare

  • 调整 shared memory 映射方式,支持在光猫上运行

  • Adjusted shared memory mapping to support running on ONT (Optical Network Terminal) devices

v3.2.1

11 Nov 02:55

Choose a tag to compare

  • 修复第二次更新 M3U 时程序崩溃问题
  • 修复网页播放器静音按钮有些时候点了没反应问题
  • 优化网页播放器的初始化加载速度

  • Fixed program crash when updating M3U for the second time
  • Fixed web player mute button occasionally not responding
  • Improved web player initial loading speed

v3.2.0

09 Nov 12:35

Choose a tag to compare

新功能

  • 支持使用 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 小时
  • 修复随开机启动时,因可能暂时没有网络而导致外部 M3U 拉取失败,程序直接崩溃问题
  • 修复网页播放器 EPG 节目单只显示 3 天数据问题,现在可以正确显示所有日期的节目
  • 修复无法解析 rtp2httpd.conf 中 = 左右不带空格的写法(例如 key=value
  • 修复上游超时、报错时,未给客户端发送 HTTP 状态码而直接断开连接问题

New Features

  • Support for uclient-fetch as a fallback when curl is not installed
    • uclient-fetch comes pre-installed on OpenWrt and is a very lightweight curl alternative
  • 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-url is directly written in rtp2httpd.conf
    • EPG update interval is now controlled by the external-m3u-update-interval option, same as M3U
    • Default value of external-m3u-update-interval changed from 24 hours to 2 hours
  • 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

02 Nov 16:50

Choose a tag to compare

  • 修复当 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

01 Nov 11:22

Choose a tag to compare

  • 切换到 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

31 Oct 05:31

Choose a tag to compare

  • 增加 --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 --xff option to independently control whether to accept the X-Forwarded-For header (by @zzzz0317 in #114)
    • Automatically enabled when --hostname is configured with an http:// or https:// URL
    • See Public Access Guide for details
  • 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.conf being 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

29 Oct 20:00

Choose a tag to compare

  • 当使用反向代理时,rtp2httpd 现在能够解析 X-Forwarded-For 头作为客户端实际地址,显示在状态面板上
  • 支持在 URL 上带上 &r2h-seek-offset=xx 作为回看时间偏移量
  • 内置 Web 播放器现在支持更多复杂的 catchup-source 时间占位符格式,具体见 内置播放器支持的时间占位符
  • 回看时间参数现在能自动识别和兼容 playseektvdr 两种格式,并且支持自定义,整个时间处理系统强大而灵活,详见 时间处理与时区转换
  • 支持 RTSP Digest 认证
  • 修复 Docker 镜像未安装 curl 问题
  • 修复 catchup="append" 模式下,m3u 转换后的 catchup-source 未能把开头的 & 转为 ? 导致 URL 错误

  • When using a reverse proxy, rtp2httpd can now parse the X-Forwarded-For header 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 playseek and tvdr formats, 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

28 Oct 10:19

Choose a tag to compare

  • 修复 M3U 定时更新后,#EXTM3U 头消失问题
  • 修复 LuCI UI 的打开状态页、播放器页按钮,在主机名/域名填写带有 http:// 前缀 URL 时,无法正确打开页面问题
  • 修复使用 r2h-token 时,用内置网页播放器播放视频时,出现 Invalid RTP/UDP URL format 错误日志问题

  • Fixed #EXTM3U header 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 format error log when playing video with the built-in web player while using r2h-token

v3.0.3

28 Oct 03:34

Choose a tag to compare

  • 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 (--daemonise parameter) which was not working as expected. Background execution should use system mechanisms (init.d, systemd, etc.)