Skip to content

Releases: stackia/rtp2httpd

v3.13.5

17 Jun 18:22

Choose a tag to compare

此版本仅包含以下针对网页播放器的改进:

  • 修复在特定硬件上开启无缝换台后,快速连续换台导致 Chrome 媒体管线卡住,后续切换新频道都无法播放,必须重启 Chrome 问题
  • 修复 iOS 上切换频道总是弹出“需要用户交互才能播放”的问题
  • 优化在未配置 M3U 时的错误提示,引导用户前往官网教程

This release only includes the following web player improvements:

  • Fixed an issue on certain hardware where enabling seamless channel switching and rapidly switching channels could stall Chrome's media pipeline, leaving all subsequent channels unplayable until Chrome was restarted
  • Fixed channel switches on iOS always triggering the "user interaction required to play" prompt
  • Improved the error message when no M3U playlist is configured, with guidance pointing users to the official tutorial

v3.13.4

17 Jun 11:13

Choose a tag to compare

此版本仅包含以下针对网页播放器的改进:

  • 修复 16:9 视频在一些特定窗口大小下的比例和位置问题
  • 修复开启无缝切换时,在多个频道间快速切换,中间还是会出现黑屏问题
  • 修复多次频道切换后,有可能整个播放器无响应,后续切换任何频道都黑屏问题
  • 优化台标 logo 在浅色主题下的显示效果
  • 现在能够在刷新页面后,保留之前调整过的音量和静音状态
  • 新增:视频左上角显示当前系统时间
image

This release only includes the following web player improvements:

  • Fixed aspect ratio and positioning for 16:9 video at certain window sizes
  • Fixed black screens that could still appear when rapidly switching channels with seamless switching enabled
  • Fixed the player becoming unresponsive after multiple channel switches, leaving all subsequent channels black
  • Improved channel logo visibility in light theme
  • Volume and mute settings now persist after page refresh
  • Added system time display in the top-left corner of the video

v3.13.3

14 Jun 18:34
3bcf13d

Choose a tag to compare

  • 网页播放器:新增无缝换台功能,开启后切换频道时中间没有黑屏,无缝切换(默认开启)
    • 由于在换台过程中短暂存在两路视频同时拉流的情况,如果你的带宽比较小(公网访问时),或是上游只支持单路组播,导致换台出现卡顿,可以手动关闭这个选项
  • 网页播放器:修复 HLS 模式下,对于一些特定的编码的 TS 片段,播放可能卡住的问题
  • 网页播放器:修复 HLS 模式下,“返回直播”按钮点击后报错或时间错乱问题
  • 网页播放器:修复在 iPhone Edge 或 iPad上,未能自动检测并启用“MP2 音频软解”选项的问题

  • Web player: added seamless channel switching; when enabled, channel changes no longer show a black screen in between (enabled by default)
    • Because switching may briefly pull two video streams at once, you can manually disable this option if you have limited bandwidth over the public internet, or if your upstream only supports a single multicast stream and channel switching becomes choppy
  • Web player: fixed HLS playback that could stall on TS segments with certain encodings
  • Web player: fixed the "Go Live" button in HLS mode causing errors or timeline glitches after click
  • Web player: fixed MP2 software-decoded audio not being auto-detected and enabled on iPhone Edge or iPad

v3.13.2

13 Jun 04:49
614b5f1

Choose a tag to compare

  • OpenWrt LuCI:修复打开状态面板和播放器按钮点击后无反应问题

  • OpenWrt LuCI: fixed the buttons for opening the status dashboard and player not responding when clicked

v3.13.1

13 Jun 01:02
48ddbbb

Choose a tag to compare

  • 网页播放器:修复 Chrome 上报错 Failed to execute 'addSourceBuffer' on 'MediaSource' 问题
  • 网页播放器:优化在 iOS 上 MP2 音频软解的播放表现,减少毛刺感

  • Web player: fixed the Chrome error Failed to execute 'addSourceBuffer' on 'MediaSource'
  • Web player: improved MP2 software-decoded audio playback on iOS to reduce audio glitches

v3.13.0

12 Jun 10:38
997ec08

Choose a tag to compare

新功能

  • 新增爱快(iKuai)原生应用市场安装包
    • 可以直接在爱快路由器上原生运行 rtp2httpd
    • 安装包提供与 OpenWrt LuCI 接近的配置项,覆盖监听地址、上游接口、外部 M3U、认证、CORS 等常用设置
    • 即将上架官方应用市场,敬请期待
  • 支持 IPv6 / 双栈上游访问
    • HTTP 代理、RTSP TCP 上游、M3U / HLS playlist 改写、Host 校验、监听地址和 LuCI 配置均已支持 IPv6 地址
    • 上游地址为域名时,会按系统解析顺序依次尝试 IPv6 / IPv4 地址,连接失败后自动回退
    • 注意:FCC 和 mcast-rejoin-interval 暂不支持 IPv6 场景
  • OpenWrt LuCI UI 支持配置多个监听地址
    • 现在可以单实例同时监听多个地址 / 端口,例如 IPv4、IPv6 或不同网卡地址
    • 旧的单端口配置会在 LuCI 保存时自动迁移
  • r2h-seek-offset 支持分别调整回看开始 / 结束时间
    • 现在可以使用 r2h-seek-offset=12,-12 这类格式分别偏移开始和结束边界
    • 原来的单值写法仍然保持兼容
  • 网页播放器:重构内置播放链路,改善 HLS 播放兼容性
    • HLS 直播 / 点播现在统一走内置 MSE 播放链路,不再依赖浏览器原生 HLS 支持
    • 改善 iOS Safari 下启动卡在首帧、直播追帧反复缓冲、前后台切换后无法恢复等问题
    • 支持锁屏 / 控制中心的播放暂停控制,显示频道名称和台标

