Releases: bluenviron/mediamtx
v1.2.1
Fixes and improvements
General
- add environment variable MTX_QUERY to some hooks (#2483) (#2522)
- bump Go to 1.21 (#2546)
- fix crash when setting deprecated settings with environment (#2529) (#2550)
- restart recordings in case of errors (#2439) (#2571)
- fix hot reloading on Windows when letter case changes (#2586) by @jsbohnert
RTSP
- support receiving responses with spaces in CSeq (bluenviron/gortsplib#437) (bluenviron/gortsplib#446)
- support SDPs without leading version (bluenviron/gortsplib#448) (bluenviron/gortsplib#450)
- support cameras with decimal numbers in SDP origin (bluenviron/gortsplib#455). . (#2558)
WebRTC
- fix compatibility with Alexa offers (#2544)
- support WHIP/WHEP DELETE method (#2507) by @rgl
- improve stability by reordering incoming packets (#2570)
- return detailed errors in responses (#2594)
RTMP
RPI Camera
- Fix Raspberry Pi Camera 3 auto focus (#2326) (#2552)
- Switch default autofocus mode to 'continuous' (#2591)
API
- return full configuration in config/paths/list and config/paths/get (#2535) (#2595)
- add path name to config/paths/list and config/paths/get (#2535) (#2596)
- return 500 instead of 404 in case of non-existing items (#2582)
- send error messages in response body (#2518) (#2583)
Dependencies
v1.2.0
New features
- add a new configuration setting
pathDefaults
that allows to change the default parameters of all paths. Existing configurations are fully compatible with the new configuration schema, but the API has been bumped to /v3 in order to support this change (#2455) - allow setting different recording parameters for each path (#2410) (#2457)
- support recording to MPEG-TS (#2505)
- support recording LPCM tracks (#2475)
- add runOnRecordSegmentComplete and rclone integration (#2404) (#2428)
- add runOnRecordSegmentCreate hook (#2451) (#2503)
Fixes and improvements
General
- rename 'all' path configuration into 'all_others' (#2443)
- allow to start/stop recording without disconnecting clients (#2395) (#2434)
- move 'srtReadPassphrase' into the right section (#2435)
- print path of configuration file (#2441)
- fix 'fragment sequence discontinuity' warning when reading record segments with VLC (#2476)
- h264: support empty NALUs inside AVCC (bluenviron/mediacommon#84). . (#2375)
- h265: fix DTS extraction of streams with short_term_ref_pic_set_sps_flag=1 (bluenviron/mediacommon#95). . (#2417)
RTSP
- support SDPs without session name (bluenviron/gortsplib#439). . (#2473)
RTMP
HLS
- muxer: generate multivariant playlist and init.mp4 after a segment is ready (bluenviron/gohlslib#99)
- muxer: regenerate init.mp4 only when its content changes (bluenviron/gohlslib#100)
WebRTC
- Supports webrtc interface filtering on server (#2460) by @PieterFabry
- add Location header to CORS-allowed headers (#2453) by @rgl
- print lost packets (#2468)
- fix reading Opus stereo tracks with Chrome (#2043) (#2470)
- disallow publishing screen on devices that don't support it (#2066) (#2471)
- optimize publish page for mobile devices (#2066) (#2472)
- expose ice servers on OPTIONS CORS requests (#2479) by @sainak
API
- return 400 in case of non-existent config fields (#2425)
- save errors in logs (#2426)
- fix crash when retrieving RTMP and SRT connections (#2430) by @p4xx07
- apidocs: remove invalid value from PathSourceOrReader (#2450)
Dependencies
- build(deps): bump github.com/abema/go-mp4 from 0.13.0 to 1.0.0 (#2413)
- build(deps): bump github.com/pion/rtp from 1.8.1 to 1.8.2 (#2415)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.20 to 3.2.21 (#2414)
- build(deps): bump github.com/abema/go-mp4 from 1.0.0 to 1.1.0 (#2421)
- build(deps): bump github.com/pion/interceptor from 0.1.19 to 0.1.20 (#2437)
- build(deps): bump github.com/abema/go-mp4 from 1.1.0 to 1.1.1 (#2447)
- build(deps): bump github.com/pion/interceptor from 0.1.20 to 0.1.21 (#2456)
- build(deps): bump golang.org/x/crypto from 0.13.0 to 0.14.0 (#2465)
- build(deps): bump github.com/pion/interceptor from 0.1.21 to 0.1.22 (#2482)
- build(deps): bump github.com/alecthomas/kong from 0.8.0 to 0.8.1 (#2493)
- build(deps): bump golang.org/x/net from 0.15.0 to 0.17.0 (#2501)
v1.1.1
Fixes and improvements
General
- fix default value of some settings (#2367): rtmpServerKey, rtmpServerCert, recordPath, rpiCameraExposure,. rpiCameraAWB, rpiCameraDenoise, rpiCameraMetering, rpiCameraAfMode,. rpiCameraAfRange, rpiCameraAfSpeed were not set correctly when missing in the configuration file.
- fix crash when processing H265 (#2378) (#2381)
- normalize configuration (#2399)
- rename 'external commands' into 'hooks' (#2400)
Recording
- support recording AC-3 tracks (#2376)
- support recording M-JPEG tracks (#2391)
- update recordDeleteAfter documentation (#2361) (#2362)
- automatically set 'record: yes' when not specified (#2366)
- fix race condition wen record agent is closing (#2369)
RTSP
- fix timestamp of outgoing RTSP/RTP packets in case of aggregated access units (#2389)
- fix compatibility with Annex-B encoded H264 SPS/PPS (bluenviron/gortsplib#402) (bluenviron/gortsplib#426)
- discard invalid H264 parameters (bluenviron/gortsplib#431). . (#2348)
SRT
- support AC-3 tracks in SRT and UDP; support recording AC-3 tracks (#2376)
- Support SRT encryption passphrases on configured paths (#2385)
UDP
- support AC-3 tracks in SRT and UDP; support recording AC-3 tracks (#2376)
RPI Camera
- rpi camera: add additional checks on configuration (#2368)
WebRTC
v1.1.0
New features
-
Add native recording. This allows to record streams without using FFmpeg in a fault tolerant, browser compatible format (#1399) (#2255).
-
Add additional custom commands: runOnDisconnect, runOnNotReady, runOnUnread (#1464) (#2355)
-
Add additional environment variables to custom commands (#1414) (#2356). New variables: MTX_CONN_TYPE, MTX_CONN_ID, MTX_SOURCE_TYPE, MTX_SOURCE_ID, MTX_READER_TYPE, MTX_READ_ID
Fixes and improvements
General
- print the reason why a source is started or stopped (#2322)
- search for configuration file in various paths, print paths if configuration is not found (#1993) (#2276) (#2357)
Codecs
- mpegts: readd PCR to outgoing packets (bluenviron/mediacommon#74). . this is needed to read H265 tracks with VLC+VDPAU hardware encoder. (and is probably needed by other combinations too)
- h265: cleanup DTS extractor (bluenviron/mediacommon#75)
RTSP
- normalize debug logging of requests / responses (#2321)
- rtptime: fix crash in case of packets from tracks with invalid clock rate (bluenviron/gortsplib#400)
- fix unability to get PTS of H265 streams (bluenviron/gortsplib#401)
- fix compatibility with Revotech cameras (bluenviron/gortsplib#402) (bluenviron/gortsplib#404)
- client: fix enforcing timeout to responses (bluenviron/gortsplib#406)
- client: fix race condition that can lead to crash (bluenviron/gortsplib#407)
- client: log every incoming response (bluenviron/gortsplib#409)
- client: accept responses only if their CSeq corresponds to requests (bluenviron/gortsplib#410)
- server: stop sending multicast packets when all multicast readers have disconnected (bluenviron/gortsplib#411)
- client: support cameras that don't reply to keepalives (bluenviron/gortsplib#412). . (#2302)
- fix reading and writing multicast packets in case of multiple interfaces (bluenviron/gortsplib#413). . (#2029)
- fix wrong encoding when frame size equals packet size (bluenviron/gortsplib#416)
- optimize multicast on Linux by listening on a single IP (bluenviron/gortsplib#417). . (#2133)
RTMP
HLS
- bump hls-js to v1.4.12 (#2283)
SRT
- support publishing and reading MPEG-1/2/4 video with SRT and UDP/MPEG-TS (#2277)
UDP
- fix reading two streams with same port and different multicast IP (#2133) (#2332)
- support publishing and reading MPEG-1/2/4 video with SRT and UDP/MPEG-TS (#2277)
API
Dependencies
- build(deps): bump golang.org/x/term from 0.11.0 to 0.12.0 (#2294)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.17 to 3.2.18 (#2292)
- build(deps): bump golang.org/x/crypto from 0.12.0 to 0.13.0 (#2299)
- build(deps): bump github.com/pion/ice/v2 from 2.3.10 to 2.3.11 (#2300)
- build(deps): bump golang.org/x/net from 0.14.0 to 0.15.0 (#2301)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.18 to 3.2.19 (#2328)
- build(deps): bump github.com/pion/interceptor from 0.1.18 to 0.1.19 (#2329)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.19 to 3.2.20 (#2340)
v1.0.3
v1.0.2
Fixes and improvements
General
- fix changing log level with hot reloading or API (#2278)
RTSP
- server: fix crash when calling RECORD and PAUSE (bluenviron/gortsplib#392)
- check validity of SPS/PPS in SDPs (bluenviron/gortsplib#394)
SRT
- fix memory leak during reader disconnection (#2273)
RTMP
- fix RTMPE handshake error when a public key starts with zero (#2269)
v1.0.1
Fixes and improvements
General
- print warning when the write queue is full (#2251)
- limit logging of decode errors (#2253)
- fix maxReaders limit in case of multiple tracks (#2246) (#2264)
Codecs
- h264, h265: raise MaxAccessUnitSize to 8 MiB (bluenviron/mediacommon#59) by @database64128
- Raise maximum NALU count (bluenviron/mediacommon#64) by @milaq
- h264: add limit on maximum number of reordered frames (bluenviron/mediacommon#65)
- mpegts: make 'PTS is missing' a decode error (bluenviron/mediacommon#67)
- h264: support frame_mbs_only_flag = 0 (bluenviron/mediacommon#68)
- av1: fix parsing sequence headers from libsvtav1 (bluenviron/mediacommon#69)
RTSP
- add Speex format
- decode RTP time globally
- emit a decode error in case of packets with wrong SSRC
- allow publishers to set the title of the stream (#979)
- support routing ULPFEC group definitions
- client: support server-sent requests (bluenviron/gortsplib#93) (bluenviron/gortsplib#378)
- client: stop main routine immediately in case of a read error (bluenviron/gortsplib#379)
- re-enable consistency checks on clock rate of tracks (bluenviron/gortsplib#382)
- discard invalid video tracks (bluenviron/gortsplib#381) (bluenviron/gortsplib#383)
- ringbuffer: when buffer is full, preserve queued data (bluenviron/gortsplib#386)
- ringbuffer: discard pending data when buffer is closed (bluenviron/gortsplib#387)
RTMP
- allow RTMP streaming with codecid=av01 or hvc1 (#2232) by @ph0b
- support publishing AV1/H265 with OBS 30 (#2217) (#2234)
- support publishing VP9 tracks with RTMP (#2247)
- fix conversion of AV1/VP9 tracks from HLS/RTMP to RTSP (#2263)
- support ingesting RTMPE streams (#2189)
- add limit on message body size (#2252)
HLS
- embed hls.js into the server (#2202) (#2236)
- bump hls-js to v1.4.10 (#2239)
- fix conversion of AV1/VP9 tracks from HLS/RTMP to RTSP (#2263)
- fix wrong protocol sent to external authentication server (#2213)
- hls source: fix formatting debug log messages (#2243)
- return 404 when requesting hls.min.js.map (#2262)
Dependencies
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.14 to 3.2.15 (#2216)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.15 to 3.2.16 (#2220)
- build(deps): bump github.com/google/uuid from 1.3.0 to 1.3.1 (#2228)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.16 to 3.2.17 (#2229)
- build(deps): bump github.com/asticode/go-astits from 1.12.0 to 1.13.0 (bluenviron/mediacommon#56)
v1.0.0
Why 1.0?
This software now supports all the main streaming protocols (SRT / WebRTC / RTSP / RTMP / LL-HLS), a wide range of codecs, a series of innovative protocol-codec combinations (for instance HLS + AV1), and is deployed in production environments. The main objective of the project has been achieved, that is to provide a routing solution for real-time media streams to any user, from householders that want to manage their video feeds to developers that need to route media streams to and from microservices.
There are a couple of secondary features that will be certainly developed in the near future (native recording, native scalability, both can already be achieved by using external integrations) but other than that the focus will be on fixing eventual issues related to the existing features.
New features
SRT
- support publishing, reading, proxying with SRT (#2068)
WebRTC
- support proxying WebRTC streams with WHEP (#2142)
HLS
UDP
- support reading MPEG-1 tracks (#2147)
General
Fixes and improvements
RTSP
- support G726 format (bluenviron/gortsplib#330)
- fix race condition in WritePacketRTP() (bluenviron/gortsplib#334)
- fix SDP unmarshaling with Vurix NVR (#2128)
- add VP8/VP9 limits
HLS
- show IP in logs in case of failed authentication (#2099)
- prevent brute-force attacks by waiting before sending responses (#2100)
- reply status code 204 to OPTIONS requests (#2141)
- prefer Opus tracks to MPEG-4 tracks (#2158)
- fix parsing decimal EXT-X-TARGETDURATION (bluenviron/gohlslib#55)
- fix parsing EXT-X-STREAM-INF with spaces (bluenviron/gohlslib#56)
- fix parsing playlists without trailing newline (bluenviron/gohlslib#58)
- add Cache-Control header to all responses
- prepend prefix to segments. . This is needed to prevent usage of cached segments from previous muxing sessions
WebRTC
- show both IP and port during session creation and in API (#2096)
- send session ID to external auth server (#1981) (#2098)
- show IP in logs in case of failed authentication (#2099)
- prevent brute-force attacks by waiting before sending responses (#2100)
- speed up track detection (#2105)
- fix race condition when broadcasting RTP packets (#2117)
- reply status code 204 to OPTIONS requests (#2141)
UDP
- support using domain names instead of IPs (#2150)
API
- fix crash when calling /v1/webrtcsessions/list just after session creation (#2097)
- add transport to RTSP sessions (#2151)
- remove sourceReady from docs (#2163)
General
- return an error in case the random number generator fails (#2120)
- remove warning when decoding VP8 or VP9 (#2159). . avoid printing 'received a non-starting fragment without any previous starting fragment'
- disable check for missing key frames (#1904) (#2161)
- rename disablePublisherOverride into overridePublisher (#2164)
- remove 'disable' from names of configuration parameters (#2101)
- fix crash in case of specially-crafted HTTP requests (#2166) (#2169)
- Add video player options via query string (#2145)
- mpegts: fix panic with specially-crafted strings; add fuzzing (bluenviron/mediacommon#29)
- h264, h265: raise MaxNALUSize (bluenviron/mediacommon#30)
- h264, h265: rename MaxNALUSize to MaxAccessUnitSize and apply to entire access unit (bluenviron/mediacommon#36)
- h264: fix 'invalid POC' error (bluenviron/mediacommon#55)
Dependencies
- build(deps): bump github.com/pion/rtp from 1.7.13 to 1.8.0 (#2091)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.12 to 3.2.13 (#2092)
- build(deps): bump github.com/gookit/color from 1.5.3 to 1.5.4 (#2089)
- build(deps): bump github.com/abema/go-mp4 from 0.10.1 to 0.11.0 (#2112)
- build(deps): bump github.com/pion/rtp from 1.8.0 to 1.8.1 (#2129)
- build(deps): bump golang.org/x/net from 0.12.0 to 0.13.0 (#2139)
- build(deps): bump github.com/pion/webrtc/v3 from 3.2.13 to 3.2.14 (#2140)
- build(deps): bump golang.org/x/term from 0.10.0 to 0.11.0 (#2148)
- build(deps): bump golang.org/x/net from 0.13.0 to 0.14.0 (#2170)
- build(deps): bump github.com/pion/ice/v2 from 2.3.9 to 2.3.10 (#2171)
- build(deps): bump github.com/asticode/go-astits
v0.23.8
Fixes and improvements
General
- hls, webrtc: add Authorization to Access-Control-Allow-Headers (#2018) (#2020)
- stop execution in case of panics when handling HTTP requests (#2021)
- disable colored log lines when output is not a terminal (#1477) (#2050)
- make sure components are closed in a specific order (#2065)
- update list of supported codecs inside error messages (#2058) (#2073)
WebRTC
- allow removing default WebRTC ICE server with environment variables (#2064)
- fix race condition that caused random crashes during handshake (#2072)
- fix memory leak during shutdown or session kick (#2079)
- display publish-related errors in web page (#1836) (#2080)
Raspberry Pi Camera
- fix a compile error with recent libcamera (#2081) by @hideaki-t
- rpi camera: add rpiCameraHDR parameter (#1876) (#2083)
API
- add path to RTMP connections, RTSP sessions, WebRTC sessions (#1962) (#2022)
- apidocs: fix source/reader types (#2027)
- fix error in case of nested paths (#2040) by @Jordy84
- return 404 when a path configuration is not found (#2067) (#2074)
- allow to edit properties of path config "all" (#2067) (#2075)
- add 'readyTime' to paths (#2049) (#2082)
Dependencies
v0.23.7
Fixes and improvements
General
- set Access-Control-Allow-Headers to a static string (#1973)
WebRTC
- do not pass preflight requests to external auth (#1941) (#1972)
- in the web page, pass query parameters to inner requests (#1976)
- fix memory leak when publishing or reading (#1884) (#1983)
- fix bitrate not being applied (#1984)
- forbid publishing zero tracks (#1991)
- allow setting Opus bitrate (#1908) (#1985)
- add option to disable audio effects (#1908) (#1989)
- move codec and bitrate settings on client side (#1990)
- support publishing with OBS and WebRTC (#1998)
- allow using special characters in ICE server credentials (#1953) (#2000)
RTSP
- generate RTCP receiver reports even before receiving RTCP sender reports (bluenviron/gortsplib#318). . (#1739)
HLS
- in the web page, pass query parameters to inner requests (#1976)
RPI Camera
API
Dependencies
- bump github.com/pion/webrtc/v3 from 3.2.10 to 3.2.11 (#2002)