ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

mediamtx v1.21.1发布:浏览器请求安全加固、HLS 会话重构、WebRTC 播放修复与全链路媒体兼容性升级

mediamtx v1.21.1发布:浏览器请求安全加固、HLS 会话重构、WebRTC 播放修复与全链路媒体兼容性升级 2026 年 9 月 24 日mediamtx 发布 v1.21.1 最新版本。本次更新重点覆盖通用安全、配置认证、H265 与 MP4 媒体处理、RTSP、RTMP、HLS、WebRTC以及大量依赖组件升级。从更新内容来看v1.21.1 并非单一功能版本而是一次围绕“安全性、协议兼容性、长时间流稳定性、浏览器播放体验、会话管理效率”展开的集中修复版本。尤其是浏览器 POST 请求来源校验、HLS 会话生命周期重构、DJI 无人机流兼容性修复、AV1 浏览器播放卡住处理等内容对生产环境中的流媒体服务稳定性具有直接意义。一、通用功能与安全浏览器 POST 请求必须校验允许来源本次版本首先对浏览器发起的 POST 请求进行了安全强化。此前浏览器可以在不执行预检请求的情况下发送 POST 请求同时浏览器也不会主动确认请求来源是否位于Access-Control-Allow-Origin允许范围内。这样的行为可能导致服务端仅依赖浏览器侧跨域机制而没有对请求来源执行足够的服务端校验。v1.21.1 针对这一情况进行了处理服务端会拦截来自浏览器的 POST 请求并检查请求的来源是否被允许。如果请求来源不在允许列表内服务端将直接阻止该请求。这项改动对应事项 6238。它让来源控制不再仅依赖浏览器的预检流程而是通过服务端主动校验补足安全边界。对于存在浏览器控制接口、网页播放器控制接口或浏览器侧 API 调用的部署场景这项改动尤为重要。二、配置与认证修复默认内部认证用户的比较和共享问题v1.21.1 修复了配置系统中默认authInternalUsers的比较与共享问题对应事项 6205。authInternalUsers用于内部认证用户相关配置。默认配置对象在比较或共享时如果处理不正确可能导致配置判断结果异常或者使多个配置使用场景之间出现不符合预期的共享行为。此次修复聚焦默认认证用户配置的比较逻辑与共享逻辑使默认值在处理过程中更加正确、稳定。三、H265 与媒体基础能力修复长期参考帧 DTS 提取在 H265 流处理方面v1.21.1 修复了包含长期参考图片流的 DTS 提取问题。H265 视频流中可能包含长期参考图片。对于这类流如果 DTS 提取逻辑不正确就可能影响时间戳处理和后续封装、转发或播放流程。本次修复来自媒体公共组件更新对应事项 371。修复后包含长期参考图片的 H265 流可以得到正确的 DTS 提取结果。四、MP4 与分段 MP4提升封装、解析与长时间媒体轨道兼容性v1.21.1 对普通 MP4 与分段 MP4 的支持进行了多项重要修复覆盖样本大小、H265 SPS 校验、缺少编辑列表、读取定位错误、时序字段和超长轨道等场景。1. 支持固定样本大小的 stsz本次更新支持stsz中使用固定样本大小的媒体文件对应事项 5803 和媒体组件事项 373。stsz是 MP4 中与样本大小相关的结构。当媒体轨道使用固定样本大小时解析逻辑需要正确识别这一模式。此前如果相关支持不足可能导致特定 MP4 文件无法被正常处理。v1.21.1 增加这一兼容能力后可正确支持使用固定样本大小的stsz结构。2. 恢复入站 H265 SPS 检查普通 MP4 与分段 MP4 均恢复了对入站 H265 SPS 的检查对应媒体组件事项 374。有效的 H265 SPS 是重新封装 MP4 所必需的数据。如果没有有效 SPS就无法正确生成或回写 MP4。因此本次版本恢复了对入站 H265 SPS 的校验。这一调整意味着当输入 H265 流中的 SPS 无效时系统会重新执行必要检查而不是继续进入可能无法正确封装 MP4 的流程。3. 支持没有 edts 的轨道v1.21.1 支持没有edts的 MP4 轨道对应媒体组件事项 375。根据 ISO/IEC 14496-12 的 8.6.5 节编辑框是可选的。此前没有edts的轨道可能会被拒绝并返回类似“unexpected box ‘mdia’”的错误。本次修复后缺少edts的媒体轨道不会再因为这一可选结构不存在而被错误拒绝。4. 正确返回 GetPayload 的 seek 错误本次更新修复了GetPayload在定位读取时未正确返回 seek 错误的问题对应媒体组件事项 376。此前GetPayload在执行 seek 后检查了错误的变量。因此当 seek 失败时错误可能被忽略读取操作会从读取器的当前位置继续执行。这种情况可能造成读取位置错误进而导致载荷读取结果不正确。v1.21.1 修复后seek 失败会被正确识别并返回避免从错误位置读取媒体载荷。5. 正确填充 HvcC 的 NumTemporalLayers 与 TemporalIdNested普通 MP4 与分段 MP4 均修复了 HvcC 参数填充问题对应媒体组件事项 379。本次修复会根据 H265 SPS 正确填充以下字段NumTemporalLayersTemporalIdNested这两个字段与 H265 视频的时间层信息相关。此前如果未根据 SPS 正确填写可能导致生成的 HvcC 配置信息不完整或不准确。6. 支持超过 2 的 32 次方时间刻度的轨道v1.21.1 支持时长超过 2 的 32 次方 ticks 的媒体轨道对应媒体组件事项 377。对于超长时间运行的流、长时长录像或时间刻度累计较大的 MP4 轨道时间值可能超过传统 32 位范围。此前这样的轨道可能无法被正确处理。本次更新提升了 MP4 对超长轨道的兼容能力。五、RTSPMJPEG、MPEG-4 Audio LATM 与 SDP 解析修复RTSP 相关改动覆盖 MJPEG、MPEG-4 Audio LATM 和 SDP 三部分。1. 拒绝保留的 MJPEG 量化值 127本次版本修复 RTP MJPEG 对量化值的校验逻辑对应 RTSP 组件事项 1161。RFC 2435 中规定量化值 100 到 127 为保留值。此前的判断条件使用了Quantization 127导致量化值 127 没有被正确拒绝。v1.21.1 修复后会拒绝保留量化值 127从而使校验行为符合保留值范围要求。2. MPEG-4 Audio LATM 复用配置层不再触发异常退出本次更新修复了 MPEG-4 Audio LATM 在某个层复用配置时可能发生异常退出的问题对应 RTSP 组件事项 1162。当某个 LATM 层复用已有配置时处理逻辑需要正确识别并使用已有配置。此前这一场景可能导致程序发生异常退出。修复后复用配置的层可以被正确处理不再因该情况触发异常。3. SDP 支持 origin 中的超大数值v1.21.1 提升了 SDP 的兼容性支持 origin 字段中的超大数字对应事项 5949 与 RTSP 组件事项 1171。SDP 的 origin 信息中可能出现超出普通数值处理范围的大型数字。此前如果解析逻辑无法处理这类数值就可能导致 SDP 解析失败。本次修复后SDP origin 中的超大数值能够被支持。六、RTMPH265 配置字段修复与 DJI 独立 SEI 支持RTMP 部分同样包含两项针对视频流兼容性的改动。1. 根据 SPS 正确填充 HvcC 时间层字段RTMP 处理逻辑中也修复了 HvcC 的NumTemporalLayers和TemporalIdNested填充问题对应 RTMP 组件事项 129。修复方式与 MP4、分段 MP4 部分一致从 H265 SPS 中提取相关信息并据此正确填写 HvcC 字段。2. 支持来自 DJI 无人机的独立 SEIv1.21.1 的 RTMP reader 支持来自 DJI 无人机流中的独立 SEI对应事项 5221 和 RTMP 组件事项 130。部分 DJI 无人机输出的视频流会包含独立存在的 SEI 单元。此前如果读取逻辑无法正确处理这些独立 SEI可能影响流的后续解析或播放。本次更新增加对这一类独立 SEI 的支持。七、HLS会话由服务器统一管理关闭后的返回语义更准确HLS 是本次版本改动较集中的模块之一核心方向是会话管理重构与关闭状态下的响应优化。1. HLS 会话改由服务器管理v1.21.1 让 HLS 服务器负责管理会话对应事项 6239。此前HLS 会话的生命周期与 muxer 存在关联。此次调整后会话生命周期从 muxer 中分离出来由 HLS 服务器统一管理。这一改动带来性能提升。原因在于查找会话时现在只需要遍历单个互斥锁而不再需要像此前一样经过两个通道。因此本次 HLS 会话重构包含两层变化会话生命周期不再绑定 muxer会话查找路径更简化只需经过单个互斥锁。2. muxer 已关闭但会话仍有效时返回 404本次版本修复了一个 HLS 会话与 muxer 关闭后的状态判定问题对应事项 5736 和 6240。HLS muxer 关闭后相关 HLS 会话会保留最多 30 秒。在这段时间内服务器仍可处理属于这些会话的入站请求。这一机制的目的是让服务器能够将此类请求正确分类为 404而不是错误地归类为 401。也就是说当会话仍然有效但对应 muxer 已关闭时服务端将返回 404。3. 会话不存在时调整错误信息v1.21.1 还修改了 HLS 会话未找到时返回的错误信息对应事项 6241。新的行为与 RTSP 保持一致当会话不存在时返回“session not found”一类的会话未找到信息而不是返回“authentication error”。认证错误应仅用于创建会话时的认证失败而不应被用于已经进入会话使用阶段、但目标会话不存在的情况。这一改动让 HLS 的错误语义更加准确创建会话失败时认证错误仍用于认证场景使用会话时找不到会话则返回会话未找到信息。4. muxer 关闭时返回 404HLS muxer 本身也调整为在关闭状态下返回 404对应 HLS 组件事项 394。这一调整与前述会话保留、关闭后请求分类逻辑相互配合使关闭状态下的 HTTP 响应更加清晰。八、WebRTC解决 AV1 卡住问题修复 DJI 无人机视频解码停滞WebRTC 部分包含两个直接影响浏览器播放体验的修复以及一个网络接口配置能力补充。1. 通过移除填充数据修复 AV1 播放卡住v1.21.1 修复了 AV1 视频在浏览器中可能卡住的问题对应事项 5632、5774 和 6242。多个编码器会生成 AV1 OBU padding也就是 OBU 填充数据。实际验证表明移除这些填充数据能够解决大多数浏览器播放此类流时卡住的情况。因此本次更新会剥离 AV1 OBU padding以改善浏览器播放稳定性。该修复主要针对浏览器播放场景解决部分 AV1 流在播放过程中停滞的问题。2. 过滤特定 DJI SEI修复浏览器解码卡住v1.21.1 修复了 DJI 无人机流在浏览器中出现视频解码卡住的问题对应事项 5221、6051 和 6243。DJI 无人机视频流中包含某些 SEI 单元这些单元具有以下特征SEI payload type 为 5包含特定 UUID。这些 SEI 单元似乎会导致 Chrome 和 Firefox 中的视频播放停滞。为处理这一问题本次版本会过滤掉这些特定 SEI 单元。需要注意的是这与 RTMP 部分支持独立 SEI 的更新并不矛盾RTMP reader 增加了对 DJI 独立 SEI 的支持而 WebRTC 则针对会导致浏览器解码停滞的特定 SEI 内容进行过滤。3. 支持排除网络接口WebRTC 新增了排除网络接口的能力对应事项 5788。通过这一能力可以在 WebRTC 网络接口选择过程中排除指定接口。九、依赖组件升级媒体、网络、加密、WebRTC 与数据处理组件全面更新v1.21.1 同步更新了多项依赖涉及字节格式化、密钥处理、MP4、HLS、RTMP、RTSP、媒体处理、性能分析、加密、ICE、SDP、传输、WebRTC、数据库、文本处理、协议缓冲等模块。以下为本次更新的完整依赖变更。code.cloudfoundry.org/bytefmt从v0.88.0更新至v0.90.0github.com/MicahParks/keyfunc/v3从v3.8.1更新至v3.8.2github.com/abema/go-mp4从v1.7.1更新至v1.7.3github.com/bluenviron/gohlslib/v2从v2.4.4更新至v2.4.5github.com/bluenviron/gortmplib从v1.0.2更新至v1.0.3github.com/bluenviron/gortsplib/v5从v5.6.5更新至v5.6.6github.com/bluenviron/mediacommon/v2从v2.9.4更新至v2.9.5github.com/gin-contrib/pprof从v1.5.4更新至v1.5.5github.com/matthewhartstonge/argon2从v1.5.7更新至v1.6.3github.com/pion/ice/v4从v4.4.1更新至v4.4.2github.com/pion/interceptor从v0.1.47更新至v0.1.48github.com/pion/sdp/v3从v3.0.19更新至v3.0.20github.com/pion/transport/v4从v4.1.0更新至v4.1.1github.com/pion/webrtc/v4从v4.2.19更新至v4.2.20golang.org/x/crypto从v0.55.0更新至v0.57.0golang.org/x/net从v0.58.0更新至v0.59.0golang.org/x/sync从v0.22.0更新至v0.23.0golang.org/x/sys从v0.47.0更新至v0.48.0golang.org/x/term从v0.45.0更新至v0.46.0github.com/bytedance/gopkg从v0.1.3更新至v0.1.4github.com/bytedance/sonic从v1.15.0更新至v1.15.2github.com/bytedance/sonic/loader从v0.5.0更新至v0.5.1github.com/cloudwego/base64x从v0.1.6更新至v0.1.7github.com/gabriel-vasile/mimetype从v1.4.12更新至v1.4.13github.com/gin-contrib/sse从v1.1.0更新至v1.1.1github.com/go-playground/validator/v10从v10.30.1更新至v10.30.3github.com/goccy/go-json从v0.10.5更新至v0.10.6github.com/klauspost/cpuid/v2从v2.3.0更新至v2.4.0github.com/mattn/go-isatty从v0.0.20更新至v0.0.23github.com/pelletier/go-toml/v2从v2.2.4更新至v2.4.3github.com/pion/dtls/v3从v3.1.5更新至v3.1.8github.com/pion/mdns/v2从v2.1.0更新至v2.2.0github.com/pion/srtp/v3从v3.0.13更新至v3.0.15github.com/pion/stun/v3已移除github.com/pion/turn/v5从v5.0.13更新至v5.1.0go.mongodb.org/mongo-driver/v2从v2.5.0更新至v2.8.0golang.org/x/arch从v0.22.0更新至v0.29.0golang.org/x/text从v0.41.0更新至v0.42.0google.golang.org/protobuf从v1.36.10更新至v1.36.11新增github.com/pion/stun/v4版本为v4.0.0hls.js从v1.7.2更新至v1.7.3十、发布安全从源码构建、公开流程与二进制校验能力v1.21.1 的二进制文件由 Release 工作流从源代码编译生成。该发布流程完全公开可以防止发布产物在构建过程中被修改或受到外部干扰。同时二进制文件的校验和会通过 GitHub Attestations 发布到公共区块链中并可使用以下命令验证lsmediamtx_*|xargs-L1gh attestation verify--repobluenviron/mediamtx还可以下载checksums.sha256文件并执行以下命令验证二进制校验和catchecksums.sha256|grep$(lsmediamtx_*)|sha256sum--check十一、版本总结代码地址github.com/bluenviron/mediamtxmediamtx v1.21.1 的更新重点可以归纳为以下几个方面浏览器 POST 请求增加允许来源服务端校验修复默认内部认证用户配置的比较和共享改进 H265 长期参考图片流的 DTS 提取强化 MP4、分段 MP4 对样本大小、SPS、编辑列表、长轨道和 HvcC 参数的兼容能力修复 RTSP 中 MJPEG、MPEG-4 Audio LATM、SDP 的边界问题改进 RTMP 对 H265 配置及 DJI 无人机独立 SEI 的处理重构 HLS 会话管理机制并优化 muxer 关闭后的 404 响应行为修复 WebRTC 中 AV1 OBU padding 导致的浏览器播放卡住问题过滤可能导致浏览器解码停滞的 DJI 特定 SEI增加 WebRTC 排除网络接口的能力升级媒体处理、网络传输、WebRTC、加密、数据库及多个基础依赖提供发布构建来源与二进制校验验证方式。对于使用 HLS、WebRTC、RTMP、RTSP、MP4 录像或 H265 视频流的场景mediamtx v1.21.1 将重点改善安全校验、协议兼容、长时间流处理和浏览器播放稳定性。
返回列表