问题修复

  • 修复部分运营商 RTSP 节点在 OPTIONS 阶段返回 Session 后,DESCRIBE 未带上该 Session 导致 RTSP 单播播放失败的问题
  • 修复状态面板 SSE 日志时间戳在部分 32 位平台可能输出错误的问题
  • 加强 RTP 畸形包边界检查,避免异常包触发越界读取
  • 网页播放器:修复部分运营商直播或回看流在拼接点出现时间戳回退时,可能导致 MSE 缓冲区异常并黑屏的问题
  • 网页播放器:修复某些 AAC 数据残留可能影响后续 PES 解析的问题

这个版本里许多复杂功能和 bug 修复都借助 Claude Fable 5 完成,Token 费用十分昂贵。如果这些更新对你有帮助,不妨请作者喝一杯咖啡 ☕️


New Features

  • Added a native iKuai app market package
    • rtp2httpd can now run directly on iKuai routers without Docker Compose
    • The package provides LuCI-equivalent configuration fields for common settings, including listen addresses, upstream interfaces, external M3U, authentication, CORS, FFmpeg snapshots, and more
    • Coming soon to the official iKuai app market
  • Added IPv6 / dual-stack upstream support
    • IPv6 addresses are now supported in the HTTP proxy, RTSP TCP upstreams, M3U / HLS playlist rewriting, Host validation, listen addresses, and LuCI configuration
    • When an upstream hostname resolves to multiple IPv6 / IPv4 addresses, rtp2httpd tries them in system resolver order and automatically falls back on connection failure
    • Note: FCC and mcast-rejoin-interval are not supported for IPv6 scenarios yet
  • OpenWrt LuCI now supports multiple listen addresses
    • rtp2httpd can listen on multiple addresses / ports, such as IPv4, IPv6, or different network interfaces
    • Existing single-port configurations are migrated automatically when saved in LuCI
  • r2h-seek-offset now supports independent begin / end offsets
    • You can now use formats such as r2h-seek-offset=12,-12 to adjust the catchup begin and end boundaries separately
    • The existing single-value format remains compatible
  • Web player: refactored the built-in playback pipeline and improved HLS playback compatibility
    • HLS live / VOD playback now uses the unified built-in MSE pipeline, reducing reliance on browser-native HLS behavior
    • Improved iOS Safari reliability, including first-frame startup stalls, live-edge rebuffer loops, and background / foreground recovery
    • Added lock screen / control center play-pause support, with channel name / logo

Bug Fixes

  • Fixed RTSP unicast playback failures against some ISP RTSP nodes that return a Session during OPTIONS and expect DESCRIBE to echo it
  • Fixed incorrect SSE log timestamp output on some 32-bit platforms
  • Hardened RTP malformed packet bounds checks to avoid out-of-bounds reads
  • Web player: fixed black screen / MSE buffer corruption that could happen when some ISP live or catchup streams contain timestamp regressions at splice points
  • Web player: fixed stale AAC data that could affect subsequent PES parsing

v3.12.2

18 May 13:17
3612462

Choose a tag to compare

  • 修复较长的播放 / 回看地址可能被截断的问题
    • M3U 中较长的内联 URL,以及带有较多参数的 HTTP / RTSP 地址,现在可以正常解析和转发
  • 修复 HTTP 代理在改写较大的 M3U / HLS playlist 时,可能没有完整读取内容,导致部分回看节目无法播放的问题
    • 例如部分较长时长的回看节目,之前可能会显示网络异常或播放失败

  • Fixed an issue where long playback / catchup URLs could be truncated
    • Long inline URLs in M3U, as well as HTTP / RTSP URLs with many parameters, can now be parsed and proxied correctly
  • Fixed an issue where the HTTP proxy might not fully read large M3U / HLS playlists during rewrite, causing some catchup programs to fail playback
    • For example, some longer catchup programs could previously show a network error or fail to play

v3.12.1

08 May 15:17
00d8f91

