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/mediamtx
You can verify checksums of binaries by downloading checksums.sha256 and running:
cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check