☰
mediamtx v1.21.3发布:HTTP2、转发热重载、录制稳定性、MoQ 与 HLS 全面增强
2026/11/3 10:48:10 网站建设 项目流程

发布日期:2026年11月1日

mediamtx v1.21.3 是一次覆盖范围较广的维护与功能增强版本。本次更新重点改善了 HTTP2、转发目标热重载、日志重建、录制时间戳、H264 随机访问点识别、JWT 会话过期处理、内部用户管理接口、MoQ 协议兼容性、RTMP 地址拼接、HLS MPEG-TS 兼容性、WebRTC 配置校验、UDP 组播以及树莓派摄像头文字叠加等能力。

同时,多个与音视频录制、AAC 多声道、MPEG-TS 大帧解析、证书加载协程、监听错误处理相关的问题得到修复。对于长期运行、频繁热重载、存在多协议转发和录制需求的部署环境,本版本带来了更好的稳定性与可维护性。


一、通用能力更新与稳定性修复

HTTP2 请求支持恢复

本版本恢复了 HTTP2 请求支持。

此前,服务端在 TLS ALPN 协商中不再声明 HTTP2 协议,导致 HTTP2 请求无法正常使用。现在该问题已经修复,服务端将重新在 TLS ALPN 中正确声明 HTTP2。

关联编号:6320。


转发目标热重载更加精准

转发配置在热重载时,对目标列表的比较方式得到改进。

此前,ReloadConf 按照目标在配置列表中的位置比较旧列表和新列表。如果从列表中间删除一个目标,后续所有目标的位置都会向前移动,因此会被错误识别为发生变化,进而被重启。重启会导致已有连接被断开,并重新建立连接。

现在,系统会按照目标配置内容匹配转发目标,而非仅依赖目标在列表中的位置。因此:

  • 新增目标时,仅启动新增的目标;
  • 删除目标时,仅停止被删除的目标;
  • 调整目标顺序时,不会导致未修改目标重启;
  • 未变化的目标可以持续运行并保持连接;
  • 被保留目标在 API 和日志中展示的位置会同步更新。

这一改动能够明显减少配置重载时不必要的转发中断。

关联编号:6299。


避免转发目标在切换时重叠发布

当配置发生变化且转发目标被修改时,系统将先关闭已有的转发目标,再创建新的转发目标。

此前,新旧转发目标可能在短时间内同时存在,造成重复发布。新版本通过调整创建和关闭顺序,避免转发目标重叠发布。

关联编号:6324。


HTTP 出站请求日志增强

HTTP 出站请求现在会以 debug 日志级别记录。

此前,HTTP 入站请求已经能够进行日志记录,但出站请求缺少同样的可观测性。升级后,用户可以通过 debug 级别日志同时查看 HTTP 请求的进入与发出情况,便于定位代理、认证、回调及网络通信问题。

关联编号:6325。


动态重建日志时修复竞态条件

日志配置支持动态更新,例如修改 logLevel 时,日志组件可能需要重建。

此前,在日志重建过程中,部分始终依赖日志组件的模块可能发生问题,尤其是 hooks。hooks 不会在普通日志配置变更时停止,只有整个服务关闭时才会停止,因此日志对象销毁并重建的方式可能产生竞态条件。

本版本改为安全地重新加载日志配置,而不是直接销毁日志对象,从而避免日志动态重建期间出现竞态问题。

关联编号:6206、6326。


补充链路本地 IPv6 Zone 编码说明

文档现在补充了关于链路本地 IPv6 地址 Zone 编码的说明。

关联编号:6327。


建议在可写目录中运行

文档新增了运行目录建议,以确保相关文件可正常写入。

推荐方式如下:

  • 在 Docker 中运行时,使用/etc/mediamtx;
  • 在主机 Linux 环境中运行时,使用/usr/local/etc/mediamtx。

关联编号:6369。


致命监听错误将直接退出

如果发生致命的监听错误,服务现在会直接退出。

这一调整避免服务在无法正常监听端口的状态下继续运行。

