github.com/bluenviron/mediamtx
v1.20.1
#146 most downloaded on Go modules
bluenviron/mediamtx
What this package is like to depend on
Last release today
23 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Rarely documented
notes for 10 of 70 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
218 releases · first in 2023
61 releases in the last 12 months
see the full history below
Release timeline
218 releases · May 2023 to Aug 2026Releases
latest 60 of 218-
v1.20.2-0.20260823102804-7bf901ea9ae423 Aug 2026 pre-releaseNothing published for this version
-
v1.20.118 Aug 2026Release notes
Open source →Fixes and improvements
General
- prevent spamming of 'stream is closed' error during shutdown (#6062)
- impose a minimum value to clock rate of always-available tracks (#6086) Clock rates below 10 caused the emission of empty samples. Fix the issue by imposing a minimum value of 8khz, that rises to 22khz in case of AAC.
- fix race condition during sub-stream creation (#6075) (#6095) When a stream with always-available turned on switches from offline to online, or from a publisher to another, the reader mutex was not acquired during writing of codec parameters. This is now fixed.
- restore ability to run the server in a read-only file system (#6098) This was temporarily lost after the introduction of the native MoQ QUIC listener.
- fix deadlock when changing configuration through file and API (#6077) (#6101) When changing configuration in parallel by editing the configuration file and calling the API, the server could get into a deadlock that prevented any further action. This is fixed.
- change default value of authHTTPExclude (#6103) by default, do not exclude any action from HTTP authentication. Old value triggered several security warnings.
- add destFingerprint parameter (#6106) this allows to validate self-signed certificates of forward destinations.
- pmp4: fix panic in case of bad input (bluenviron/mediacommon#354) the stsc box was not checked properly. This is now fixed.
- pmp4: fix panic in case of bad input (bluenviron/mediacommon#355) The parser was not checking that the MP4 was properly sending addresses of samples, resulting in samples with invalid addresses. This is now fixed.
- pmp4, fmp4: do not emit empty payloads (bluenviron/mediacommon#353)
API
- redact password in responses (#6110) passwords are not exposed anymore through the API. They can only be set, not read.
Media-Over-QUIC
- support pulling streams from other servers (#6111)
- do not accept empty payloads (#6085)
- limit maximum amount of published tracks (#6087) this prevents clients from consuming an excessive amount of memory.
- make /moq URL suffix optional (#6107) In order to establish a MoQ session with WebTransport, a /moq suffix was required until now. This is now optional in order to allow connecting to the server with the standard MoQ URL format.
- impose maximum size on pending reordered bytes (#6112) Decrease the maximum memory that clients can take by imposing a maximum size of 100MB on the pending reordered bytes.
RTSP
- accept relative digest URI (bluenviron/gortsplib#1118) RFC 2617 section 3.2.2 allows the digest URI to be either an absolute URI or a relative path. Some clients use the latter, which was rejected with "wrong URL" since urlMatches only accepted an exact match against the absolute request URL.
- send initial RTCP sender report without waiting for a period (bluenviron/gortsplib#1052) (bluenviron/gortsplib#1111) (bluenviron/gortsplib#1120) Reports were emitted only on the ticker, so the first one arrived Period after Initialize (10s by default) and later still when no RTP packet had been sent by that first tick, since report() returns nil until then and the next opportunity is another Period away.
- ensure that decoders can produce only output that does not crash encoders (bluenviron/gortsplib#1123)
- discard empty Opus and G722 RTP packets (bluenviron/gortsplib#1131)
- improve error message when setting read buffer fails (bluenviron/gortsplib#1133)
- server: fix race condition when recording (bluenviron/gortsplib#1134) state was not protected.
RTMP
-
inform about authentication failures (#5657) (#6072) Reply with NetStream.Play.Failed or NetStream.Publish.Unauthorized when a client is not authorized to play or publish. This makes clients like OBS to stop recreating the connection in case of authentication failures.
-
reader: do not emit empty frames (bluenviron/gortmplib#106)
-
parse video PTS delta as signed (bluenviron/gortmplib#88)
HLS -
prefer hls.js on iOS too (#6090) In the embedded HLS reader, use hls.js on iOS, that was previously disabled due to compatibility issues that should have been solved.
-
unlock the session-in-query+iOS combination (#6088) this was previously blocked because the session in query was meant to be dynamic, therefore incompatible with static playlists required by iOS. It is not anymore, so we can support that.
-
stop using cookies with plain HTTP (#6089) in case of plain HTTP, fall back to query parameters, which are safer than HTTP cookies because they are not shared between different pages/domains, although they are visible in the URL.
WebRTC
- support forwarding streams (#6099)
- fix warning when IPv6 is disabled (#5733) (#6048)
- improve performance by ignoring mDNS candidates (#4963) (#6064) mDNS candidates sometimes require a large CPU portion, they are not involved in any connectivity method mentioned in the documentation, they work in local networks only.
SRT
- apply UDP read buffer size from configuration (#6069) Use upstream datarhei/gosrt's ListenerControl config field (datarhei/gosrt#144) to set SO_RCVBUF on the SRT listener's UDP socket.
RPI Camera
- fix crash when secondary stream is enabled (#6060) (#6061)
- prevent invalid MJPEG sizes (#6080) width and height of MJPEG frames must be multiple of 8 and less than 2048, otherwise they cannot be routed with RTP/RTSP.
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.83.0 to v0.85.0
- github.com/alecthomas/kong updated from v1.16.0 to v1.16.1
- github.com/asticode/go-astits updated from v1.15.0 to v1.16.0
- github.com/bluenviron/gohlslib/v2 updated from v2.4.2 to v2.4.3
- github.com/bluenviron/gortmplib updated from v1.0.0 to v1.0.1
- github.com/bluenviron/gortsplib/v5 updated from v5.6.3 to v5.6.4
- github.com/bluenviron/mediacommon/v2 updated from v2.9.2 to v2.9.3
- github.com/datarhei/gosrt updated from v0.11.0 to v0.11.1-0.20260812091715-a77b40bb4b76
- github.com/pion/ice/v4 updated from v4.4.0 to v4.4.1
- github.com/pion/transport/v4 updated from v4.0.2 to v4.1.0
- github.com/stretchr/testify updated from v1.11.1 to v1.12.0
- golang.org/x/crypto updated from v0.54.0 to v0.55.0
- golang.org/x/net updated from v0.57.0 to v0.58.0
- github.com/davecgh/go-spew removed
- github.com/pion/srtp/v3 updated from v3.0.12 to v3.0.13
- github.com/pmezard/go-difflib removed
- golang.org/x/text updated from v0.40.0 to v0.41.0
- hls.js updated from v1.6.16 to v1.7.0
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.20.1-0.20260813090539-145381e81d0f13 Aug 2026 pre-releaseNothing published for this version
-
v1.20.1-0.20260812101023-b86f02c227a012 Aug 2026 pre-releaseNothing published for this version
-
v1.20.1-0.20260811050114-8ce023fd70c911 Aug 2026 pre-releaseNothing published for this version
-
v1.20.1-0.20260808174126-8e46f37ba73b08 Aug 2026 pre-releaseNothing published for this version
-
v1.20.1-0.20260807080505-6f0faa49d18907 Aug 2026 pre-releaseNothing published for this version
-
v1.20.005 Aug 2026Release notes
Open source →New major features
General
- support forwarding streams natively (#5558) It is now possible to define forward destinations for each path configuration. For each destination, the server will create a client that will forward the stream to the intended destination. Supported protocols are RTSP, RTMP, SRT. API and metrics have also been improved to allow monitoring the new forwarding system. Documentation: https://mediamtx.org/docs/features/forward
Media-Over-QUIC
- support publishing and reading through native QUIC (#6039)
- support draft-17 (#6040)
- support draft-16 (#6045)
Fixes and improvements
General
- docs: add missing MoQ ports (#5983)
- Add OpenAPI definition of the Playback server (#5546)
- fix support for regexp groups greater than 10 (#6033)
Media-Over-QUIC
RTSP
- fix inability to read some AV1 streams with RTSP (#6001) (#6006) Since v1.16.0, temporal unit delimiters were not stripped from AV1 streams anymore. This has been restored, healing AV1 streams read with RTSP.
- log write errors (#6023)
- make multicast errors on single interfaces non-fatal (bluenviron/gortsplib#1115) (#5574) When writing multicast packets to several interfaces at one, a write error to a single interface was fatal and prevented writing to the other ones. Fix this.
RTMP
- server: fix parsing URL from multitrack OBS (#6007) (bluenviron/gortmplib#93)
- client: change mapping between URL and tcURL, app, streamKey (bluenviron/gortmplib#94) (#4676) URLs passed to clients are now mapped into RTMP-native fields (tcURL, app, streamKey) in this way: tcURL contains URL without credentials and without fragment, app contains path and query of tcURL, streamKey contains the fragment.
- client: fix compatibility with YouTube (#5558) (bluenviron/gortmplib#95)
HLS
- muxer: fix goroutine leak during part rotation (bluenviron/gohlslib#372) (bluenviron/gohlslib#373)
- muxer: remove lower limit on AAC access unit count in MPEG-TS segments (bluenviron/gohlslib#329) (bluenviron/gohlslib#377)
- muxer: recompute PTS of MPEG-TS AAC (bluenviron/gohlslib#379) iOS requires a precise timestamp that is often not available in AAC streams. Recompute timestamp from scratch.
WebRTC
- sort tracks in a deterministic way (#5988) (#5989) When ingesting tracks with WebRTC, track order was randomized, preventing multi-track always-available streams from working reliably, since they require tracks to be ordered in a precise way. WebRTC tracks are not ordered by MID, RID, trackID and streamID respectively.
- fix packet corruption when reading G722 (#6000)
- reset recomputed audio PTS if it drifts too much (#6021)
- fix "packet lost" error when routing streams from WebRTC (#6034) Chrome sometimes sends empty packets, that are discarded by the server, but the sequence number of following packets is not recomputed, leading downstream packet loss detectors to emit errors. This is fixed.
SRT
- improve log clarity (#5990) use message 'passphrase not provided by client' when clients do not provide passphrases.
- show stream ID in logs (#6018)
- close sources immediately when path is closed (#6038)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.82.0 to v0.83.0
- github.com/MicahParks/jwkset updated from v0.11.0 to v0.11.3
- github.com/MicahParks/keyfunc/v3 updated from v3.8.0 to v3.8.1
- github.com/bluenviron/gohlslib/v2 updated from v2.4.1 to v2.4.2
- github.com/bluenviron/gortmplib updated from v0.4.1 to v1.0.0
- github.com/bluenviron/gortsplib/v5 updated from v5.6.2 to v5.6.3
- github.com/go-git/go-billy/v5 updated from v5.9.0 to v5.9.1
- github.com/go-git/go-git/v5 updated from v5.19.1 to v5.19.2
- github.com/pion/ice/v4 updated from v4.3.0 to v4.4.0
- github.com/pion/interceptor updated from v0.1.46 to v0.1.47
- github.com/pion/webrtc/v4 updated from v4.2.17 to v4.2.18
- github.com/quic-go/quic-go updated from v0.60.0 to v0.61.0
- github.com/quic-go/webtransport-go updated from v0.11.1 to v0.12.0
- github.com/pion/sctp updated from v1.11.0 to v1.11.1
- golang.org/x/time updated from v0.14.0 to v0.15.0
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.19.4-0.20260725174445-a0482f937fc425 Jul 2026 pre-releaseNothing published for this version
-
v1.19.323 Jul 2026Release notes
Open source →Fixes and improvements
General
- fix error message (#5922) 'all' is a synonym for 'all_others'
- fix clearing lists with environment variables (#5410) (#5924) MTX_AUTHINTERNALUSERS_0_IPS, MTX_LOGDESTINATIONS and MTX_RTSPTRANSPORTS can now be used to clear their corresponding list by setting them to an empty value.
- add runOnOnline / runOnOffline hooks (#5399) (#5956) These are triggered and a stream is online (i.e. not just provided by an offline segment).
- rename runOnReady into runOnAvailable, runOnNotReady into runOnUnavailable (#5957)
- fix wrong PTS and wrong playback of alwaysAvailableFile (#5436) (#5960) PTS offset of samples was not properly considered, and sleep between samples was PTS-based instead of being DTS-based.
- avoid potential timing attack when validating SHA256 credentials (#5961) The == operator is vulnerable to timing attacks as it short-circuits on a mismatch. Use ConstantTimeCompare to avoid this vector. Co-authored-by: Tristan Matthews [email protected]
- normalize authentication error messages (#5421) (#5959) Log authentication errors as soon as possible, use the "warn" level, use the same message whatever the author or protocol.
- adjust code to prevent security scan false positives (#5963) about string escaping.
- ask for credentials only in case of protocols that support it (#5966) When clients connect with some protocols (SRT, RTMP), they are unable to provide credentials even if they are asked to. In this case, it's useless to wait for credentials, and it's better to immediately log authentication errors and apply the anti-brute force algorithm.
- docs: add fail2ban integration (#5016) (#5967)
- add comment to prevent security scan false positives (#5973)
- pmp4: fix support for ctts version 0 (#5436) (bluenviron/mediacommon#343)
API
- generate most of OpenAPI automatically (#5918) enums and structs are now generated automatically. This eliminates some inconsistencies and makes development easier.
Media-Over-QUIC
- fix race condition during startup (#5965) allocate the HTTP server only after the MoQ server has been initialized.
- fix several panics and OOM errors (#5964) Check for limits before allocating memory by using sizes passed from the remote peer. Also add fuzzing to all MoQ primitives.
- support draft-19 of the specification (#5968) * support draft-19 of the specification * support subscribing the same track multiple times.
- prevent excessive CPU consumption in reorderer (#5976) do not iterate by maxGroupID (passed by user) but iterate by internal pending packets (uncontrolled by user).
WebRTC
- prevent cross-origin unauthorized access (#5975) when a user had previously inserted credentials into a MediaMTX instance through a browser, and AllowOrigins was set to a wildcard, third-party websites visited by the user were allowed to read streams without restrictions. This is now prevented by returning "*" in Access-Control-Allow-Origins when AllowOrigins is a wildcard, a behavior that prevents browsers from sharing credentials with third-party websites.
RTSP
- restrict UDP port range to 32768-60999 (#5398) (#5958) this is the default Linux ephemeral port range.
- use session ID in requests to the external authentication server (#5977) Co-authored-by: Cycle1337 [email protected]
- prevent truncation of 64-bit values on 32-bit platforms (bluenviron/gortsplib#1094)
- fix parsing RTCP of some Hanwha cameras (#5355) (bluenviron/gortsplib#1099)
- use original pion/sdp.SessionDescription instead of a custom one; move unmarshaler in sdpunmarshaler (bluenviron/gortsplib#1100)
- client: fix UDP ports not being released after close (bluenviron/gortsplib#1105)
- client: return an error when UDP port range is exhausted (bluenviron/gortsplib#1104)
HLS
- prevent cross-origin unauthorized access (#5975) when a user had previously inserted credentials into a MediaMTX instance through a browser, and AllowOrigins was set to a wildcard, third-party websites visited by the user were allowed to read streams without restrictions. This is now prevented by returning "*" in Access-Control-Allow-Origins when AllowOrigins is a wildcard, a behavior that prevents browsers from sharing credentials with third-party websites.
SRT
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.78.0 to v0.82.0
- github.com/alecthomas/kong updated from v1.15.0 to v1.16.0
- github.com/bluenviron/gohlslib/v2 updated from v2.4.0 to v2.4.1
- github.com/bluenviron/gortmplib updated from v0.4.0 to v0.4.1
- github.com/bluenviron/gortsplib/v5 updated from v5.6.1 to v5.6.2
- github.com/bluenviron/mediacommon/v2 updated from v2.9.1 to v2.9.2
- github.com/matthewhartstonge/argon2 updated from v1.5.5 to v1.5.6
- github.com/pion/ice/v4 updated from v4.2.8-0.20260604162030-72f5001c4596 to v4.3.0
- github.com/pion/interceptor updated from v0.1.45 to v0.1.46
- github.com/pion/rtcp updated from v1.2.16 to v1.2.17
- github.com/pion/rtp updated from v1.10.2 to v1.10.5
- github.com/pion/webrtc/v4 updated from v4.2.15 to v4.2.17
- github.com/pires/go-proxyproto updated from v0.12.0 to v0.15.0
- github.com/quic-go/webtransport-go updated from v0.11.0 to v0.11.1
- golang.org/x/crypto updated from v0.53.0 to v0.54.0
- golang.org/x/net updated from v0.56.0 to v0.57.0
- golang.org/x/sync updated from v0.21.0 to v0.22.0
- golang.org/x/sys updated from v0.46.0 to v0.47.0
- golang.org/x/term updated from v0.44.0 to v0.45.0
- github.com/pion/datachannel updated from v1.6.0 to v1.6.2
- github.com/pion/dtls/v3 updated from v3.1.4 to v3.1.5
- github.com/pion/sctp updated from v1.10.0 to v1.11.0
- github.com/pion/stun/v3 updated from v3.1.5 to v3.1.6
- github.com/pion/turn/v5 updated from v5.0.9 to v5.0.12
- golang.org/x/text updated from v0.38.0 to v0.40.0
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.19.3-0.20260718085646-75bf1af38c7d18 Jul 2026 pre-releaseNothing published for this version
-
v1.19.3-0.20260717090736-e3b6fff9421517 Jul 2026 pre-releaseNothing published for this version
-
v1.19.3-0.20260710170057-97ae0c6f697c10 Jul 2026 pre-releaseNothing published for this version
-
v1.19.3-0.20260705090009-e98b727277ec05 Jul 2026 pre-releaseNothing published for this version
-
v1.19.3-0.20260702192529-cacc09ee93d602 Jul 2026 pre-releaseNothing published for this version
-
v1.19.3-0.20260628142924-f4decfd41b7d28 Jun 2026 pre-releaseNothing published for this version
-
v1.19.228 Jun 2026Release notes
Open source →Fixes and improvements
General
- playback: fix panic when MP4 muxer flushes with no samples (#5867)
- redact sensitive headers in HTTP debug logs (#5873)
- fix(recordstore): decode timezone offset minutes correctly (#5884)
- improve HTTP server performance (#5886) log incoming requests without cloning.
- prevent truncation of 64-bit values on 32-bit platforms (#5902)
RTSP
- add rtspScale parameter to inject Scale header on PLAY (#5800)
- client: switch automatically to TCP in case of H264 packetization-mode=0 (bluenviron/gortsplib#1086)
- support VP8 streams with multiple partitions (https://github.com/bluenviron/mediamtx/issues/5426) (bluenviron/gortsplib#1090)
- allow FU-A and STAP-A packets with H264 packetization-mode 0 (#5887) (bluenviron/gortsplib#1092)
WebRTC
- skip unresolvable webrtcAdditionalHosts entries instead of aborting (#5845)
RPI Camera
- support encoding primary stream with MJPEG (2/2) (#5892)
- support encoding secondary stream with H264 (2/2) (#4485) (#5898)
- add unified rpiCameraH264Profile, rpiCameraH264Level params (#5894) These replace rpiCameraHardwareH264Profile, rpiCameraHardwareH264Level, rpiCameraSoftwareH264Profile, rpiCameraSoftwareH264Level.
- fix race condition that prevents decoding the stream (bluenviron/mediamtx-rpicamera#109) (#5861) When a player immediately connects to a newly-created stream, SPS/PPS might not be available, neither in the SDP and neither in-band. Prevent the issue by always sending SPS/PPS in-band.
- improve performance by computing frame size once (bluenviron/mediamtx-rpicamera#111)
- fix wrong timestamp being passed to openh264 (bluenviron/mediamtx-rpicamera#114)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.76.0 to v0.78.0
- github.com/abema/go-mp4 updated from v1.6.0 to v1.7.1
- github.com/bluenviron/gortsplib/v5 updated from v5.6.0 to v5.6.1
- github.com/bluenviron/mediacommon/v2 updated from v2.9.0 to v2.9.1
- github.com/matthewhartstonge/argon2 updated from v1.5.4 to v1.5.5
- github.com/pion/sdp/v3 updated from v3.0.18 to v3.0.19
- github.com/quic-go/webtransport-go updated from v0.10.0 to v0.11.0
- github.com/pion/srtp/v3 updated from v3.0.11 to v3.0.12
- github.com/bluenviron/mediamtx-rpicamera updated from v2.6.0 to v2.8.0
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.19.2-0.20260622191404-8fcbd0a796ef22 Jun 2026 pre-releaseNothing published for this version
-
v1.19.2-0.20260620100815-d31c0b3900bc20 Jun 2026 pre-releaseNothing published for this version
-
v1.19.2-0.20260616130900-0996186cdfb916 Jun 2026 pre-releaseNothing published for this version
-
v1.19.2-0.20260613094544-874b47d0b07b13 Jun 2026 pre-releaseNothing published for this version
-
v1.19.110 Jun 2026Release notes
Open source →Fixes and improvements
General
- support using regexp groups in every part of a source URL (#5766) (#5779)
- improve anti-brute force mechanism (#5835) delay authentication failure responses by a random amount of time, use the same anti-brute force mechanism with all users.
- limit size of HTTP requests shown in debug logs (#5858)
- print body of selected HTTP responses when log level is debug (#5859)
Media-over-QUIC
- fix race condition when closing server (#5836) some sessions were hanging if they were concurrently being closed by the remote peer.
- rename moqHTTPS2Address into moqHTTP2Address, moqHTTPS3Address into moqHTTP3Address (#5841)
RTSP
- support PROXY protocol (#5754) Support PROXY protocol v1/v2 on RTMP, RTMPS, RTSP, and RTSPS TCP listeners so real client IPs are visible when running behind L4 proxies (nginx stream, HAProxy, AWS NLB).
- restore support for H264 packetization-mode 0 (#5846) (#5857) H264 streams with packetization-mode=0 cannot be routed with UDP since packets are too big. Inbound streams with packetization-mode=0 are blocked by the server since v1.19.0 but this caused compatibility issues with some cameras. The server is now able to receive such streams with TCP, and automatically remuxes them in streams with packetization-mode=1, which can be routed freely.
RTMP
- support PROXY protocol (#5754) Support PROXY protocol v1/v2 on RTMP, RTMPS, RTSP, and RTSPS TCP listeners so real client IPs are visible when running behind L4 proxies (nginx stream, HAProxy, AWS NLB).
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.74.0 to v0.76.0
- github.com/bluenviron/gortsplib/v5 updated from v5.5.4 to v5.6.0
- github.com/pion/ice/v4 updated from v4.2.7 to v4.2.8-0.20260604162030-72f5001c4596
- github.com/pion/webrtc/v4 updated from v4.2.14 to v4.2.15
- github.com/quic-go/quic-go updated from v0.59.0 to v0.60.0
- golang.org/x/crypto updated from v0.52.0 to v0.53.0
- golang.org/x/net updated from v0.55.0 to v0.56.0
- golang.org/x/sync updated from v0.20.0 to v0.21.0
- golang.org/x/sys updated from v0.45.0 to v0.46.0
- golang.org/x/term updated from v0.43.0 to v0.44.0
- github.com/pion/dtls/v3 updated from v3.1.3 to v3.1.4
- github.com/pion/stun/v3 updated from v3.1.4 to v3.1.5
- github.com/pion/turn/v5 updated from v5.0.7 to v5.0.9
- golang.org/x/text updated from v0.37.0 to v0.38.0
- github.com/pires/go-proxyproto v0.12.0 added
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.19.1-0.20260605150136-f5d7ed3138a505 Jun 2026 pre-releaseNothing published for this version
-
v1.19.002 Jun 2026Release notes
Open source →New major features
Media-over-QUIC
- support reading and publishing with Media-over-QUIC (#5815) Media-over-QUIC is a streaming protocol built upon cutting edge protocols (QUIC, HTTP3) and browser APIs (WebTransport, WebCodecs). It's slightly faster than WebRTC, has an advanced data recovery mechanism, it supports additional codecs (FLAC) and is less complicated to route. Check the documentation for instructions and details.
RTMP
HLS
Fixes and improvements
General
- Add user agent field to RTMP, RTSP, WebRTC, and HLS (#5753)
- add --check-version command line flag (#5786) this allows to check whether a new version is available without upgrading.
- use file name suffix for OS-specific code wherever possible (#5787)
- fix two hot reloading cases (#5817) * reload SRT server when metrics server is reloaded * reload API server when RTMPS server is reloaded
RTSP
- client: trigger TCP timeout only if nothing is received (bluenviron/gortsplib#1002) (bluenviron/gortsplib#968) (bluenviron/gortsplib#1067) Previously, a data packet was required, now a keepalive response from the server is enough.
- sdp: support non-standard 'meta' media type (bluenviron/gortsplib#1068)
- forbid H264 packetization mode zero (bluenviron/gortsplib#1072) Packetization mode zero requires allowing inefficient and brittle fragmented UDP packets, which we are not.
RTMP
- client: add FLAC fourCC (bluenviron/gortmplib#73)
- do not exit in case of undocumented Flash control messages (#5512) (bluenviron/gortmplib#75)
HLS
- remove redundant JavaScript argument (#5806)
- muxer: fix race condition when generating playlist (bluenviron/gohlslib#359) (bluenviron/gohlslib#360) Max age of playlist depends on segments, so it needs to be covered by the segment mutex.
- muxer: use coherent version in all playlists (#5781) (bluenviron/gohlslib#363)
WebRTC
- make JavaScript internal variables private (#5804)
- fix connectivity after network changes (#5097) (#5818)
RPI Camera
- use timestamp of frame in text overlay (#2733) (bluenviron/mediamtx-rpicamera#103)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.72.0 to v0.74.0
- github.com/abema/go-mp4 updated from v1.5.0 to v1.6.0
- github.com/bluenviron/gohlslib/v2 updated from v2.3.2 to v2.4.0
- github.com/bluenviron/gortmplib updated from v0.3.2 to v0.4.0
- github.com/bluenviron/gortsplib/v5 updated from v5.5.3 to v5.5.4
- github.com/bluenviron/mediacommon/v2 updated from v2.8.3 to v2.9.0
- github.com/go-git/go-git/v5 updated from v5.19.0 to v5.19.1
- github.com/matthewhartstonge/argon2 updated from v1.5.3 to v1.5.4
- github.com/pion/ice/v4 updated from v4.2.5 to v4.2.7
- github.com/pion/transport/v4 updated from v4.0.1 to v4.0.2
- github.com/pion/webrtc/v4 updated from v4.2.12 to v4.2.14
- golang.org/x/crypto updated from v0.51.0 to v0.52.0
- golang.org/x/net updated from v0.54.0 to v0.55.0
- golang.org/x/sys updated from v0.44.0 to v0.45.0
- github.com/pion/dtls/v3 updated from v3.1.2 to v3.1.3
- github.com/pion/sctp updated from v1.9.5 to v1.10.0
- github.com/pion/srtp/v3 updated from v3.0.10 to v3.0.11
- github.com/pion/stun/v3 updated from v3.1.2 to v3.1.4
- github.com/pion/turn/v5 updated from v5.0.3 to v5.0.7
- github.com/quic-go/webtransport-go v0.10.0 added
- golang.org/x/sync v0.20.0 added
- github.com/dunglas/httpsfv v1.1.0 added
- github.com/bluenviron/mediamtx-rpicamera updated from v2.5.7 to v2.6.0
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.18.3-0.20260531183348-0f5a76e253a731 May 2026 pre-releaseNothing published for this version
-
v1.18.3-0.20260529122720-e00c5516523c29 May 2026 pre-releaseNothing published for this version
-
v1.18.215 May 2026Release notes
Open source →Fixes and improvements
RTSP
- fix compatibility with Verint.Vms.MediaGateway (#5292) (bluenviron/gortsplib#1061)
- fix crash when stream is closing (bluenviron/gortsplib#1062) when ServerStream.Close() is called, stream readers might have their setuppedTransport set to nil, causing the server to crash. Prevent this.
- fix race condition when tearing down connection (bluenviron/gortsplib#1063) ServerConn.session was not properly protected.
- fix leak in case of failure during multicast initialization (bluenviron/gortsplib#1064)
RTMP
- prevent nil / unconfigured tracks from appearing (bluenviron/gortmplib#66) (#5724) (#5729)
HLS
- fix error 500 caused by in-stream params (bluenviron/gohlslib#355) (#5728) (#5745) PR bluenviron/gohlslib#344 caused a regression. Many codecs (AV1, H264, H265, VP9) use in-stream parameters, that were not taken into consideration anymore when generating init.mp4 and playlists. This has been solved.
WebRTC
- fix checking POST responses (#5758)
- support interacting with servers with no trickle ICE (#5273) (#5757)
- support WHIP ICE restarts (https://github.com/bluenviron/mediamtx/issues/5183) (#5770)
RPI Camera
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.70.0 to v0.72.0
- github.com/Masterminds/semver/v3 updated from v3.4.0 to v3.5.0
- github.com/bluenviron/gohlslib/v2 updated from v2.3.1 to v2.3.2
- github.com/bluenviron/gortmplib updated from v0.3.1 to v0.3.2
- github.com/bluenviron/gortsplib/v5 updated from v5.5.2 to v5.5.3
- github.com/datarhei/gosrt updated from v0.10.0 to v0.11.0
- github.com/fsnotify/fsnotify updated from v1.10.0 to v1.10.1
- github.com/go-git/go-billy/v5 updated from v5.8.0 to v5.9.0
- github.com/go-git/go-git/v5 updated from v5.18.0 to v5.19.0
- github.com/gookit/color updated from v1.6.0 to v1.6.1
- github.com/matthewhartstonge/argon2 updated from v1.5.2 to v1.5.3
- github.com/pion/rtp updated from v1.10.1 to v1.10.2
- golang.org/x/crypto updated from v0.50.0 to v0.51.0
- golang.org/x/net updated from v0.53.0 to v0.54.0
- golang.org/x/sys updated from v0.43.0 to v0.44.0
- golang.org/x/term updated from v0.42.0 to v0.43.0
- github.com/cyphar/filepath-securejoin updated from v0.4.1 to v0.6.1
- github.com/pjbgf/sha1cd updated from v0.3.2 to v0.6.0
- golang.org/x/text updated from v0.36.0 to v0.37.0
- github.com/bluenviron/mediamtx-rpicamera updated from v2.5.6 to v2.5.7
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.18.2-0.20260430144319-0ad6897a4dd730 Apr 2026 pre-releaseNothing published for this version
-
v1.18.130 Apr 2026Release notes
Open source →Fixes and improvements
General
- prevent code injection in case of MTX_QUERY in hooks (#5707) When MTX_QUERY is used explicitly in hooks, for instance "curl http://something/?$MTX_QUERY", it can be used to inject arbitrary commands. MTX_QUERY is now url-encoded to prevent any abuse regardless of the configuration.
- use temporary redirects instead of permanent redirects (#5710) this prevents unwanted caching.
HLS
- prevent open redirect attacks (#5708)
- support reading and writing KLV (#5604)
- add hlsCDNSecret (#5716) this allows to serve HLS streams behind a CDN in a simplified way, compatible with the new HLS session system.
- add public attribute to cache-control header (bluenviron/gohlslib#349)
- allow caching non-low-latency playlists (bluenviron/gohlslib#350)
WebRTC
- prevent open redirect attacks (#5708)
RPI Camera
- Merge request->controls instead of overwriting (bluenviron/mediamtx-rpicamera#97) libcamera 0.7.0 is more strict about changing controls; assignment is no longer allowed since raspberrypi/libcamera@310cd8b Instead, we use the merge call with overwrite.
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.18.1-0.20260426184823-8107f7cc963c26 Apr 2026 pre-releaseNothing published for this version
-
v1.18.026 Apr 2026Release notes
Open source →New major features
HLS
- track sessions (#962) (#5683) sessions are now tracked through cookies or query parameters. This provides the ability to inspect sessions through logs, metrics and API, allows more precise tracking of outbound bytes, decreases load on external HTTP authentication URLs since they are now called once per session and not once per request.
- support serving streams with a CDN (#5696)
Fixes and improvements
General
- improve listener labels (#5635) add a label after every "listener opened on :XXX" message that mentions protocols of every listener.
- dump unencrypted TLS sessions (#5624) when dumpPackets is true, embed TLS master keys into the dump, in a format which is natively compatible with Wireshark.
- use "token" as query parameter key to pass tokens (#5647) the legacy "jwt" query parameter key is still supported.
- deprecate authJWTInHTTPQuery and disable JWTs in query parameters (#5648) This fixes a long standing security flaw. Even though it's a breaking change, few users should be impacted since this feature has been discouraged for some time.
- expose token passed as query parameter to HTTP authentication too (#5649) this allows to parse tokens coming from RTSP and RTMP without additional effort.
- playback: return errors as JSON (#5656) this is aligned with all other HTTP-based services.
- prevent out-of-memory errors (#5674) impose a maximum size on body of incoming HTTP requests and responses.
- metrics: improve performance (#5663) use string.Builder instead of string concatenation
- metrics: add labels to the output (#5687) group metrics under visible, distinct labels.
- metrics: fix filtering by type=rtmp_conns and type=rtmps_conns (#5689)
- metrics: add readerType attribute to the path_readers metric (#5690) this allows to filter path readers by type.
- metrics: use an enum for parsing metrics type (#5692)
- metrics: fix race condition when reloading configuration (#5693)
- docs: add scaling page (#5695)
API
- sort path readers (#5691)
RTSP
- client: fix RTSP-over-HTTP tunnel request target (bluenviron/gortsplib#1041)
- client: support Axis SRTP variant (bluenviron/gortsplib#1033)
- improve SDP parser compatibility with malformed connection information (bluenviron/gortsplib#1025)
- support parsing responses with no status message (bluenviron/gortsplib#1043) (bluenviron/gortsplib#1050)
- client: don't block RTSP-over-HTTP tunnel startup on POST response (bluenviron/gortsplib#1047)
HLS
- return JSON with error message in case path conf is not available (#5655) this behavior is aligned with WebRTC one.
- improve muxer performance (#5660) use a mutex instead of a channel to get current instance.
- fix running linter when there are unstaged git changes (bluenviron/gohlslib#336)
- client: use redirected URL when reloading playlist (bluenviron/gohlslib#340) this allows to store and use tokens and signed URLs.
- client: support reading KLV (bluenviron/gohlslib#337)
- prevent out-of-memory errors (bluenviron/gohlslib#343)
- muxer: generate init segment once (bluenviron/gohlslib#344) Previously, the init segment was regenerated in case of codec parameter changes, but changing the init segment has been proved to cause video and audio discontinuities on iOS. Now the init file contains starting parameters only and never changes during the stream lifetime.
- client: increase size limit of segments and parts (bluenviron/gohlslib#345)
- return a custom error when body size limit is exceeded (bluenviron/gohlslib#346)
- muxer: store non-low-latency playlists and init files on disk (bluenviron/gohlslib#348)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.67.0 to v0.69.0
- github.com/alecthomas/kong updated from v1.14.0 to v1.15.0
- github.com/bluenviron/gohlslib/v2 updated from v2.2.9 to v2.3.0
- github.com/bluenviron/gortsplib/v5 updated from v5.5.1 to v5.5.2
- github.com/go-git/go-git/v5 updated from v5.17.2 to v5.18.0
- github.com/matthewhartstonge/argon2 updated from v1.4.6 to v1.5.2
- github.com/pion/ice/v4 updated from v4.2.2 to v4.2.5
- golang.org/x/crypto updated from v0.49.0 to v0.50.0
- golang.org/x/sys updated from v0.42.0 to v0.43.0
- golang.org/x/term updated from v0.41.0 to v0.42.0
- github.com/pion/stun/v3 updated from v3.1.1 to v3.1.2
- github.com/pion/turn/v4 removed
- golang.org/x/net updated from v0.52.0 to v0.53.0
- golang.org/x/text updated from v0.35.0 to v0.36.0
- golang.org/x/time updated from v0.12.0 to v0.14.0
- github.com/pion/turn/v5 v5.0.3 added
- hls.js updated from v1.6.15 to v1.6.16
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.17.2-0.20260425165655-c4a1ba332a9725 Apr 2026 pre-releaseNothing published for this version
-
v1.17.2-0.20260425081224-57671a39133625 Apr 2026 pre-releaseNothing published for this version
-
v1.17.2-0.20260424212049-87543f91dda024 Apr 2026 pre-releaseNothing published for this version
-
v1.17.2-0.20260424170154-91aa6d9c6d2c24 Apr 2026 pre-releaseNothing published for this version
-
v1.17.131 Mar 2026Release notes
Open source →Fixes and improvements
General
- prevent directory traversal attacks (#5602) Path names are used as part of paths in several components: in the recorder, in the playback server and in every HTTP-based component (WebRTC, HLS, API). Special characters that allow to escape from the intended directory are now forbidden in order to prevent directory traversal attacks.
RTSP
- client: fill server name indication (SNI) of TLS connections (bluenviron/gortsplib#1038)
RTMP
- implement AbortMessage (#4673) (bluenviron/gortmplib#59)
- client: fill server name indication (SNI) of TLS connections (bluenviron/gortmplib#63)
WebRTC
- fix random absolute timestamps with Opus, G711 and LPCM (#5597) When rewriting audio RTP timestamps in WebRTC egress, NTP was derived using regenerated packet timestamps minus the incoming RTP base timestamp. That mixed timestamp domains and could shift absolute time by an arbitrary offset while still exposing mapping as available. Fix by using a consistent outgoing RTP domain in rewritten audio paths
- strip TWCC extension of incoming RTP packets (#5146) (#5605) The TWCC extension is used as part of the WebRTC congestion control algorithm placed between the publisher and the server. If this extension is routed untouched from the server to readers, it messes with the congestion control algorithm present between the server and each reader. Remove it.
RPI Camera
- restore Docker compatibility with armv6 devices (#5590) (#5595)
- restore compatibility with armv6 devices (#5590) (bluenviron/mediamtx-rpicamera#95)
Dependencies
- github.com/bluenviron/gortmplib updated from v0.3.0 to v0.3.1
- github.com/bluenviron/gortsplib/v5 updated from v5.5.0 to v5.5.1
- github.com/gin-contrib/pprof updated from v1.5.3 to v1.5.4
- github.com/go-git/go-git/v5 updated from v5.17.0 to v5.17.2
- github.com/pion/ice/v4 updated from v4.2.1 to v4.2.2
- github.com/pion/webrtc/v4 updated from v4.2.9 to v4.2.11
- github.com/pion/sctp updated from v1.9.2 to v1.9.4
- github.com/bluenviron/mediamtx-rpicamera updated from v2.5.4 to v2.5.5
Security
Binaries are compiled from source code by the Release workflow, which is a fully-visible process that prevents any change or external interference in produced artifacts.
Checksums of binaries are also published in a public blockchain by using GitHub Attestations, and they can be verified by running:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtxYou can verify checksums of binaries by downloading
checksums.sha256and running:cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check -
v1.17.1-0.20260326073714-b4d198647dec26 Mar 2026 pre-releaseNothing published for this version
-
v1.17.017 Mar 2026Nothing published for this version
-
v1.16.4-0.20260316204105-9a485119ece316 Mar 2026 pre-releaseNothing published for this version
-
v1.16.4-0.20260309193954-891befedf62809 Mar 2026 pre-releaseNothing published for this version
-
v1.16.301 Mar 2026Nothing published for this version
-
v1.16.222 Feb 2026Nothing published for this version
-
v1.16.107 Feb 2026Nothing published for this version
-
v1.16.031 Jan 2026Nothing published for this version
-
v1.15.7-0.20260131134458-a56408db196631 Jan 2026 pre-releaseNothing published for this version
-
v1.15.7-0.20260131130910-06c7cc3d7fce31 Jan 2026 pre-releaseNothing published for this version
-
v1.15.628 Dec 2025Nothing published for this version
-
v1.15.507 Dec 2025Nothing published for this version
-
v1.15.421 Nov 2025Nothing published for this version
-
v1.15.4-0.20251114161948-3f599d236f6b14 Nov 2025 pre-releaseNothing published for this version
-
v1.15.4-0.20251111110306-6380c5514b0511 Nov 2025 pre-releaseNothing published for this version
-
v1.15.4-0.20251029104515-1ef5db5b3c1a29 Oct 2025 pre-releaseNothing published for this version
-
v1.15.321 Oct 2025Nothing published for this version
-
v1.15.3-0.20251019100307-f450dc5d43e919 Oct 2025 pre-releaseNothing published for this version
-
v1.15.213 Oct 2025Nothing published for this version
-
v1.15.125 Sep 2025Nothing published for this version
-
v1.15.018 Sep 2025Nothing published for this version
-
v1.14.1-0.20250907140847-e0f4748839ea07 Sep 2025 pre-releaseNothing published for this version
-
v1.14.1-0.20250831145727-55ff69067e1231 Aug 2025 pre-releaseNothing published for this version
-
v1.14.1-0.20250815085724-9ab48ea4800815 Aug 2025 pre-releaseNothing published for this version