公司动态

mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级

📅 2026/8/6 1:01:55
mediamtx v1.19.3正式发布:认证安全、WebRTC跨域、MoQ稳定性、RTSP与HLS全面升级
2026年8月5日MediaMTX 发布 v1.19.3 版本。本次更新覆盖通用功能、API、Media-Over-QUIC、WebRTC、RTSP、HLS、SRT 以及依赖库升级等多个方向。此次版本的重点非常明确一是进一步收紧认证与跨域访问的安全边界二是修复媒体时间戳、播放、UDP 端口、RTCP 解析等影响稳定性的关键问题三是增强 Media-Over-QUIC 的启动可靠性、内存保护能力和协议兼容性四是补充流在线与离线状态相关的自动化钩子能力。对于正在使用 MediaMTX 构建 RTSP、RTMP、SRT、HLS、WebRTC 或 Media-Over-QUIC 流媒体服务的用户来说v1.19.3 是一次兼顾安全性、稳定性与可维护性的版本更新。版本信息版本v1.19.3发布时间2026年8月5日项目github.com/bluenviron/mediamtx本次更新核心看点v1.19.3 的更新内容可以概括为以下几个重点修复all与all_others的同义词错误提示问题。支持通过空环境变量清空指定列表配置。新增runOnOnline与runOnOffline钩子。将runOnReady重命名为runOnAvailable。将runOnNotReady重命名为runOnUnavailable。修复alwaysAvailableFile播放时 PTS 错误及节奏异常问题。使用常量时间比较方式验证 SHA256 凭据降低时序攻击风险。统一认证失败日志与认证错误处理逻辑。针对不支持提交凭据的协议避免无意义地等待认证信息。增加 fail2ban 集成文档。OpenAPI 的大部分枚举与结构体改为自动生成。修复 Media-Over-QUIC 启动竞争、异常崩溃、内存分配风险和重排序器 CPU 占用问题。支持 Media-Over-QUIC draft-19 规范并支持重复订阅同一轨道。修复 WebRTC 和 HLS 在通配跨域配置下可能出现的跨域未授权访问问题。限制 RTSP UDP 端口范围为 32768-60999。改进 RTSP 外部认证、RTCP 解析、SDP 处理、UDP 端口释放等能力。修复 SRT 与 StreamToStudio 应用的兼容性问题。升级多项 Go、Pion、RTSP、HLS、加密和网络相关依赖。通用功能更新配置、钩子、播放与认证全面优化修复all同义词错误提示本次更新修复了all是all_others同义词时的错误信息问题。在配置或权限规则相关场景中all与all_others之间存在同义关系。此前在出现相关错误时提示信息存在问题。v1.19.3 修正了这一错误提示使配置错误或参数错误能够得到更准确的反馈。对应更新编号5922。环境变量支持通过空值清空列表v1.19.3 改进了环境变量配置能力。以下环境变量现在可以通过设置为空值的方式清空其对应的列表配置MTX_AUTHINTERNALUSERS_0_IPSMTX_LOGDESTINATIONSMTX_RTSPTRANSPORTS这项改进解决了使用环境变量覆盖配置时无法清空原有列表的问题。也就是说当部署环境需要通过环境变量控制内部认证用户 IP 列表、日志输出目标或 RTSP 传输方式时现在可以直接传入空值以清空对应配置项。对应更新编号5410、5924。新增runOnOnline与runOnOffline钩子v1.19.3 新增了两个钩子runOnOnlinerunOnOffline这两个钩子用于处理流在线与流离线状态。其中runOnOnline会在流真正在线时触发。这里的“在线”并不只是存在离线片段而是指流已经处于在线状态。runOnOffline则会在流离线时触发。对于需要根据流状态执行自动化操作的场景这两个钩子提供了新的能力。例如用户可以根据流在线或离线状态联动外部处理逻辑。此次更新明确区分了在线状态与仅由离线片段提供内容的情况。对应更新编号5399、5956。钩子名称调整Ready 与 NotReady 更名本次版本对两个原有钩子进行了重命名runOnReady重命名为runOnAvailablerunOnNotReady重命名为runOnUnavailable新的名称更直接地表达了流可用与不可用的状态含义。其中runOnAvailable表示流可用时触发。runOnUnavailable表示流不可用时触发。结合新增的runOnOnline与runOnOfflineMediaMTX 在流状态事件方面形成了更清晰的命名体系分别覆盖可用、不可用、在线、离线等不同状态。对应更新编号5957。修复 alwaysAvailableFile 的 PTS 与播放节奏问题v1.19.3 修复了alwaysAvailableFile的错误 PTS 和错误播放问题。此前样本的 PTS 偏移量没有被正确处理。同时样本之间的等待时间使用了基于 PTS 的方式而不是基于 DTS 的方式。本次修复包括两部分正确考虑样本的 PTS 偏移量。将样本之间的等待逻辑从 PTS 基础调整为 DTS 基础。PTS 与 DTS 的处理对于媒体播放时序非常重要。此次更新针对alwaysAvailableFile的时间戳处理逻辑进行修正解决了可能出现的播放异常问题。对应更新编号5436、5960。SHA256 凭据验证改为常量时间比较本次版本提升了 SHA256 凭据验证过程的安全性。此前使用运算符比较 SHA256 凭据时比较操作会在发现不匹配后提前结束。这样的短路行为可能受到时序攻击影响。v1.19.3 改为使用ConstantTimeCompare进行比较以避免这一攻击向量。常量时间比较不会因为字符在不同位置出现不匹配而产生不同的提前结束行为从而降低攻击者通过比较耗时推测凭据内容的风险。对应更新编号5961。认证错误信息统一化v1.19.3 对认证错误日志进行了统一和规范化处理。本次调整包括尽可能早地记录认证错误。将认证错误日志级别设为warn。无论认证来源或协议是什么使用相同的认证错误信息。通过统一认证错误处理逻辑MediaMTX 的日志行为更加一致认证失败事件也能够更早被记录。对应更新编号5421、5959。调整代码以避免安全扫描误报本次更新对部分代码进行了调整以避免安全扫描工具产生误报。调整内容涉及字符串转义相关问题。此外还增加了注释以进一步避免安全扫描工具的误判。对应更新编号5963、5973。仅在支持凭据输入的协议中请求凭据v1.19.3 优化了认证请求流程。当客户端通过某些协议连接时例如 SRT、RTMP客户端无法在被要求时提供凭据。在这种情况下继续等待凭据没有实际意义。因此本次更新调整为对于不支持提供凭据的协议不再无意义地等待凭据。立即记录认证错误。立即应用防暴力破解算法。这一调整能够避免不支持凭据交互的连接长时间停留在无效认证等待状态同时让认证失败处理和防暴力破解逻辑更及时生效。对应更新编号5966。新增 fail2ban 集成文档v1.19.3 增加了 fail2ban 集成文档。结合本次认证错误统一化、认证失败日志提前记录以及防暴力破解逻辑的调整fail2ban 集成文档为用户提供了关于外部防护工具集成的说明。对应更新编号5016、5967。API 更新大部分 OpenAPI 内容自动生成在 API 方面v1.19.3 改进了 OpenAPI 的生成方式。本次更新实现了大部分 OpenAPI 内容自动生成其中包括枚举自动生成。结构体自动生成。自动生成能够消除部分不一致问题同时使开发维护更加容易。对于 API 使用者而言这意味着 OpenAPI 中枚举和结构体的描述将通过自动生成机制保持更一致的状态。对应更新编号5918。Media-Over-QUIC 更新启动、内存、协议与性能同步增强Media-Over-QUIC 是本次版本改进较为集中的模块之一。v1.19.3 修复了启动过程中的竞争条件增强了远端输入数据下的内存保护提升了协议支持能力并优化了重排序逻辑的 CPU 使用方式。修复启动过程中的竞争条件本次更新修复了 Media-Over-QUIC 在启动阶段可能出现的竞争条件。修复方式是只有在 MoQ 服务器完成初始化后才分配 HTTP 服务器。这样可以避免 HTTP 服务器在 MoQ 服务器尚未初始化完成时被提前创建从而降低启动过程中的并发竞争风险。对应更新编号5965。修复多个 panic 与 OOM 问题v1.19.3 修复了 Media-Over-QUIC 中多个 panic 和 OOM 问题。本次改进的关键点在于对于来自远端对等方的大小参数在进行内存分配前先检查限制。具体来说MediaMTX 不再直接依据远端传入的大小进行内存分配而是在分配前对大小进行限制检查。这可以避免由远端输入的异常大小参数引发过大内存分配问题。同时本次更新还为所有 MoQ 基础组件增加了模糊测试。对应更新编号5964。支持 draft-19 规范与同一轨道重复订阅v1.19.3 支持 Media-Over-QUIC 规范 draft-19。除此之外还支持对同一轨道进行多次订阅。这一更新使 MediaMTX 的 MoQ 协议支持能力与 draft-19 规范保持一致并扩展了轨道订阅行为。对应更新编号5968。防止重排序器过度消耗 CPU本次版本修复了重排序器可能出现的过度 CPU 消耗问题。此前重排序逻辑会基于由用户传入的maxGroupID进行迭代。如果该值过大可能导致过多循环操作。v1.19.3 改为根据内部待处理数据包进行迭代而不再根据由用户控制的maxGroupID直接迭代。也就是说重排序器现在围绕内部待处理数据包工作而不是围绕外部输入的最大组标识进行循环从而避免用户输入导致的过度 CPU 消耗。对应更新编号5976。WebRTC 更新修复通配跨域下的未授权访问问题v1.19.3 修复了 WebRTC 中可能存在的跨域未授权访问问题。问题出现的条件是用户此前通过浏览器向某个 MediaMTX 实例输入过凭据。AllowOrigins被设置为通配符。用户随后访问第三方网站。在此前的行为下第三方网站可能在没有限制的情况下读取流。本次更新通过调整Access-Control-Allow-Origins响应头解决这一问题当AllowOrigins配置为通配符时返回*作为Access-Control-Allow-Origins的值。这种行为会阻止浏览器向第三方网站共享凭据从而防止第三方网站借助用户此前输入的凭据读取流。对应更新编号5975。RTSP 更新端口范围、认证、RTCP、SDP 与资源释放修复RTSP 模块在 v1.19.3 中获得多项更新包括 UDP 端口范围限制、外部认证会话标识支持、64 位数值处理、摄像机 RTCP 兼容性、SDP 数据结构处理以及客户端 UDP 端口释放与端口耗尽错误处理。限制 UDP 端口范围为 32768-60999v1.19.3 将 RTSP 使用的 UDP 端口范围限制为32768-60999这一范围是 Linux 默认的临时端口范围。通过将 UDP 端口范围限制到该区间RTSP UDP 传输使用的端口范围与 Linux 默认临时端口范围保持一致。对应更新编号5398、5958。外部认证服务请求中使用会话 ID本次更新使 RTSP 在请求外部认证服务器时使用会话 ID。这意味着RTSP 与外部认证服务之间的请求可以携带会话标识信息。对应更新编号5977。防止 32 位平台上的 64 位数值截断v1.19.3 修复了在 32 位平台上可能发生的 64 位数值截断问题。该修复来自 RTSP 相关依赖更新目标是防止 64 位数值在 32 位平台上被错误截断。对应依赖更新编号1094。修复部分摄像机的 RTCP 解析问题本次版本修复了部分 Hanwha 摄像机的 RTCP 解析问题。RTCP 是实时传输控制协议解析兼容性问题可能影响实时流传输过程中的控制信息处理。v1.19.3 针对部分摄像机产生的 RTCP 数据进行了兼容性修复。对应依赖更新编号5355、1099。使用原始 SDP SessionDescriptionv1.19.3 不再使用自定义的 SDPSessionDescription而是改用原始的pion/sdp.SessionDescription。同时解组器被移动到sdpunmarshaler中。这项调整涉及 SDP 会话描述处理方式与解组逻辑的位置调整。对应依赖更新编号1100。修复客户端关闭后 UDP 端口未释放的问题本次更新修复了 RTSP 客户端在关闭后 UDP 端口没有被释放的问题。客户端结束后如果 UDP 端口没有正确释放可能导致后续端口资源无法被正常使用。v1.19.3 修正了关闭后的端口释放逻辑。对应依赖更新编号1105。UDP 端口范围耗尽时返回错误v1.19.3 增加了 UDP 端口范围耗尽时的错误返回机制。当可用 UDP 端口范围已经耗尽时客户端现在会返回错误而不是继续处于无法获得可用端口的状态。对应依赖更新编号1104。HLS 更新修复跨域未授权访问风险HLS 模块同步修复了与 WebRTC 相同的跨域未授权访问问题。问题同样出现在以下条件下用户曾通过浏览器向 MediaMTX 实例输入凭据。AllowOrigins被设置为通配符。用户访问了第三方网站。此前第三方网站可能在没有限制的情况下读取流。v1.19.3 在AllowOrigins为通配符时返回*作为Access-Control-Allow-Origins的值。通过这一行为浏览器不会向第三方网站共享用户凭据从而阻止第三方网站未经授权读取 HLS 流。对应更新编号5975。SRT 更新修复与 StreamToStudio 的兼容性在 SRT 方面v1.19.3 修复了与 StreamToStudio 应用之间的兼容性问题。这项修复提升了 MediaMTX 使用 SRT 协议与该应用进行交互时的兼容性。对应更新编号5414、5928。依赖更新清单v1.19.3 同步升级了多个依赖库覆盖字节格式化、命令行、HLS、RTMP、RTSP、媒体处理、密码学、网络、QUIC、WebRTC、ICE、DTLS、SCTP、STUN、TURN 等领域。具体升级如下code.cloudfoundry.org/bytefmt从 v0.78.0 升级到 v0.82.0github.com/alecthomas/kong从 v1.15.0 升级到 v1.16.0github.com/bluenviron/gohlslib/v2从 v2.4.0 升级到 v2.4.1github.com/bluenviron/gortmplib从 v0.4.0 升级到 v0.4.1github.com/bluenviron/gortsplib/v5从 v5.6.1 升级到 v5.6.2github.com/bluenviron/mediacommon/v2从 v2.9.1 升级到 v2.9.2github.com/matthewhartstonge/argon2从 v1.5.5 升级到 v1.5.6github.com/pion/ice/v4从 v4.2.8-0.20260604162030-72f5001c4596 升级到 v4.3.0github.com/pion/interceptor从 v0.1.45 升级到 v0.1.46github.com/pion/rtcp从 v1.2.16 升级到 v1.2.17github.com/pion/rtp从 v1.10.2 升级到 v1.10.5github.com/pion/webrtc/v4从 v4.2.15 升级到 v4.2.17github.com/pires/go-proxyproto从 v0.12.0 升级到 v0.15.0github.com/quic-go/webtransport-go从 v0.11.0 升级到 v0.11.1golang.org/x/crypto从 v0.53.0 升级到 v0.54.0golang.org/x/net从 v0.56.0 升级到 v0.57.0golang.org/x/sync从 v0.21.0 升级到 v0.22.0golang.org/x/sys从 v0.46.0 升级到 v0.47.0golang.org/x/term从 v0.44.0 升级到 v0.45.0github.com/pion/datachannel从 v1.6.0 升级到 v1.6.2github.com/pion/dtls/v3从 v3.1.4 升级到 v3.1.5github.com/pion/sctp从 v1.10.0 升级到 v1.11.0github.com/pion/stun/v3从 v3.1.5 升级到 v3.1.6github.com/pion/turn/v5从 v5.0.9 升级到 v5.0.12golang.org/x/text从 v0.38.0 升级到 v0.40.0安全与二进制完整性验证MediaMTX 的二进制文件由 Release 工作流从源代码编译生成。该工作流是完全可见的流程用于防止已生成构件在产物生成过程中被修改或受到外部干扰。二进制文件的校验和还会通过 GitHub Attestations 发布到公开区块链中可以使用以下命令进行验证lsmediamtx_*|xargs-L1gh attestation verify--repobluenviron/mediamtx此外也可以下载checksums.sha256文件后通过以下命令验证二进制文件校验和catchecksums.sha256|grep$(lsmediamtx_*)|sha256sum--check总结MediaMTX v1.19.3 是一次覆盖面广、针对性明确的更新。在安全层面本次版本强化了 SHA256 凭据比较方式统一了认证失败处理逻辑改进了不支持凭据协议的认证处理流程并修复了 WebRTC 与 HLS 通配跨域配置下可能导致第三方网站读取流的未授权访问问题。在稳定性层面Media-Over-QUIC 修复了启动竞争、panic、OOM 与高 CPU 消耗问题RTSP 修复了 UDP 端口释放、端口耗尽、64 位数值截断、RTCP 解析等问题alwaysAvailableFile的 PTS 与 DTS 处理也得到了修正。在功能与维护层面新增加的runOnOnline、runOnOffline钩子以及runOnAvailable、runOnUnavailable的命名调整使流状态自动化处理更清晰OpenAPI 自动生成能力则改善了 API 枚举与结构体定义的一致性。对于使用 MediaMTX 作为流媒体接入、转发、分发或协议转换服务的用户v1.19.3 包含多项值得关注的安全修复、兼容性修复与稳定性改进。