关联编号:6415。


证书加载器协程泄漏修复

CertLoader 的关闭逻辑得到修复。

此前,证书加载器的监听协程可能无法在关闭后被正确等待,存在协程泄漏风险。现在,CertLoader.Close 会等待 CertLoader.watch 完成。

关联编号:6261、6417。


二、录制功能与时间戳处理增强

录制分段名称统一使用本地时区

录制分段名称中的时间戳处理得到修复。

视频帧的绝对时间戳可能携带不同的时区。尤其是来自 HLS 源的时间戳,会保留其原始时区。当没有可用的绝对时间戳时,相关组件会使用本地时区的当前时间。

此前,这些时间戳在用于生成录制分段名称时,没有被统一规范到本地时区。于是,同一路流可能因为时间戳来源不同,产生带有不同时区的分段名称。当录制路径中没有使用%z占位符时,容易造成混乱和错误。

现在,所有传入日期在用于生成分段名称前,都会统一转换为本地时区。

关联编号:5451、6333。


默认录制路径加入时区,并对缺失时区发出警告

默认 recordPath 现在包含时区信息。

如果 recordPath 没有%z,在夏令时切换期间可能出现以下问题:

  • 录制分段被覆盖;
  • 分段被保存到错误的时间位置;
  • 同一个本地时间对应多个实际时刻时产生冲突。

因此,新版本为默认录制路径加入时区,并在录制路径没有时区信息时给出警告。

关联编号:6334。


H264 Recovery Point SEI 被视为随机访问点

对于没有 IDR 帧的 H264 流,I 帧配合 Recovery Point SEI 可以作为随机访问点。

此前,RTMP 读取端输出以及 fMP4 录制器只接受 IDR 帧作为随机访问点,单元重封装器也只会在 IDR 帧前添加 SPS 和 PPS。这样一来,DTS 提取器可能始终无法接收到 SPS。

新版本使用 H264 随机访问点判断逻辑,将 Recovery Point SEI 纳入随机访问点处理范围。MPEG-TS 输出此前已经具备对应行为。

关联编号:6349。


不再静默跳过异常 H264 单元

MPEG-TS 和 RTMP 的 H264 处理逻辑得到改进。

此前,缺少 IDR 且缺少非 IDR 图像的 H264 单元可能被静默跳过。现在不再进行静默跳过。

关联编号:6354。


修复 VP9 fMP4 录制高度错误

VP9 轨道写入 fMP4 录制文件时,视频高度识别错误的问题已修复。

此前,fMP4 录制器错误地从关键帧头部的宽度字段读取 VP9 高度,因此初始化分段会错误声明为正方形尺寸。例如,原本应为 1920×804 的视频,可能被声明为 1920×1920。

现在,系统会正确读取 VP9 的高度字段。

关联编号:6359。


修复 MPEG-1 和 MPEG-2 Audio 的 fMP4 时间戳

MPEG-1 Audio 与 MPEG-2 Audio 写入 fMP4 录制文件时,时间戳计算问题得到修复。

此前,每个样本的 DTS 被错误计算为单元 PTS 加上单元 PTS,导致:

  • 录制中的样本时长变成真实时长的两倍;
  • 一个单元中包含多帧时,这些帧会拥有相同时间戳。

现在,系统会按照每一帧的时长逐步推进 PTS,并以相同偏移量推进每帧的 NTP 时间,行为与 Opus、MPEG-4 Audio、AC-3 的处理方式一致。

关联编号:6361。


避免流时间断点导致 fMP4 分段时长异常膨胀

当 RTP 时间戳发生不连续时,例如大量丢包之后,两个连续样本的时间间隔可能变得非常大。

在 fMP4 录制中,前一个样本的时长由下一个样本 DTS 减去当前样本 DTS 得出。如果两个时间戳之间存在巨大间隔,该间隔会被写入前一个样本的时长,并进一步推动分段结束 DTS。最终,文件头中的总时长以及 runOnRecordSegmentComplete 上报的时长都会被严重放大。

