Skip to content

v1.20.1

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Aug 12:05
883194a

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/mediamtx

You can verify checksums of binaries by downloading checksums.sha256 and running:

cat checksums.sha256 | grep "$(ls mediamtx_*)" | sha256sum --check