161 Commits
Author SHA1 Message Date
Alessandro RosandGitHub 8ac6ba64c8 moq: support pulling streams from other servers (#6111) 2026-08-18 13:23:40 +02:00
Alessandro RosandGitHub 78081d71d5 rpi: 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.
2026-08-15 16:27:41 +02:00
Alessandro RosandGitHub a4ad182e4e format imports (#6041) 2026-08-04 22:13:15 +00:00
98ab3009ea 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.

---------

Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
2026-08-04 21:57:15 +02:00
Alessandro RosandGitHub fa7a89f840 rtsp: restrict UDP port range to 32768-60999 (#5398) (#5958)
this is the default Linux ephemeral port range.
2026-07-18 20:59:33 +02:00
Alessandro RosandGitHub 96aeb1e603 rename runOnReady into runOnAvailable, runOnNotReady into runOnUnavailable (#5957) 2026-07-18 17:58:16 +02:00
Alessandro RosandGitHub 8909e35a17 add runOnOnline / runOnOffline hooks (#5399) (#5956)
These are triggered and a stream is online (i.e. not just provided by
an offline segment).
2026-07-18 17:41:38 +02:00
Alessandro RosandGitHub e98b727277 fix error message (#5922)
'all' is a synonym for 'all_others'
2026-07-05 11:00:09 +02:00
Alessandro RosandGitHub bf098c7eb5 support encoding secondary stream with H264 (2/2) (#4485) (#5898) 2026-06-28 11:19:23 +02:00
Alessandro RosandGitHub 1a7c10af1e rpicamera: support encoding primary stream with MJPEG (2/2) (#5892) 2026-06-27 19:19:36 +02:00
Alessandro RosandGitHub 07d0e232b2 rpi: add unified rpiCameraH264Profile, rpiCameraH264Level params (#5894)
These replace rpiCameraHardwareH264Profile, rpiCameraHardwareH264Level, rpiCameraSoftwareH264Profile, rpiCameraSoftwareH264Level.
2026-06-25 22:07:36 +02:00
d31c0b3900 rtsp: add rtspScale parameter to inject Scale header on PLAY (#5800)
Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
2026-06-20 12:08:15 +02:00
6d1f152cc2 support using regexp groups in every part of a source URL (#5766) (#5779)
Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
2026-06-03 23:40:22 +02:00
Alessandro RosandGitHub 7418e51031 prevent directory traversal attacks (#5602)
Path names are used as part of paths in several components: in the
recorder, in the playback server and in every HTTP-based component
(WebRTC, HLS, API). Special characters that allow to escape from the
intended directory are now forbidden in order to prevent directory
traversal attacks.
2026-03-23 20:16:12 +01:00
f98c9c59ca rtsp: support unwrapping MPEG-TS tracks (#5476)
this allows to use MPEG-TS tracks with other protocols and with the recording system.

---------

Co-authored-by: aler9 <46489434+aler9@users.noreply.github.com>
2026-03-17 19:14:04 +01:00
Alessandro RosandGitHub c6bb332664 api: add deprecated fields to the OpenAPI definition (#5575) 2026-03-15 19:28:06 +01:00
Alessandro RosandGitHub 549300cbd4 prevent using alwaysAvailableFile and alwaysAvailableTracks together (#5529) 2026-02-28 18:31:41 +01:00
Alessandro RosandGitHub 87fbfebf06 webrtc: add whepBearerTokenParameter (#3796) (#5486)
this allows to pass Authorization: Bearer to servers that require it.
2026-02-19 11:57:39 +01:00
Alessandro RosandGitHub 3c46bfd337 warn when alwaysAvailableFile is not MP4 (#5483) 2026-02-18 21:29:42 +01:00
Alessandro RosandGitHub f991821a5f webrtc: allow tuning WHEP timeouts (#5027) (#5479)
add whepHandshakeTimeout, whepTrackGatherTimeout, whepSTUNGatherTimeout
2026-02-18 16:29:25 +01:00
Alessandro RosandGitHub cb69d64fac deprecate unix+rtp (#5318) (#4999) (#5351) (#5470)
Unix socket are stream-based connections, while RTP requires
packet-based connections. While packet-based Unix sockets exist
(unixgram), no client supports them. Consequently we are forced to
deprecate unix+rtp.
2026-02-15 13:02:18 +01:00
Dimitri PappasandGitHub 9ffbdbdc1f fix typo in error message ('alwaysAvailableVideo' -> 'alwaysAvailableFile') (#5417) 2026-02-03 11:59:20 +01:00
Alessandro RosandGitHub 74eaa11d3a rtsp: add rtspUDPSourcePortRange param (#5363) (#5397) 2026-01-31 16:21:53 +01:00
Alessandro RosandGitHub 92f9ee7b78 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.
2026-01-31 15:29:24 +01:00
Alessandro RosandGitHub 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 RosandGitHub a4561a8339 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.
2026-01-25 19:49:39 +01:00
Alessandro RosandGitHub f4f795a2a6 simplify configuration parsing (#5372)
work around golang/go#21092 globally
2026-01-24 19:33:47 +01:00
Alessandro RosandGitHub adc4a6ceb6 add udpReadBufferSize parameter (#5129)
this allows to set a global UDP read buffer, applied to every UDP socket.
2025-10-29 11:28:22 +01:00
Alessandro RosandGitHub f81c50ee68 rtsp: support reading streams tunneled with HTTP or WebSocket (#4986) 2025-09-17 22:31:20 +02:00
Alessandro RosandGitHub e3b8af8933 switch to gortsplib/v5 (#4978) 2025-09-16 13:10:34 +02:00
Alessandro RosandGitHub 462fb2bd0f allow setting UDP read buffer size (#3308) (#4846)
new parameters: rtspUDPReadBufferSize, rtpUDPReadBufferSize, mpegtsUDPReadBufferSize
2025-08-11 12:21:00 +02:00
Alessandro RosandGitHub d0430d8ea5 support ingesting RTP streams (#1515) (#4843) 2025-08-09 16:12:10 +02:00
Alessandro RosandGitHub 7feff1d1dc support MPEG-TS over unix sockets (#4388) (#4389) (#4828) 2025-08-08 18:03:38 +02:00
Alessandro RosandGitHub 7ac752097b rpi: allow setting software H264 profile and level (#3965) (#4786) 2025-07-25 13:40:15 +02:00
Alessandro RosandGitHub 0fe12f8bf6 rpi: rename rpiCameraProfile into rpiCameraH264Profile, rpiCameraLevel into rpiCameraH264Level (#3965) (#4785) 2025-07-25 11:44:55 +02:00
Alessandro RosandGitHub 1cabc382b0 rpi: rename rpiCameraJPEGQuality in rpiCameraMJPEGQuality (#4784) 2025-07-25 11:40:09 +02:00
Alessandro RosandGitHub 94e001e736 rpi: add validity checks on rpiCameraProfile and rpiCameraLevel (#4783) 2025-07-25 11:36:40 +02:00
Alessandro RosandGitHub 9ddcbf5c97 recorder: limit maximum part size (#4674) (#4760)
this prevents RAM exhaustion.
2025-07-20 19:16:33 +02:00
Alessandro RosandGitHub adf6ca9f90 delete paths that belong to a new configuration (#4013) (#4568)
when a new configuration is pushed with either API or hot reloading,
the server now checks whether existing paths belong to a new
configuration. If they do, these paths are deleted.
2025-05-27 22:02:37 +02:00
Alessandro RosandGitHub 5013d585fc allow using colon in path names (#4377) (#4519) 2025-05-11 10:55:14 +02:00
Alessandro RosandGitHub 8ce49727d6 rpi: support exposing a secondary stream from the same camera (#4426) 2025-04-14 11:56:08 +02:00
Alessandro RosandGitHub 517ba4124c restore support for using unix timestamp in record path (#4330) (#4417) 2025-04-12 12:16:08 +02:00
Alessandro RosandGitHub 77a3c7ae6e webrtc: route original absolute timestamp of packets (#1300) (#4415) 2025-04-12 11:34:27 +02:00
Alessandro RosandGitHub 8b98c02903 rtsp: route original absolute timestamp of packets (#1300) (#4378) 2025-03-29 19:08:42 +01:00
Alessandro RosandGitHub b64650ca4a record: prevent recordDeleteAfter from deleting current segment (#4331) 2025-03-16 12:24:40 +01:00
Alessandro RosandGitHub 44136b3045 api: fix crash in /recordings/list (#4040) (#4291)
The API crashed when

- '%path%' is not present in 'recordPath'
- 'all_others' is in 'paths'
- there's at least one recording segment

A recording segment without path is parsed as a segment with an empty
path. This path is then passed to FindPathConf(), that returns an error
in case of empty or invalid paths. This error is not checked for
performance reasons, leading to the crash.

This PR prevents empty or invalid paths from reaching FindPathConf().
2025-02-28 19:04:05 +01:00
Alessandro RosandGitHub d822c2a200 rtsp: support using relative URLs in sourceRedirect (#4260) 2025-02-18 15:23:07 +01:00
Alessandro RosandGitHub ac0ddc9e8a playback: improve /list response time (#3637) (#4096)
Response times of the /list endpoint were slow because the duration of
each segment was computed from scratch by summing the duration of each
of its parts.

This is improved by storing the duration of the overall segment in the
header and using that, if available.
2025-01-03 13:08:46 +01:00
Alessandro RosandGitHub b49acb1e00 accept durations expressed as days (i.e. '1d') (#4094) 2025-01-02 12:44:15 +01:00
Alessandro RosandGitHub df3362aef8 warn users if deprecated parameters are being used (#4080) 2024-12-25 19:28:54 +01:00