例如,实际约一分钟的片段,可能被上报为数小时。

此前,NTP 与流时间漂移检测会在下一个样本到来后才触发。此时,被放大的分段可能已经被刷新和上报。

新版本将断点检测提前一个样本:当下一个样本的流时间与绝对时间的漂移超过容差时,会将当前样本的时长置零,从而避免当前分段被异常拉长。之后,原有的漂移检测机制仍会在后续样本上重置录制状态。

MPEG-TS 不受这一问题影响,因为其会在修改分段之前基于当前样本检查漂移。

这一修复与此前针对负时间差和时间漂移重置的处理形成补充。

关联编号:5984。


频繁重载时录制分段无法删除的问题修复

如果配置频繁重载,旧版本中可能出现录制分段永远无法删除的问题。

本版本已修复该问题,确保录制分段清理机制在频繁配置重载场景下能够正常工作。

关联编号:6256。


fMP4 录制分段 API 增加时长字段

API 现在会暴露 fMP4 录制分段的 duration 信息。

关联编号:6412。


三、认证、会话与内部用户管理更新

JWT 到期后自动关闭会话

会话现在会在 JWT 到期时关闭。

这项改进使认证会话的有效期能够与 JWT 的过期时间保持一致。

关联编号:4300、5813、6389。


HTTP 认证支持设置会话过期时间

HTTP 认证现在能够设置会话过期日期。

关联编号:6391。


新增内部用户管理 API

本版本新增用于管理内部用户的专用接口,不再需要通过config/global/patch并携带完整用户列表来修改单个用户。

新增接口包括:

  • /v3/config/internal-users/list
  • /v3/config/internal-users/get/{id}
  • /v3/config/internal-users/add
  • /v3/config/internal-users/patch/{id}
  • /v3/config/internal-users/replace/{id}
  • /v3/config/internal-users/delete/{id}

这些接口可用于列出、读取、添加、局部更新、替换和删除指定内部用户。

关联编号:6293。


不允许使用旧凭据访问内部用户列表接口

internal-users/list不再允许使用已废弃的凭据方式访问。

关联编号:6368。


修复 global/patch 与旧配置字段的兼容问题

global/patch 在使用旧字段时的问题已修复。

此前,如果设置了旧的webrtcICEServers参数,系统会自动填充webrtcICEServers2。而后者存在时,会阻止前者通过 global/patch 进行设置。

类似问题也存在于以下已废弃字段:

  • readUser
  • readPass
  • publishUser
  • publishPass
  • authInternalUsers

本版本修复了这些旧字段通过 global/patch 设置时的兼容性问题。

关联编号:6362、6365。


API 暴露 MoQ 会话用户信息

API 现在能够暴露 MoQ 会话所使用的用户信息。

关联编号:6390。


四、音频轨道与多声道 AAC 修复

修复常驻 8 声道 AAC 轨道拒绝 7.1 发布者的问题

当始终可用轨道配置为 8 声道 MPEG-4 Audio 时,旧版本可能拒绝 7.1 AAC 发布者,并报出 MPEG-4 Audio 配置不匹配。

问题原因是:轨道使用了通道配置值 8,但该值是保留值;而发布者使用的是配置值 7。配置值 7 实际代表 8 个声道。

现在,8 声道轨道使用通道配置值 7,其他声道数量保持不变。

关联编号:6414。


修复 API 中 7.1 AAC 声道数显示错误

当路径携带通道配置值为 7 的 MPEG-4 Audio 轨道时,例如 7.1 AAC,路径 API 的tracks2中 codecProps 字段此前可能错误显示:

"channelCount": 7

但该轨道实际拥有 8 个声道。

新版本会将通道配置值 7 正确报告为 8 声道。1 至 6 声道的显示行为不变。

关联编号:6405。


五、MPEG-TS 解析与媒体处理优化

支持包含大视频帧的 MPEG-TS 轨道读取

MPEG-TS 流中的大视频帧可能延迟音频包到达,而音频包是轨道解析所需要的数据。