Choose a tag to compare

  • 修复 v3.12.0 中 M3U catchup-source 改写导致部分 RTSP 回放失败的问题
    • tvdr=begin-end 这类单参数时移格式,现在会保留原始参数名,不再错误改写为 playseek=begin-end
    • 同时避免将 r2h-token 透传到上游 HTTP / RTSP 请求

  • Fixed an M3U catchup-source rewrite regression introduced in v3.12.0 that could cause RTSP catchup playback to fail
    • Single-parameter timeshift formats such as tvdr=begin-end now preserve the original parameter name instead of being incorrectly rewritten to playseek=begin-end
    • r2h-token is no longer forwarded to upstream HTTP / RTSP requests

v3.12.0

06 May 19:12
873dee7

Choose a tag to compare

新功能

  • 支持设置 HTTP/RTSP User-Agent header(配置项 http-proxy-user-agent / rtsp-user-agent
  • 支持通过 RTSP Range: clock= header 来实现时移
    • 可以解决传统 URL 时移方式,在接近直播的时间点时,要不停反复请求新片段导致播放卡顿问题
    • 默认不会启用这种模式,需带上请求参数 r2h-seek-mode=range 时才会启用。具体见文档 时间处理说明
  • 状态面板支持切换带宽单位 Mbps 和 MB/s

问题修复

  • 修复 OpenWrt 构建出来的 rtp2httpd 版本号错误
  • 支持 URL path 中包含有 time placeholder 的时间处理
  • 支持另一种华为 FCC 协议版本(此协议版本不支持 NAT 穿透)
  • 改进带宽统计方式,状态面板的带宽数值现在更加准确
  • 优化 RTSP / HTTP 代理各阶段的超时处理
  • 修复流控失效问题。之前如果通过 HTTP 代理访问较大的文件,服务器如果以较快的速率发送,会导致请求中断
  • 修复在一些环境下,如果系统异常关机,重启后有可能无法创建 shared memory file 导致崩溃的问题
  • 修复在一些情况下日志输出不全的问题,例如在 Docker 内刚启动立即崩溃,会导致 Docker 无法收集到日志 (by @lark)
  • 网页播放器:修复无法匹配到 EPG 有多个 display-name 的频道

New Features

  • Support setting the HTTP/RTSP User-Agent header (configuration options: http-proxy-user-agent / rtsp-user-agent)
  • Support timeshift via the RTSP Range: clock= header
    • This avoids playback stuttering near the live edge with traditional URL-based timeshift, where the player repeatedly requests new segments
    • This mode is not enabled by default. It is enabled only when the request parameter r2h-seek-mode=range is provided. See Time Processing for details.
  • Status panel now supports switching bandwidth units between Mbps and MB/s

Bug Fixes

  • Fixed the incorrect rtp2httpd version number in OpenWrt builds
  • Added time processing support for URL paths containing time placeholders
  • Added support for another Huawei FCC protocol version (this protocol version does not support NAT traversal)
  • Improved bandwidth statistics; bandwidth values in the status panel are now more accurate
  • Improved timeout handling across RTSP / HTTP proxy stages
  • Fixed a flow control failure. Previously, when accessing large files through the HTTP proxy, requests could be interrupted if the upstream server sent data at a high rate
  • Fixed a crash that could happen in some environments after an abnormal system shutdown, where the shared memory file could fail to be created after restart
  • Fixed incomplete log output in some cases, such as when the process crashed immediately after startup inside Docker, preventing Docker from collecting logs (by @lark)
  • Web player: fixed matching channels whose EPG contains multiple display-name entries
如果这个项目对你有帮助,不妨请作者喝一杯咖啡 ☕️

v3.12.0-alpha.2

05 May 15:51
78505aa

Choose a tag to compare

v3.12.0-alpha.2 Pre-release
Pre-release

v3.12.0-alpha.2

  • 新增请求参数 r2h-seek-modeRange: clock= 方式的时移现在需要通过 r2h-seek-mode=range(3600) 手动启用,不会默认自动启用。具体说明见文档 时间处理说明
  • 优化带宽统计方式,状态面板的带宽数值现在更加准确
  • 状态面板支持切换带宽单位 Mbps 和 MB/s
  • 修复流控失效问题。之前如果通过 HTTP 代理访问较大的文件,服务器如果以较快的速率发送,会导致请求中断
  • 修复在一些环境下,如果系统异常重启,重新启动后有可能无法创建 shared memory file 导致崩溃的问题
  • 修复在一些情况下日志输出不全的问题。例如在 Docker 内刚启动立即崩溃,会导致 Docker 无法收集到日志

v3.12.0-alpha.1:

  • 修复不识别大写 Playseek 问题

v3.12.0-alpha.0:

  • 支持设置 HTTP/RTSP User-Agent header
  • 修复 OpenWrt 构建出来的 rtp2httpd 版本号错误
  • 优化 RTSP / HTTP 代理各阶段的超时处理
  • 支持 URL path 中包含有 time placeholder 的时间处理
  • 优化 RTSP 时移行为,在起始时间距离当前一小时内时,使用 Range: clock= 方式来 PLAY
  • 网页播放器:修复无法匹配到 EPG 有多个 display-name 的频道