Releases: bluenviron/mediamtx
v1.16.0
New major features
General
- add always available streams (#5335) When the publisher or source of a stream is offline, the server can be configured to fill gaps in the stream with a video that is played on repeat until a publisher comes back online. This allows readers to stay connected regardless of the state of the stream. The offline video and any future online stream are concatenated without decoding or re-encoding packets, using the original codec.
API
- add available, availableTime, online, onlineTime properties (#5391) these replace ready and readyTime and allow to monitor the new "always-available" feature.
WebRTC
- support reading KLV tracks (#4722)
Fixes and improvements
General
- move away from balenalib Docker images (#5313)
- print OS and Arch in first log line (#5315)
- print last decode error (#5319) decode errors are still grouped together, but the last one is now printed.
- print last processing error (#5323)
- use the same filtering process for every codec (#5324) this allows to apply features that were previously implemented for single codecs (like RTP packet resizing), to any codec, and simplifies future development.
- prevent several configuration errors (#5368)
- fix typos in documentation (#5370)
- fix overriding default user with environment variables (#5371) MTX_AUTHINTERNALUSERS_0_USER and MTX_AUTHINTERNALUSERS_0_PASS are now working even when the configuration file is present.
- prevent setting empty usernames with environment variables (#5373)
- fix panic with environment variables (#5374) this happened when loading deprecated slices of structs with environment variables.
- prevent setting slices to null (#5375) In Golang, slices can be set to nil, while in most other languages they cannot. This causes compatibility issues, especially because the OpenAPI definition of the API does not allow slices to be nil. This prevents slices from being set to nil through JSON/YAML, and also sets default slices to an empty list instead of nil.
- Update hlsEncryption documentation on Low-Latency HLS requirements (#5379)
- fix race condition when closing HTTP servers (#5390) when a HTTP server is closed, open connections are now immediately closed and open routines are waited before the server is considered closed.
- deprecate fallback (#5388) The fallback feature worked with RTSP only and did not allow readers to resume the original stream. It has been replaced by alwaysAvailable.
- mpegts: add E-AC-3 (Dolby Digital Plus) codec support (bluenviron/mediacommon#272)
- mpeg4audio: support channel_config=0 (bluenviron/mediacommon#273)
- mpeg4audio: in ASC, prefer marshaling legacy ChannelConfig when available (bluenviron/mediacommon#280)
- pmp4: increase compatibility (bluenviron/mediacommon#293)
- pmp4: support MP4s with data before track definitions (bluenviron/mediacommon#294)
API
- improve OpenAPI definition (#5380) add uint64, uint, uuid, move WebRTCICEServer into dedicated schema
RTSP
- fix log labels of RTSPS listeners (#5367) use "TCP/RTSPS", "UDP/SRTP", "UDP/SRTCP" to refer to secure listeners
- add rtspUDPSourcePortRange param (#5363) (#5397)
HLS
- fix playback starting point for VOD streams without EXT-X-PLAYLIST-TYPE (bluenviron/gohlslib#308)
- client: return every unit before an error (bluenviron/gohlslib#314) In case of an error, downloaded unit that were not processed yet were discarded. Now they are returned before the client exits.
WebRTC
- print incoming data channel messages (#5357)
RPI Camera
- move away from balenalib Docker images (bluenviron/mediamtx-rpicamera#82)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.59.0 to v0.62.0
- github.com/bluenviron/gohlslib/v2 updated from v2.2.4 to v2.2.5
- github.com/bluenviron/gortmplib updated from v0.2.0 to v0.2.1
- github.com/bluenviron/gortsplib/v5 updated from v5.2.2 to v5.3.0
- github.com/bluenviron/mediacommon/v2 updated from v2.6.0 to v2.7.0
- github.com/golang-jwt/jwt/v5 updated from v5.3.0 to v5.3.1
- github.com/matthewhartstonge/argon2 updated from v1.4.4 to v1.4.5
- github.com/pion/ice/v4 updated from v4.1.0 to v4.2.0
- github.com/pion/interceptor updated from v0.1.42 to v0.1.43
- github.com/pion/rtp updated from v1.9.0 to v1.10.0
- github.com/pion/transport/v3 removed
- github.com/pion/webrtc/v4 updated from v4.2.1 to v4.2.3
- golang.org/x/crypto updated from v0.46.0 to v0.47.0
- golang.org/x/sys updated from v0.39.0 to v0.40.0
- golang.org/x/term updated from v0.38.0 to v0.39.0
- github.com/pion/datachannel updated from v1.5.10 to v1.6.0
- github.com/pion/dtls/v3 updated from v3.0.9 to v3.0.10
- github.com/pion/sctp updated from v1.9.0 to v1.9.2
- github.com/pion/srtp/v3 updated from v3.0.9 to v3.0.10
- github.com/pion/stun/v3 updated from v3.0.2 to v3.1.1
- github.com/pion/turn/v4 updated from v4.1.3 to v4.1.4
- golang.org/x/net updated from v0.48.0 to v0.49.0
- golang.org/x/text updated from v0.32.0 to v0.33.0
- github.com/pion/transport/v4 v4.0.1 added
- github.com/bluenviron/mediamtx-rpicamera updated from v2.5.1 to v2.5.2
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.6
Fixes and improvements
General
- add structured logging (#5219)
- fix 1-minute offset when recording a H264 WebRTC track (#5275) (#5278)
- disable syslog logging on macOS (#5005) (#5295)
- set syslog priority and do not write level and date to syslog (#4923) (#5296) When writing log entries to syslog, pass the level (WARN, INFO, etc) directly to syslog. Avoid writing level and date. This provides a better integration and allows to use syslog search tools.
RTSP
- avoid setupping back channels (#5074) (#5289)
- Support URI format sent by HappyTime ONVIF and RTSP clients during (bluenviron/gortsplib#964)
- fix medias wrongly marked as back channels (#5074) (bluenviron/gortsplib#970) Some cameras mark medias as back channels even though they are not. Try to detect this by checking whether in full the SDP there are both back channels and standard channels, unmarking back channels otherwise.
- when there are back channels, add recvonly attribute to standard channels (bluenviron/gortsplib#971)
SRT
- fix broken connections in case of high latency (#3756) (#5282) When listening and accepting an incoming connection request, the response might be received by the peer with some delay due to latency. This causes the peer to send a second connection request, that is not detected as duplicate because the first connection request has already been removed from the map that is used to check for duplicates (connReqs), so it is treated as a brand new connection request, breaking the first connection. This patch fixes the issue by introducing another map (connByPeer) that is used to check whether a connection request is associated to an already-accepted connection.
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.58.0 to v0.59.0
- github.com/bluenviron/gortmplib updated from v0.1.2 to v0.2.0
- github.com/bluenviron/gortsplib/v5 updated from v5.2.1 to v5.2.2
- github.com/bluenviron/mediacommon/v2 updated from v2.5.3 to v2.6.0
- github.com/matthewhartstonge/argon2 updated from v1.4.3 to v1.4.4
- github.com/pion/ice/v4 updated from v4.0.13 to v4.1.0
- github.com/pion/rtp updated from v1.8.26 to v1.9.0
- github.com/pion/sdp/v3 updated from v3.0.16 to v3.0.17
- github.com/pion/webrtc/v4 updated from v4.1.7 to v4.2.1
- golang.org/x/crypto updated from v0.45.0 to v0.46.0
- golang.org/x/sys updated from v0.38.0 to v0.39.0
- golang.org/x/term updated from v0.37.0 to v0.38.0
- github.com/pion/dtls/v3 updated from v3.0.8 to v3.0.9
- github.com/pion/sctp updated from v1.8.41 to v1.9.0
- github.com/pion/stun/v3 updated from v3.0.1 to v3.0.2
- github.com/quic-go/qpack updated from v0.5.1 to v0.6.0
- github.com/quic-go/quic-go updated from v0.54.1 to v0.57.0
- go.uber.org/mock removed
- golang.org/x/mod removed
- golang.org/x/net updated from v0.47.0 to v0.48.0
- golang.org/x/sync removed
- golang.org/x/text updated from v0.31.0 to v0.32.0
- golang.org/x/time updated from v0.9.0 to v0.12.0
- golang.org/x/tools removed
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.5
Fixes and improvements
General
- apidocs: fix compatibility with OpenAPI 3.0 (#5210) double-precision numbers are now represented as double.
- playback: support concatenating segments with long gaps (#5172) Thanks to the new mtxi MP4 box, it's possible to check whether two segments are consecutive without involving dates or timestamps. When the new mtxi box is present in both segments, do not check if the end of the first segment corresponds to the start of the second segment.
- recorder: reset when absolute time drifts from stream time (#4778) (#5239) the server now detects when system time changes too much and restarts recordings when that happens.
- playback: fix crash (#5240) (#5250) when requesting a recording with the mp4 format, if there are two tracks and the second track has no samples, the server crashed. This fixes the issue.
- fix panic when changing log file to a nonexisting directory (#5132) (#5249)
- h264: fix regression in DTS extractor (#5207) (bluenviron/mediacommon#263)
- h264: increase MaxNALUsPerAccessUnit (bluenviron/mediacommon#262) Some parrot drones use slice-encoding with 45 independent slices, resulting in frames consisting of 48 NALUs.
- pmp4: fix crash when unmarshaling and there are no samples (#5240) (bluenviron/mediacommon#267)
- fmp4: Correctly parse trun v0 sample composition time offset (bluenviron/mediacommon#268)
- h265: fix DTS extraction with multiple slices (#5071) (bluenviron/mediacommon#269)
API
- always reply with JSON in case of success or failure (#5252) Reply with "status": "ok" in case of success, and with "status": "error" in case of error. This makes the API more accessible and user friendly.
RTSP
- fix crash when setupping tracks between stream changes (#5253) (#5257)
- Allow 1 byte of extra padding at mikey message (bluenviron/gortsplib#953)
RTMP
- prevent dropping initial video and audio frames (bluenviron/gortmplib#26)
Dependencies
- github.com/bluenviron/gortmplib updated from v0.1.1 to v0.1.2
- github.com/bluenviron/gortsplib/v5 updated from v5.2.0 to v5.2.1
- github.com/bluenviron/mediacommon/v2 updated from v2.5.1 to v2.5.3
- github.com/go-git/go-billy/v5 updated from v5.6.2 to v5.7.0
- github.com/go-git/go-git/v5 updated from v5.16.3 to v5.16.4
- github.com/pion/ice/v4 updated from v4.0.10 to v4.0.13
- github.com/pion/rtp updated from v1.8.25 to v1.8.26
- github.com/pion/webrtc/v4 updated from v4.1.6 to v4.1.7
- github.com/pion/dtls/v3 updated from v3.0.7 to v3.0.8
- github.com/pion/mdns/v2 updated from v2.0.7 to v2.1.0
- github.com/pion/sctp updated from v1.8.40 to v1.8.41
- github.com/pion/srtp/v3 updated from v3.0.8 to v3.0.9
- github.com/pion/stun/v3 updated from v3.0.0 to v3.0.1
- github.com/pion/turn/v4 updated from v4.1.1 to v4.1.3
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.4 "San Francisco"
Fixes and improvements
General
- support multiple CORS origins (#5150)
- add udpReadBufferSize parameter (#5129) this allows to set a global UDP read buffer, applied to every UDP socket.
- extend udpReadBufferSize to WebRTC UDP sockets (#5130) this allows to decrease packet losses without touching system parameters.
- recorder: prevent FMP4 durations from overflowing (#4711) (#5126) the timestamp difference between two samples was put inside an unsigned integer that, when negative, caused an overflow.
RTP
- reorder packets before ingestion (#5194)
RTSP
- support RTSP responses with empty status message (bluenviron/gortsplib#807) (bluenviron/gortsplib#928)
- server: fix timeout when reading with Media Foundation (#5090) (bluenviron/gortsplib#932)
- fix SP payload of MIKEY messages (bluenviron/gortsplib#827) (bluenviron/gortsplib#935) fill PayloadSPPolicyParamTypeAuthTagLen andPayloadSPPolicyParamTypeSessionAuthKeyLen properly.
- support formats with dynamic SSRC (bluenviron/gortsplib#687) (bluenviron/gortsplib#940)
- improve performance by decoding RTP header once (bluenviron/gortsplib#941)
HLS
- muxer: prevent FMP4 durations from overflowing (#5126) (bluenviron/gohlslib#290)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.55.0 to v0.58.0
- github.com/alecthomas/kong updated from v1.12.1 to v1.13.0
- github.com/asticode/go-astits updated from v1.13.0 to v1.14.0
- github.com/bluenviron/gohlslib/v2 updated from v2.2.3 to v2.2.4
- github.com/bluenviron/gortsplib/v5 updated from v5.1.1 to v5.2.0
- github.com/matthewhartstonge/argon2 updated from v1.4.1 to v1.4.3
- github.com/pion/interceptor updated from v0.1.41 to v0.1.42
- github.com/pion/rtp updated from v1.8.23 to v1.8.25
- golang.org/x/crypto updated from v0.43.0 to v0.45.0
- golang.org/x/sys updated from v0.37.0 to v0.38.0
- golang.org/x/term updated from v0.36.0 to v0.37.0
- github.com/pion/transport/v3 updated from v3.0.8 to v3.1.1
- golang.org/x/mod updated from v0.29.0 to v0.30.0
- golang.org/x/net updated from v0.46.0 to v0.47.0
- golang.org/x/sync updated from v0.17.0 to v0.18.0
- golang.org/x/text updated from v0.30.0 to v0.31.0
- golang.org/x/tools updated from v0.38.0 to v0.39.0
- hls.js updated from v1.6.13 to v1.6.15
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.3
Fixes and improvements
General
- h264: fix DTS estimation of some HikVision cameras (#4617) (bluenviron/mediacommon#252)
RTSP
- fix timeout when recording with FFmpeg and UDP (#5100) (bluenviron/gortsplib#921)
- fix crash when calling PAUSE (bluenviron/gortsplib#922) this happened when playing and protocol is UDP-multicast.
- use AVP profile when scheme is RTSPS and protocol is TCP (bluenviron/gortsplib#916)
RTMP
- fix freeze when reading source (#5117) tracks were read without deadlines, freezing the server if they were not present. This patch also allows to close the server immediately during track reading.
- client: fix compatibility with SRS (#4630) (bluenviron/gortmplib#9)
RPI Camera
- Added missing AnalogueGainMode (bluenviron/mediamtx-rpicamera#71)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.54.0 to v0.55.0
- github.com/bluenviron/gortmplib updated from v0.1.0 to v0.1.1
- github.com/bluenviron/gortsplib/v5 updated from v5.1.0 to v5.1.1
- github.com/bluenviron/mediacommon/v2 updated from v2.5.0 to v2.5.1
- github.com/pion/rtcp updated from v1.2.15 to v1.2.16
- github.com/pion/webrtc/v4 updated from v4.1.4 to v4.1.6
- github.com/pion/sctp updated from v1.8.39 to v1.8.40
- github.com/pion/transport/v3 updated from v3.0.7 to v3.0.8
- golang.org/x/mod updated from v0.28.0 to v0.29.0
- golang.org/x/tools updated from v0.37.0 to v0.38.0
- github.com/bluenviron/mediamtx-rpicamera updated from v2.5.0 to v2.5.1
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.2
Fixes and improvements
General
- add self-upgrader (#3501) (#5035) this allows to upgrade MediaMTX to latest version by running ./mediamtx --upgrade
- on Windows, do not look for configuration in linux paths (#5036)
- do not include recorder and HLS muxer in sent bytes (#4380) (#5039) in API (/paths/list, /paths/get) and metrics (paths_bytes_sent), the amount of sent bytes was increased even in case of writes to the recorder and HLS muxer, which are not generating network traffic. This fixes the issue.
- add read and write timeouts in HTTP servers (#5056) this prevents zombie connections from piling up.
- estimate absolute timestamp more precisely (#5078) When the absolute timestamp of incoming frames was not available, it was filled with the current timestamp, which is influenced by latency over time. This mechanism is replaced by an algorithm that detects when latency is the lowest, stores the current timestamp and uses it as reference throughout the rest of the stream.
- prevent estimated absolute timestamp from drifting too much (#5080)
- recorder: reset fMP4 sequence number during segment switch (#5082) It's useless to make sequence numbers unique across the entire stream.
- replace incoming absolute timestamps of any source (#5081) Absolute timestamps are used to generate recording segments, so users should not be able to change them, unless explicitly allowed. Parameter useAbsoluteTimestamp allowed to re-enable absolute timestamps with RTSP and WebRTC, now it is extended to all protocols.
- recorder: write additional infos inside segments (#5083) write stream ID, segment number, DTS, NTP in a dedicated box. This allows to improve the merge algorithm in the playback server.
- playback: improve segment merging algorithm (#5084) * merge segments only if they belong to the same stream and are consecutive. * compute DTS without using NTP timestamp, increasing robustness against NTP fluctuations.
API
RTSP
- Fix: invalid SDP: sdp: invalid syntax
c=IN(bluenviron/gortsplib#906) - server: add idle timeout (bluenviron/gortsplib#912) this prevents idle connections and sessions from stacking up.
HLS
- improve web page performance (#5062) load hls.js in parallel with the page.
WebRTC
- fix clippy audio when reading Opus (#3878) (#5047) Opus timestamp is now recomputed from scratch.
- fix packet corruption when reading G711 (#5048) when a reader is reading a G711 track, stream units are modified globally, affecting every other reader. This fixes the issue.
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.52.0 to v0.54.0
- github.com/MicahParks/keyfunc/v3 updated from v3.6.2 to v3.7.0
- github.com/bluenviron/gortsplib/v5 updated from v5.0.1 to v5.1.0
- github.com/bluenviron/mediacommon/v2 updated from v2.4.3 to v2.5.0
- github.com/go-git/go-git/v5 updated from v5.16.2 to v5.16.3
- github.com/matthewhartstonge/argon2 updated from v1.4.0 to v1.4.1
- github.com/pion/interceptor updated from v0.1.40 to v0.1.41
- github.com/pion/rtp updated from v1.8.22 to v1.8.23
- golang.org/x/crypto updated from v0.42.0 to v0.43.0
- golang.org/x/sys updated from v0.36.0 to v0.37.0
- golang.org/x/term updated from v0.35.0 to v0.36.0
- github.com/pion/srtp/v3 updated from v3.0.7 to v3.0.8
- github.com/quic-go/quic-go updated from v0.54.0 to v0.54.1
- golang.org/x/net updated from v0.44.0 to v0.46.0
- golang.org/x/text updated from v0.29.0 to v0.30.0
- github.com/Masterminds/semver/v3 v3.4.0 added
- github.com/minio/selfupdate v0.6.0 added
- aead.dev/minisign v0.2.0 added
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
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
v1.15.1
Fixes and improvements
General
- fix authentication failure reason not being displayed (#5007)
- fix reading JWT when it is passed through the password field (#5009) Usernames and passwords must be requested explicitly to clients, but they were not requested when JWT is meant to be passed as password. This fixes the issue.
- stop accepting JWTs from query parameters unless allowed in conf (#5010) This is the first step into removing support for JWTs in query parameters, which is a security flaw.
- docs: explain how to decrease JWT length in Keycloak (#5012) this prevents errors when passing JWT with FFmpeg and GStreamer.
- log authentication errors of API, metrics, pprof (#4641) (#5015)
- allow changing record parameters without disconnecting readers (#4663) (#5018)
API
- fix crash in rtspsessions/list and /rtspsessions/get (#5030) (#5031) sometimes sessions have an empty associated path, and this caused a crash.
RTSP
- log authentication failure reason (#4641) (#5017)
- sdp: fix compatibility with a Uniview camera (#5008) (bluenviron/gortsplib#903)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.51.0 to v0.52.0
- github.com/MicahParks/jwkset updated from v0.10.0 to v0.11.0
- github.com/MicahParks/keyfunc/v3 updated from v3.6.1 to v3.6.2
- github.com/bluenviron/gortsplib/v5 updated from v5.0.0 to v5.0.1
- github.com/gin-gonic/gin updated from v1.10.1 to v1.11.0
- github.com/bytedance/sonic updated from v1.13.2 to v1.14.0
- github.com/bytedance/sonic/loader updated from v0.2.4 to v0.3.0
- github.com/cloudwego/base64x updated from v0.1.5 to v0.1.6
- github.com/gin-contrib/sse updated from v1.0.0 to v1.1.0
- github.com/go-playground/validator/v10 updated from v10.26.0 to v10.27.0
- github.com/klauspost/cpuid/v2 updated from v2.2.10 to v2.3.0
- github.com/pelletier/go-toml/v2 updated from v2.2.3 to v2.2.4
- github.com/ugorji/go/codec updated from v1.2.12 to v1.3.0
- golang.org/x/arch updated from v0.16.0 to v0.20.0
- google.golang.org/protobuf updated from v1.36.6 to v1.36.9
- github.com/goccy/go-yaml v1.18.0 added
- github.com/quic-go/qpack v0.5.1 added
- github.com/quic-go/quic-go v0.54.0 added
- go.uber.org/mock v0.5.0 added
- golang.org/x/mod v0.28.0 added
- golang.org/x/sync v0.17.0 added
- golang.org/x/tools v0.37.0 added
- hls.js updated from v1.6.12 to v1.6.13
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx
You can verify the binaries checksum by downloading checksums.sha256 and running:
cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check
v1.15.0
New major features
General
- documentation has been moved to a dedicated website, https://mediamtx.org/ . The website content is based on markdown from the MediaMTX repository and can be edited through GitHub.
RTMP
- support additional enhanced RTMP features (#4168) (#4321) (#4954). Support reading AV1, VP9, H265, Opus, AC-3, G711, LPCM, support reading multiple video or audio tracks at once.
RTSP
- support RTSP-over-HTTP (bluenviron/gortsplib#433) (bluenviron/gortsplib#768) (bluenviron/gortsplib#887)
- support RTSP-over-WebSocket (bluenviron/gortsplib#891) (bluenviron/gortsplib#898)
Fixes and improvements
General
- refactor: use the built-in max/min to simplify the code (#4867)
- refactor: remove duplicated http middleware (#4894)
- playback: fix crash during authentication errors (#4960) (#4966)
- send server name (SNI) when opening TLS connections (#4973)
- h264: fix DTS extractor compatibility with Apple VT HEVC Hardware Encoder (#4892) (bluenviron/mediacommon#236)
- h265: fix DTS extractor compatibility with Apple VT HEVC Hardware Encoder (#4892) (bluenviron/mediacommon#238)
- ac3: fix support for bsid different than 8 (#4705) (bluenviron/mediacommon#244)
- improve performance when dealing with AV1 (bluenviron/mediacommon#243)
- h265: fix DTS extractor with libx265 (bluenviron/mediacommon#245)
- update readme (bluenviron/mediacommon#246)
- h265: fix DTS extractor regression after bluenviron/mediacommon#245 (bluenviron/mediacommon#247) IDR frames which are also B-frames are supported again.
API
- add tunnel and profile to RTSP conns and sessions (#4985)
RTSP
- switch to gortsplib/v5 (#4978)
- fix memory leak when closing sessions (https://github.com/bluenviron/mediamtx/issues/4964) (#4678) (#4967)
- support reading streams tunneled with HTTP or WebSocket (#4986)
- fix encoding and decoding of NTP fractional part (bluenviron/gortsplib#869) (bluenviron/gortsplib#870)
- Fix typo when identifying KLV packets as SMPTE336M-encoded (bluenviron/gortsplib#877)
- Fix SDP parsing for repeat time field with no offsets (bluenviron/gortsplib#880)
- client: fix crash when opening UDP listeners (bluenviron/gortsplib#893)
- server: fix panic due to regression in bluenviron/gortsplib#887 (bluenviron/gortsplib#892)
- server: prevent using UDP when tunneling through HTTP (bluenviron/gortsplib#896)
RTMP
- improve control message compatibility with non-standard cameras (#4909)
- move implementation to gortmplib (#4968)
HLS
- Add disablepictureinpicture param (#4883)
- improve performance when dealing with av1 (bluenviron/gohlslib#279)
WebRTC
- Add disablepictureinpicture param (#4883)
RPI Camera
- fix race condition when reloading parameters (bluenviron/mediamtx-rpicamera#63)
- decrease GPU consumption (bluenviron/mediamtx-rpicamera#64) stop allocating useless buffers.
- use openh264 as software H264 encoder (bluenviron/mediamtx-rpicamera#65) this prevents license issues.
Dependencies
- Go updated from 1.24 to 1.25
- code.cloudfoundry.org/bytefmt updated from v0.45.0 to v0.51.0
- github.com/MicahParks/jwkset updated from v0.9.6 to v0.10.0
- github.com/bluenviron/gohlslib/v2 updated from v2.2.2 to v2.2.3
- github.com/bluenviron/gortsplib/v4 removed
- github.com/bluenviron/mediacommon/v2 updated from v2.4.1 to v2.4.3
- github.com/gookit/color updated from v1.5.4 to v1.6.0
- github.com/matthewhartstonge/argon2 updated from v1.3.4 to v1.4.0
- github.com/pion/rtp updated from v1.8.21 to v1.8.22
- github.com/pion/sdp/v3 updated from v3.0.15 to v3.0.16
- github.com/pion/webrtc/v4 updated from v4.1.3 to v4.1.4
- github.com/stretchr/testify updated from v1.10.0 to v1.11.1
- golang.org/x/crypto updated from v0.41.0 to v0.42.0
- golang.org/x/sys updated from v0.35.0 to v0.36.0
- golang.org/x/term updated from v0.34.0 to v0.35.0
- github.com/pion/dtls/v3 updated from v3.0.6 to v3.0.7
- github.com/pion/srtp/v3 updated from v3.0.6 to v3.0.7
- github.com/pion/turn/v4 updated from v4.0.0 to v4.1.1
- github.com/xo/terminfo updated from v0.0.0-20210125001918-ca9a967f8778 to v0.0.0-20220910002029-abceb7e1c41e
- golang.org/x/net updated from v0.43.0 to v0.44.0
- golang.org/x/text updated from v0.28.0 to v0.29.0
- github.com/bluenviron/gortmplib v0.1.0 added
- github.com/bluenviron/gortsplib/v5 v5.0.0 added
- github.com/bluenviron/mediamtx-rpicamera updated from v2.4.4 to v2.5.0
- hls.js updated from v1.6.9 to v1.6.12
Security
Binaries are compiled from source through the Release workflow without human intervention, preventing any external interference.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx
You can verify the binaries checksum by downloading checksums.sha256 and running:
cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check
v1.14.0
New major features
RTP
WebRTC
Fixes and improvements
General
- metrics: add paths_readers metric (#4473) (#4789)
- metrics: add path and remoteAddr tags (#3941) (#3420) (#4794)
- apidocs: add missing format to integers and floats (#4796)
- metrics: add additional WebRTC metrics (#3304) (#4797, webrtc_sessions_rtp_packets_sent, webrtc_sessions_rtp_packets_lost, webrtc_sessions_rtp_packets_jitter, webrtc_sessions_rtcp_packets_received, webrtc_sessions_rtcp_packets_sent.
- metrics: allow filtering metrics (#953) (#4809)
- Add support for HTTP over unix sockets (#4241)
- Add FreeBSD instructions (#4218)
- prevent leakages by exiting gracefully with SIGTERM (#4352) (#4845)
- allow setting UDP read buffer size (#3308) (#4846) new parameters: rtspUDPReadBufferSize, rtpUDPReadBufferSize, mpegtsUDPReadBufferSize
- fix memory leak when reloading the configuration (#4855) When a path has a MPEG-TS, RTP or WebRTC source and the pathconfiguration is reloaded, a routine was left open because the reload channel was not handled. This fixes the issue.
API
- add additional WebRTC statistics (#4795) rtpPacketsReceived, rtpPacketsSent, rtpPacketsLost, rtpPacketsJitter, rtcpPacketsReceived, rtcpPacketsSent
- rename udpSource into mpegtsSource (#4842)
RTSP
- client: use server interface as multicast interface (bluenviron/gortsplib#762) (bluenviron/gortsplib#847) this fixes most errors "found no interface that is multicast-capable and can communicate with IP".
- client: prevent setting up undesired back channels (bluenviron/gortsplib#856)
WebRTC
- remove custom forks of pion/webrtc and pion/ice (#4861) this fixes IPv6 reliability issues and allows to receive upstream updates in a more linear way.
- speed up candidate extraction (#4801)
- close WebRTC sessions when closing browser tabs (https://github.com/bluenviron/mediamtx/issues/4477) (#4849) This should decrease the delay before WebRTC sessions are marked as closed.
- fix clock rate of outgoing RTCP receiver reports (#4852)
- fix crash when loading an invalid configuration (#4856)
- show SDP answers in logs (#4862)
- solve domains in webrtcAdditionalHosts on server-side (#4817) (#4866)
MPEG-TS
- support MPEG-TS over unix sockets (#4388) (#4389) (#4828)
- listen on default multicast interface (#4565) (#4820) ... instead of listening on all multicast interfaces.
RPI Camera
- add validity checks on rpiCameraProfile and rpiCameraLevel (#4783)
- rename rpiCameraJPEGQuality in rpiCameraMJPEGQuality (#4784)
- rename rpiCameraProfile into rpiCameraH264Profile, rpiCameraLevel into rpiCameraH264Level (#3965) (#4785)
- allow setting software H264 profile and level (#3965) (#4786)
- allow setting software H264 profile and level (#3965) (bluenviron/mediamtx-rpicamera#57)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.44.0 to v0.45.0
- github.com/MicahParks/keyfunc/v3 updated from v3.4.0 to v3.6.1
- github.com/alecthomas/kong updated from v1.12.0 to v1.12.1
- github.com/bluenviron/gortsplib/v4 updated from v4.16.0 to v4.16.2
- github.com/bluenviron/mediacommon/v2 updated from v2.4.0 to v2.4.1
- github.com/golang-jwt/jwt/v5 updated from v5.2.3 to v5.3.0
- github.com/matthewhartstonge/argon2 updated from v1.3.3 to v1.3.4
- github.com/pion/ice/v4 updated from v4.0.7 to v4.0.10
- github.com/pion/webrtc/v4 updated from v4.0.7 to v4.1.3
- golang.org/x/crypto updated from v0.40.0 to v0.41.0
- golang.org/x/sys updated from v0.34.0 to v0.35.0
- golang.org/x/term updated from v0.33.0 to v0.34.0
- github.com/pion/dtls/v3 updated from v3.0.4 to v3.0.6
- github.com/pion/sctp updated from v1.8.36 to v1.8.39
- golang.org/x/net updated from v0.42.0 to v0.43.0
- golang.org/x/text updated from v0.27.0 to v0.28.0
- github.com/bluenviron/mediamtx-rpicamera updated from v2.4.3 to v2.4.4
- hls.js updated from v1.6.7 to v1.6.9
Security
Binaries have been produced by the Release workflow without human intervention.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx
You can verify the binaries checksum by downloading checksums.sha256 and running:
cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check
v1.13.1
Fixes and improvements
General
- recorder: limit maximum part size (#4674) (#4760). this prevents RAM exhaustion.
- fix generating timestamp of non-RTSP MPEG-4 video streams (#4758)
RTSP
RTMP
HLS
- add query params to iOS streams (#4708)
- fix endless loading in Firefox (#4706)
- muxer: set Content-Type of audio-only segments to audio/mp4 (bluenviron/gohlslib#251)
WebRTC
- fix endless loading in Firefox (#4707)
- fix re-establishing connection in iframe (#4721). Prevent a bug in Firefox in which, when the page is loaded in an iframe and the iframe is deleted and recreated, WebRTC is unable to re-establish the connection.
UDP
- mpegts: improve reader robustness (bluenviron/mediacommon#222). detect and skip corrupted data without stopping reading.
- support MPEG-4 Audio LATM tracks (#4403) (#4759)
SRT
- mpegts: improve reader robustness (bluenviron/mediacommon#222). detect and skip corrupted data without stopping reading.
- support MPEG-4 Audio LATM tracks (#4403) (#4759)
Dependencies
- code.cloudfoundry.org/bytefmt updated from v0.43.0 to v0.44.0
- github.com/bluenviron/gohlslib/v2 updated from v2.2.1 to v2.2.2
- github.com/bluenviron/gortsplib/v4 updated from v4.15.0 to v4.16.0
- github.com/bluenviron/mediacommon/v2 updated from v2.3.0 to v2.4.0
- github.com/golang-jwt/jwt/v5 updated from v5.2.2 to v5.2.3
- github.com/matthewhartstonge/argon2 updated from v1.3.2 to v1.3.3
- github.com/pion/rtp updated from v1.8.20 to v1.8.21
- github.com/pion/sdp/v3 updated from v3.0.14 to v3.0.15
- golang.org/x/crypto updated from v0.39.0 to v0.40.0
- golang.org/x/sys updated from v0.33.0 to v0.34.0
- golang.org/x/term updated from v0.32.0 to v0.33.0
- golang.org/x/net updated from v0.41.0 to v0.42.0
- golang.org/x/text updated from v0.26.0 to v0.27.0
- hls.js updated from v1.6.6 to v1.6.7
Security
Binaries have been produced by the Release workflow without human intervention.
You can verify that binaries have been produced by the workflow by using GitHub Attestations:
ls mediamtx_* | xargs -L1 gh attestation verify --repo bluenviron/mediamtx
You can verify the binaries checksum by downloading checksums.sha256 and running:
cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check