3e09466c18
bump golangci-lint to 2.13.1 ( #6129 )
...
* bump golangci-lint to 2.13.1
* additional changes
---------
Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com >
2026-08-22 16:57:28 +00:00
Alessandro Ros and GitHub
550bb297dc
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.
2026-08-16 11:05:50 +00:00
Alessandro Ros and GitHub
a4ad182e4e
format imports ( #6041 )
2026-08-04 22:13:15 +00:00
Alessandro Ros and GitHub
3c77704ccf
rtsp: log write errors ( #6023 )
2026-08-02 16:48:13 +00:00
Alessandro Ros and GitHub
817c22cc6c
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.
2026-07-29 14:36:23 +02:00
Alessandro Ros and GitHub
0378876293
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.
2026-07-18 22:39:28 +02:00
Alessandro Ros and GitHub
874b47d0b0
remove redundant copy operation ( #5862 )
...
Since #5856 , OrigDesc of Streams is never changed, so there's no reason
to clone offlineDesc before putting it into OrigDesc.
2026-06-13 11:45:44 +02:00
Alessandro Ros and GitHub
3940e68415
rtsp: 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.
2026-06-10 23:59:40 +02:00
Alessandro Ros and GitHub
7e576d077f
rtsp: use ServerStream.ReloadDesc to propagate description changes to RTSP servers ( #5856 )
2026-06-10 23:46:02 +02:00
Alessandro Ros and GitHub
5b9b6afcb8
replace errors.As with modern errors.AsType ( #5834 )
2026-06-05 09:56:06 +02:00
c11810c2fc
build(deps): bump github.com/bluenviron/gortsplib/v5 from 5.5.3 to 5.5.4 ( #5822 )
...
* build(deps): bump github.com/bluenviron/gortsplib/v5 from 5.5.3 to 5.5.4
Bumps [github.com/bluenviron/gortsplib/v5](https://github.com/bluenviron/gortsplib ) from 5.5.3 to 5.5.4.
- [Commits](https://github.com/bluenviron/gortsplib/compare/v5.5.3...v5.5.4 )
---
updated-dependencies:
- dependency-name: github.com/bluenviron/gortsplib/v5
dependency-version: 5.5.4
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
* additional changes
---------
Signed-off-by: dependabot[bot] <support@github.com >
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com >
2026-06-02 21:50:15 +02:00
Alessandro Ros and GitHub
0f5a76e253
modernize code ( #5814 )
2026-05-31 20:33:48 +02:00
Alessandro Ros and GitHub
0edc3dbe86
rtmp: support reading and writing FLAC ( #5778 ) ( #5789 )
2026-05-21 14:50:06 +02:00
Alessandro Ros and GitHub
66a67188fe
tests: use testing.T.TempDir rather than os.TempDir ( #5709 )
2026-04-29 22:47:47 +02:00
Alessandro Ros and GitHub
f87d9e659e
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.
2026-04-25 21:10:34 +02:00
Alessandro Ros and GitHub
0eb7089ed6
use safer atomic structs instead of atomic functions ( #5622 )
2026-03-31 11:30:50 +02:00
Alessandro Ros and GitHub
3381b196fb
solve codec labels internally ( #5603 )
...
stop using gortsplib format.Format.Codec() for getting codec names.
2026-03-21 18:22:49 +01:00
Alessandro Ros and GitHub
c8e07b55d5
api: add new stats ( #5582 )
...
- RTSPSession.outboundRTPPacketsDiscarded
- Path.inboundFramesInError
- SRTConn.outboundFramesDiscarded
- WebRTCSession.outboundFramesDiscarded
- RTMPConn.outboundFramesDiscarded
- HLSMuxer.outboundFramesDiscarded
2026-03-17 17:22:15 +01:00
Alessandro Ros and GitHub
adf45596a3
api: rename WebRTC stats to match RTSP ones ( #5581 )
2026-03-16 23:29:25 +01:00
Alessandro Ros and GitHub
dfce20fefa
api: add RTSP reported lost packets ( #5198 ) ( #5579 )
...
The new outboundRtpPacketsReportedLost property allows to track RTP
packets that have been reported lost by readers. Furthermore, stats now
have a "inbound" or "outbound" prefix to improve readability.
2026-03-16 22:10:18 +01:00
Alessandro Ros and GitHub
72832369f6
inherit MPEG-4 audio type from alwaysAvailableFile ( #5539 )
2026-03-01 10:12:35 +01:00
Alessandro Ros and GitHub
05ab631996
refactor alwaysAvailable tests ( #5537 )
2026-03-01 00:20:20 +01:00
Alessandro Ros and GitHub
2f91c8198c
fix audio from alwaysAvailableFile not being streamed ( #5535 )
2026-02-28 21:46:25 +01:00
Alessandro Ros and GitHub
10e0271755
fix corrupted video with alwaysAvailableFile ( #5534 )
...
when alwaysAvailableFile points to a file with a H265 or H264 track,
server is started, an online stream is published and then closed, video
was getting corrupted since the online video was overriding the
parameters of the offline video.
2026-02-28 21:06:07 +01:00
Alessandro Ros and GitHub
4ebfcde8e2
fix MPEG-4 audio configuration not matching error ( #5468 ) ( #5533 )
...
This happened when using alwaysAvailableFile and a MPEG-4 audio track.
2026-02-28 20:17:44 +01:00
Alessandro Ros and GitHub
5e80554d20
improve playback precision of alwaysAvailable offline segment ( #5530 )
2026-02-28 18:39:52 +01:00
Alessandro Ros and GitHub
549300cbd4
prevent using alwaysAvailableFile and alwaysAvailableTracks together ( #5529 )
2026-02-28 18:31:41 +01:00
Alessandro Ros and GitHub
4974cacb94
improve video/audio sync of alwaysAvailable ( #5443 ) ( #5508 )
...
store elapsed time once for the entire stream and start PTS of sub
streams from there.
2026-02-22 18:25:32 +01:00
2e429158a8
log packet sizes if UDPMaxPayloadSize is exceeded ( #4668 )
...
Co-authored-by: Alessandro Ros <aler9.dev@gmail.com >
2026-02-22 13:42:12 +01:00
bluenviron-bot and GitHub
a07526d57c
bump Golang to 1.26 ( #5460 )
2026-02-21 14:48:53 +01:00
Alessandro Ros and GitHub
336714157f
fix codec parameters not being loaded from alwaysAvailableFile ( #5484 )
2026-02-18 21:29:24 +01:00
Alessandro Ros and GitHub
ae21240c76
add additional checks on always-available streams ( #5408 )
...
make sure that published streams match MPEG-4 audio, G711 and LPCM
parameters declared in configuration or used by the offline file.
2026-02-06 16:06:24 +01:00
Alessandro Ros and GitHub
a56408db19
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.
2026-01-31 14:44:58 +01:00
Alessandro Ros and GitHub
02fe2e2b42
tests: fix race condition ( #5354 )
2026-01-17 23:21:34 +01:00
Alessandro Ros and GitHub
653d10fb75
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.
2026-01-16 14:03:13 +01:00
bluenviron-bot and GitHub
320bd3f4ae
bump golangci-lint to 2.8.0 ( #5350 )
2026-01-15 22:43:32 +01:00
Alessandro Ros and GitHub
eba3b828a6
print last processing error ( #5323 )
2026-01-06 21:48:36 +01:00
Alessandro Ros and GitHub
cd34de8770
print last decode error ( #5319 )
...
decode errors are still grouped together, but the last one is now
printed.
2026-01-05 15:28:24 +01:00
Alessandro Ros and GitHub
0cdae40fe3
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.
2025-10-12 11:02:14 +02:00
Alessandro Ros and GitHub
f5f03562d3
rewrite Unit definition ( #5079 )
...
Stream units now share the same struct, with a specialized payload.
2025-10-11 12:18:51 +02:00
Alessandro Ros and GitHub
cd80814009
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.
2025-09-29 09:28:04 +02:00
Alessandro Ros and GitHub
e3b8af8933
switch to gortsplib/v5 ( #4978 )
2025-09-16 13:10:34 +02:00
Alessandro Ros and GitHub
57021467e9
rename formatprocessor into codecprocessor ( #4962 )
2025-09-12 10:24:11 +02:00
Alessandro Ros and GitHub
d423a71aaa
update linter settings ( #4790 )
2025-07-26 16:44:32 +02:00
Alessandro Ros and GitHub
9ddcbf5c97
recorder: limit maximum part size ( #4674 ) ( #4760 )
...
this prevents RAM exhaustion.
2025-07-20 19:16:33 +02:00
Alessandro Ros and GitHub
1083eea307
make RTP packet size compatible with RTSP/SRTP ( #4692 )
...
when RTSP encryption is enabled, maximum RTP packet size is slightly
decreased to make room for SRTP.
2025-07-05 15:42:58 +02:00
Alessandro Ros and GitHub
b564dc9ff1
rtsp: emit log message when remuxing RTP packets ( #4422 )
2025-04-13 10:21:46 +02:00
Alessandro Ros and GitHub
14eb9f6175
improve tests ( #4423 )
2025-04-13 10:00:52 +02:00
Alessandro Ros and GitHub
0d46cf3f74
rename stream decode errors into processing errors ( #4370 )
...
Stream errors include both errors from decoding RTP packets into
frames, and errors from encoding frames into RTP packets. "processing
errors" is more fit.
2025-03-26 15:14:08 +01:00
Alessandro Ros and GitHub
f851cb6961
add missing Start() call; fix wrong sprintf ( #4369 )
2025-03-26 12:47:09 +01:00