本版本提高了最大缓冲区大小,以适应大视频帧场景,改善 MPEG-TS 轨道读取能力。

关联编号:4791。


停止验证 AC-3 与 EAC-3 帧

MPEG-TS 解析时,不再验证 AC-3 与 EAC-3 帧。

此类帧验证并不是 MPEG-TS 解析正常工作所必需的,同时会降低性能。因此新版本移除了这部分验证。

关联编号:395。


六、Media-Over-QUIC 更新

客户端不再等待服务端 SETUP 后才发送 SETUP

MoQ 客户端现在可以在不等待服务端 SETUP 的情况下发送客户端 SETUP。

关联编号:6396。


记录所有入站与出站 MoQ 消息

MoQ 现在会记录每一条入站和出站消息。

关联编号:6404。


修复 MoQ 中 7.1 AAC 声道数与配置映射

MoQ 客户端读取 7.1 AAC 路径时,旧版本中的 catalog 可能将声道数报告为 7,而实际应为 8。

同时,MoQ 源或发布者发送"channels": 8时,旧版本可能写入保留的通道配置值 8。正确的方式是使用通道配置值 7 来表示 8 个声道。

新版本调整后:

  • 通道配置值 7 会被报告为 8 声道;
  • 8 声道输入会使用配置值 7;
  • 7.1 轨道在转发时会继续保留配置值 7;
  • 其他声道数量的处理方式保持不变。

关联编号:6406。


支持多个 MoQ 草案版本

MoQ 新增支持以下草案版本:

  • draft-22
  • draft-21
  • draft-20

关联编号:6403。


七、RTMP 功能更新

保留 tcURL 查询参数

RTMP 在拼接 tcURL 与流密钥时,现在会正确保留 tcURL 中已有的查询参数。

新逻辑会分别解析 tcURL 和流密钥,再拼接二者的路径,从而实现以下效果:

  • tcURL 原有查询参数得以保留;
  • 流密钥中的查询参数会进行合并;
  • 已转义路径能够被保留;
  • 不需要自定义转义时,不会不必要地填充 RawPath。

关联编号:133。


支持以问号开头的流密钥

RTMP 现在支持以问号开头的流密钥。

关联编号:141。


暴露 ErrReaderUnpublish 用于优雅关闭

RTMP 库现在暴露 ErrReaderUnpublish,以便 mediamtx 在读取端取消发布时进行优雅关闭处理。

同时补充了 ErrReaderUnpublished 的补丁覆盖。

关联编号:139。


八、HLS 更新

修复 MPEG-TS HLS 变体无法处理 Opus 轨道的问题

当 HLS 变体设置为 MPEG-TS 时,如果流中包含 Opus 音频,例如通过 WebRTC 发布的 H264 与 Opus 流,旧版本可能无法通过 HLS 播放。

此前,复用器会因 MPEG-TS HLS 仅支持 MPEG-4 Audio 而启动失败,播放列表请求返回 500 错误,导致视频也无法访问。

现在,当 HLS 变体为 MPEG-TS 时,系统会跳过不是 MPEG-4 Audio 的音频轨道,行为与此前对 KLV 轨道的处理一致。

如果流中仅有这种不受支持的音频轨道,则会返回 ErrNoSupportedCodecs,而不是在复用器启动时失败。

关联编号:6387。


修复 MPEG-TS HLS 变体无法处理多个 AAC 轨道的问题

当 HLS 变体设置为 MPEG-TS,且流中含有多个 MPEG-4 Audio 轨道时,例如通过 SRT 接收的 H264 加两个 AAC 轨道,旧版本可能启动失败。

原因是 MPEG-TS HLS 只支持单个音频轨道。此前复用器会报错,播放列表请求可能返回 500,视频同样无法读取。

现在,系统会保留第一个 MPEG-4 Audio 轨道,并跳过后续 MPEG-4 Audio 轨道,处理方式与跳过其他不支持音频编码的策略一致。

关联编号:6394。


HLS 复用器支持 H264 Recovery Point

HLS 复用器现在支持 H264 Recovery Point。

关联编号:403。


HLS 不再静默跳过异常 H264 单元

HLS 处理 H264 时,不再静默跳过缺少 IDR 和非 IDR 图像的单元。

关联编号:405。


增加 AI 警告

HLS 相关组件增加 AI 警告。

关联编号:406。


九、WebRTC 与 UDP 更新

禁止同时使用两个 WebRTC ICE Servers 配置字段

现在不允许同时使用webrtcICEServers与webrtcICEServers2。

关联编号:6367。


UDP 组播源支持 interface=all

UDP 组播源重新支持在所有具备组播能力的网络接口上监听数据包。

配置 UDP 组播 URL 时,可以在地址末尾增加:

interface=all

关联编号:6253。


十、树莓派摄像头更新

文字叠加支持换行

树莓派摄像头的文字叠加功能现在支持换行符。

关联编号:5763。


十一、依赖更新

本版本同步升级了多个依赖组件:

  • bytefmt:从 v0.92.0 升级至 v0.95.0;
  • gohlslib/v2:从 v2.4.6 升级至 v2.4.7;
  • gortmplib:从 v1.0.4 升级至 v1.0.5;
  • mediacommon/v2:从 v2.9.6 升级至 v2.9.7;
  • gookit/color:从 v1.6.1 升级至 v1.6.3;
  • argon2:从 v1.6.3 升级至 v1.6.4;
  • ice/v4:从 v4.4.5 升级至 v4.4.8;
  • webrtc/v4:从 v4.2.22 升级至 v4.2.24;
  • go-proxyproto:从 v0.15.0 升级至 v0.16.0;
  • quic-go:从 v0.63.0 升级至 v0.64.1;
  • x/crypto:从 v0.57.0 升级至 v0.58.0;
  • x/sync:从 v0.23.0 升级至 v0.24.0;
  • x/sys:从 v0.48.0 升级至 v0.49.0;
  • x/term:从 v0.46.0 升级至 v0.47.0;
  • dtls/v3:从 v3.1.9 升级至 v3.1.13;
  • sctp:从 v1.11.3 升级至 v1.12.0;
  • x/net:从 v0.59.0 升级至 v0.61.0;
  • x/text:从 v0.42.0 升级至 v0.43.0;
  • mediamtx-rpicamera:从 v2.9.0 升级至 v2.9.1。

十二、安全性与二进制校验

发布二进制文件由发布工作流基于源代码编译生成。该流程完全可见,可防止生成产物在构建过程中被修改或受到外部干扰。

二进制文件的校验和也会通过 GitHub Attestations 发布到公开区块链中,可使用以下命令进行验证:

lsmediamtx_*|xargs-L1gh attestation verify--repobluenviron/mediamtx

也可以下载checksums.sha256文件,再通过以下命令校验二进制文件:

catchecksums.sha256|grep"$(lsmediamtx_*)"|sha256sum--check

总结

代码地址:github.com/bluenviron/mediamtx

mediamtx v1.21.3 的更新核心集中在稳定性、协议兼容性、录制准确性和运维可观测性。

HTTP2 支持恢复、转发热重载优化、日志动态重建修复、致命监听错误退出以及证书加载器协程回收,提升了服务端运行稳定性。录制部分针对时区、夏令时、H264 随机访问点、VP9 尺寸、MPEG 音频时间戳和 RTP 时间断点进行了集中修复,使 fMP4 录制的文件信息和分段时长更加可靠。

在协议兼容性方面,MoQ 支持多个草案版本,RTMP 改善 tcURL 与流密钥拼接,HLS MPEG-TS 变体能够更合理地跳过不支持的音频轨道,UDP 组播支持全部可用接口监听。再加上内部用户管理 API、JWT 会话到期关闭、AAC 7.1 声道映射修复以及多项依赖升级,v1.21.3 为多协议流媒体服务的部署、维护和扩展提供了更完善的基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询