]>
git.sesse.net Git - cubemap/log
Steinar H. Gunderson [Mon, 3 Apr 2023 20:09:07 +0000 (22:09 +0200)]
Add a LD_PRELOAD-able library to force Metacube output from FFmpeg.
This hooks just the right amount of functions to add Metacube output
to arbitrary FFmpeg programs, but is obviously very brittle.
(Native FFmpeg support would be better, but a patch did not
go through when I tried a while back.) It is only lightly tested.
Documentation in the README and cubemap.config.sample.
Steinar H. Gunderson [Mon, 3 Apr 2023 19:35:04 +0000 (21:35 +0200)]
Bump version number.
It's pretty clear next version is not going to be a simple subrevision.
Steinar H. Gunderson [Sun, 2 Apr 2023 20:33:39 +0000 (22:33 +0200)]
Properly close sockets (and more importantly, kill child processes) on Ctrl-C.
Steinar H. Gunderson [Sun, 2 Apr 2023 20:25:09 +0000 (22:25 +0200)]
Fix yet more stupid close-on-exec bugs.
Steinar H. Gunderson [Sun, 2 Apr 2023 20:21:29 +0000 (22:21 +0200)]
Minor close-on-exec fix.
Steinar H. Gunderson [Sun, 2 Apr 2023 20:10:31 +0000 (22:10 +0200)]
Fix some memory leaks that are probably irrelevant in practice.
Steinar H. Gunderson [Sun, 16 May 2021 13:04:34 +0000 (15:04 +0200)]
Fix a crash when a HTTP input connected to an UDP output goes unavailable.
Steinar H. Gunderson [Sat, 8 May 2021 11:40:48 +0000 (13:40 +0200)]
Escape spaces in cubemap-input.stats.
Steinar H. Gunderson [Fri, 7 May 2021 15:57:38 +0000 (17:57 +0200)]
Stop leaking the /dev/null fd after spawning a subprocess.
Steinar H. Gunderson [Thu, 6 May 2021 17:26:38 +0000 (19:26 +0200)]
Fix various close-on-exec bugs.
Steinar H. Gunderson [Thu, 6 May 2021 17:14:21 +0000 (19:14 +0200)]
When a child process times out or otherwise closes on us, kill it.
Yichen Yan [Thu, 6 May 2021 11:01:18 +0000 (13:01 +0200)]
fix potential ambiguity between ::bind() and std::bind()
Steinar H. Gunderson [Wed, 5 May 2021 22:42:53 +0000 (00:42 +0200)]
Fix infinite CPU usage on waitpid().
Steinar H. Gunderson [Wed, 5 May 2021 18:40:39 +0000 (20:40 +0200)]
Support input from pipes (subprocesses).
With a program that can output Metacube on stdout, such as a suitably
patched FFmpeg binary, this gives Cubemap transcoding/remuxing capabilities.
Of course, one cannot upgrade such a binary by SIGHUP-ing it, but it will
survive a Cubemap reload/restart.
Steinar H. Gunderson [Wed, 5 May 2021 17:02:38 +0000 (19:02 +0200)]
Set close-on-exec on all file descriptors we open.
This is useful when we're opening up to fork off child processes,
to avoid various sockets etc. leaking into them (without having to
close all of them explicitly).
Steinar H. Gunderson [Wed, 5 May 2021 17:03:24 +0000 (19:03 +0200)]
Support quoted spaces in configuration files.
Steinar H. Gunderson [Wed, 5 May 2021 06:56:50 +0000 (08:56 +0200)]
Simplify setting the non-blocking flag when creating HTTP sockets.
Steinar H. Gunderson [Wed, 5 May 2021 06:51:50 +0000 (08:51 +0200)]
Bump version number.
Steinar H. Gunderson [Sun, 17 Nov 2019 18:59:12 +0000 (19:59 +0100)]
Release Cubemap 1.4.3.
Steinar H. Gunderson [Sun, 17 Nov 2019 18:52:23 +0000 (19:52 +0100)]
Always compile with -pthread.
Steinar H. Gunderson [Wed, 16 Oct 2019 16:56:14 +0000 (18:56 +0200)]
Allow (and forward) zero-byte UDP packets.
Steinar H. Gunderson [Sun, 13 Oct 2019 21:14:04 +0000 (23:14 +0200)]
Fix a crash when trying to get HLS fragments from a disconnected strema.
After the last patch, we would try to serve HLS fragments even if the
backend is down, but we had zeroed out the HTTP header, causing an
assertion failure with HTTP/1.1 clients (and an invalid HTTP response
for HTTP/1.0 clients). Fix by keeping the header and setting a special
“unavailable” flag instead (which allows us to keep sending HLS fragments).
Steinar H. Gunderson [Mon, 15 Apr 2019 07:33:36 +0000 (09:33 +0200)]
Keep the HLS backlog even if the stream header changes.
The typical case here is if we are streaming fMP4 and the encoder
has to restart. The regular (non-HLS) stream has to cut off the
backlog here, but HLS supports multiple headers, so we can add a
discontinuity to keep the backlog seekable.
I haven't actually found a client that will play correctly across
the discontinuity, but hls.js can at least _seek_ across it,
which is already useful.
Steinar H. Gunderson [Sat, 13 Apr 2019 12:38:14 +0000 (14:38 +0200)]
Fix an issue where HLS fragments would become too short when pts was low.
Steinar H. Gunderson [Sat, 22 Dec 2018 00:26:28 +0000 (01:26 +0100)]
Fix an ineffective assert.
Found by Coverity Scan.
Steinar H. Gunderson [Sat, 22 Dec 2018 00:25:36 +0000 (01:25 +0100)]
Silence an irrelevant Coverity Scan warning.
Steinar H. Gunderson [Sat, 22 Dec 2018 00:24:26 +0000 (01:24 +0100)]
Fix an unlikely leak in HTTPInput.
Found by Coverity Scan.
Steinar H. Gunderson [Sat, 22 Dec 2018 00:23:10 +0000 (01:23 +0100)]
Fix an unneeded comparison with zero.
Found by Coverity Scan.
Steinar H. Gunderson [Sat, 22 Dec 2018 00:21:50 +0000 (01:21 +0100)]
Fix serialization of Client::header_or_short_response_bytes_sent.
We used an uninitialized variable due to a typo. Found by Coverity Scan.
Steinar H. Gunderson [Fri, 21 Dec 2018 14:38:05 +0000 (15:38 +0100)]
Release Cubemap 1.4.2.
Steinar H. Gunderson [Thu, 1 Nov 2018 16:40:24 +0000 (17:40 +0100)]
Make integer parsing a bit prettier, and fix problems with backlogs larger than 32 bits.
Steinar H. Gunderson [Wed, 12 Sep 2018 21:03:05 +0000 (23:03 +0200)]
Release Cubemap 1.4.1.
Steinar H. Gunderson [Wed, 12 Sep 2018 17:58:33 +0000 (19:58 +0200)]
Fix 32-bit compilation issues.
Steinar H. Gunderson [Fri, 31 Aug 2018 23:23:06 +0000 (01:23 +0200)]
Release Cubemap 1.4.0.
Steinar H. Gunderson [Wed, 29 Aug 2018 07:34:00 +0000 (09:34 +0200)]
Some README updates.
Steinar H. Gunderson [Sun, 26 Aug 2018 14:56:22 +0000 (16:56 +0200)]
Force input encoding for UDP streams to raw already at config parsing.
Otherwise, it would be counted as src_encoding=metacube at the point
where we matched it up with serialized streams, causing problems with
the stream being dropped on reload.
Bug reported by Tore Sinding Bekkedal.
Steinar H. Gunderson [Sun, 8 Jul 2018 17:48:05 +0000 (19:48 +0200)]
Fix upgradability of keepalive status across exec.
Steinar H. Gunderson [Sun, 8 Jul 2018 17:47:26 +0000 (19:47 +0200)]
Add a TODO on Client::serving_hls_playlist.
Steinar H. Gunderson [Sun, 8 Jul 2018 17:44:07 +0000 (19:44 +0200)]
Fix that HTTP keepalive information would get lost across exec(), which could lead on crashes when a client had to skip data.
Steinar H. Gunderson [Thu, 17 May 2018 20:13:55 +0000 (22:13 +0200)]
Enable RX support for kTLS.
This bumps the TLS requirement to >= 4.17 (tested with 4.17.0-rc4),
and doesn't really help all that much (neither in performance nor
complexity), but there's no point in supporting a separate non-RX-capable
path for 4.13 through 4.16.
Includes updating tlse.c to the latest version.
Steinar H. Gunderson [Sun, 22 Apr 2018 18:19:27 +0000 (20:19 +0200)]
Make the Munin plugin stop count keepalive clients in the total.
Now that we have better control of HLS, it's better to just label
these as “unknown” and not count them in the stream total.
Steinar H. Gunderson [Sun, 22 Apr 2018 18:18:51 +0000 (20:18 +0200)]
Keep information about HLS downloads around for some time afterwards.
Gives _much_ more precise statistics for HLS clients, as they tend to
spend most of their time in idle (even with multiple connections).
Steinar H. Gunderson [Sun, 22 Apr 2018 18:18:02 +0000 (20:18 +0200)]
Do not close connections in keepalive across reloads.
Steinar H. Gunderson [Sun, 22 Apr 2018 16:33:56 +0000 (18:33 +0200)]
Correct the “bytes sent” counter for persistent connections in access.log.
Steinar H. Gunderson [Sun, 22 Apr 2018 15:18:33 +0000 (17:18 +0200)]
Update performance claims in README.
Update README; 10gig isn't even hard anymore these days, the kernels are so
fast. Andre Tomt verified ~40 Gbit/sec with kTLS on a quadcore 45W Xeon D,
with no particular tuning.
Steinar H. Gunderson [Sun, 22 Apr 2018 14:34:00 +0000 (16:34 +0200)]
Fix timeout behavior with persistent connections.
We'd either never time out clients (if the expiry check happened
while they were receiving a request) or time them out too soon
(based on the connection time instead of the time of last request end).
Steinar H. Gunderson [Tue, 17 Apr 2018 16:10:06 +0000 (18:10 +0200)]
Make the Munin plugin count downloading fragments as equivalent to the stream.
This doesn't really fix the full issue of counting HLS clients, but at least
it's a start.
Steinar H. Gunderson [Mon, 16 Apr 2018 19:06:25 +0000 (21:06 +0200)]
Unbreak header parsing; it was broken by the case-sensitivity fixes.
Steinar H. Gunderson [Tue, 10 Apr 2018 16:00:20 +0000 (18:00 +0200)]
Add a missing #include.
Reported by Marcus Nilsen.
Steinar H. Gunderson [Tue, 10 Apr 2018 15:58:38 +0000 (17:58 +0200)]
Flush after writing pending TLS data.
Cuts something like 600 ms away from the initial TLS handshake,
as we kept having unflushed data that would require waiting for
the 200 ms TCP_CORK timer.
Steinar H. Gunderson [Mon, 9 Apr 2018 20:56:24 +0000 (22:56 +0200)]
Make HTTP header parsing case-insensitive.
Steinar H. Gunderson [Mon, 9 Apr 2018 18:57:15 +0000 (20:57 +0200)]
Capitalize HTTP header names after dashes.
In particular, writing Content-Length instead of Content-length fixes a
problem where VLC's HTTP client would hang forever on our responses.
This makes HLS generally work in VLC, although it still starts playing
from the start instead of from the end.
Steinar H. Gunderson [Mon, 9 Apr 2018 18:28:31 +0000 (20:28 +0200)]
Send close_notify when closing a kTLS connection; fixes some warnings from GnuTLS.
Steinar H. Gunderson [Sat, 7 Apr 2018 10:04:38 +0000 (12:04 +0200)]
Try to fix some overflow issues on 32-bit platforms, where size_t is 32-bit. Untested.
Steinar H. Gunderson [Sat, 7 Apr 2018 09:15:50 +0000 (11:15 +0200)]
Fix a GCC warning.
Steinar H. Gunderson [Sat, 7 Apr 2018 09:14:51 +0000 (11:14 +0200)]
Replace map with unordered_map nearly everywhere, for speed.
Steinar H. Gunderson [Sat, 7 Apr 2018 00:58:10 +0000 (02:58 +0200)]
When doing persistent connections, explicitly flush the socket so that we do not get 200 ms extra delay for the last bytes due to TCP_CORK.
Steinar H. Gunderson [Fri, 6 Apr 2018 20:57:14 +0000 (22:57 +0200)]
Add support for serving HLS playlists.
This depends on the new Metacube PTS metadata block, which only
Nageru >= 1.7.2 serves at the moment. Lightly tested with iOS and hls.js;
does not work with VLC and mpv yet.
Steinar H. Gunderson [Thu, 5 Apr 2018 18:21:22 +0000 (20:21 +0200)]
Add support for deduplicating headers/short responses.
We don't do any of it right now, but it is relevant when we get HLS
playlists, which we may very well want to share between clients.
Steinar H. Gunderson [Wed, 4 Apr 2018 20:46:20 +0000 (22:46 +0200)]
Add ?frag=header for getting a HLS fragment of the header only (useful for fMP4).
Steinar H. Gunderson [Tue, 3 Apr 2018 22:40:33 +0000 (00:40 +0200)]
Support delivering fragments from the backlog; intended for HLS.
Steinar H. Gunderson [Tue, 3 Apr 2018 21:29:45 +0000 (23:29 +0200)]
Support HTTP/1.1 persistent connections (not that useful yet).
Steinar H. Gunderson [Fri, 6 Apr 2018 17:13:21 +0000 (19:13 +0200)]
Do not serialize prebuffering_bytes in StreamProto.
There's no need to do this now that we can't have zombie streams anymore
(to be honest, the reason used to be rather thin already; it probably was
rather unintentional).
Steinar H. Gunderson [Fri, 6 Apr 2018 17:11:03 +0000 (19:11 +0200)]
Automatically delete streams that are no longer in the configuration file.
Earlier, you had to mark this by setting src=delete, or the stream would linger
on in a sort of half-state; this was meant as a protection against configuration
messup. It has shown not to be that easy to mess this up in practice, so remove
it to make cleanup simpler.
Steinar H. Gunderson [Thu, 5 Apr 2018 15:58:22 +0000 (17:58 +0200)]
Use C++11 std::mutex and std::lock_guard instead of our RAII wrapper.
Steinar H. Gunderson [Thu, 5 Apr 2018 15:48:39 +0000 (17:48 +0200)]
Use in-class initialization for making it harder to forget to set a default.
Steinar H. Gunderson [Thu, 5 Apr 2018 07:48:46 +0000 (09:48 +0200)]
Use nullptr instead of NULL everywhere.
Steinar H. Gunderson [Thu, 5 Apr 2018 07:47:27 +0000 (09:47 +0200)]
Use unique_ptr a few places instead of explicit delete.
Steinar H. Gunderson [Thu, 5 Apr 2018 07:41:16 +0000 (09:41 +0200)]
Use C++11 right angle brackets.
Steinar H. Gunderson [Thu, 5 Apr 2018 07:40:42 +0000 (09:40 +0200)]
Use C++11 range-based for loops and auto wherever it makes sense.
Steinar H. Gunderson [Thu, 5 Apr 2018 07:40:07 +0000 (09:40 +0200)]
Open up for C++11.
Steinar H. Gunderson [Wed, 4 Apr 2018 22:49:20 +0000 (00:49 +0200)]
Update metacube2.h with the latest version (sync with Nageru).
Contains a new pts metadata block. We don't actually use it yet.
Steinar H. Gunderson [Wed, 4 Apr 2018 22:43:55 +0000 (00:43 +0200)]
Do some cleanup around EPOLL_CTL_MOD operations.
Steinar H. Gunderson [Tue, 3 Apr 2018 16:25:14 +0000 (18:25 +0200)]
Stop leaking TLS contexts.
Steinar H. Gunderson [Tue, 3 Apr 2018 16:24:00 +0000 (18:24 +0200)]
Add an example for a TLS port.
Steinar H. Gunderson [Sun, 1 Apr 2018 19:03:13 +0000 (21:03 +0200)]
Add server-side TLS support, through kTLS.
This, unfortunately, includes a (lightly patched) embedded copy of
the TLS library TLSe in tlse/, since it doesn't really work in any
other way.
Steinar H. Gunderson [Sun, 1 Apr 2018 00:44:02 +0000 (02:44 +0200)]
Bump version to 1.4.0-pre.
Steinar H. Gunderson [Sat, 31 Mar 2018 17:22:54 +0000 (19:22 +0200)]
Remove some code for pre-1.1.3 deserialization compatibility.
Steinar H. Gunderson [Sat, 31 Mar 2018 10:15:13 +0000 (12:15 +0200)]
Fix a spurious warning during deserialization of UDP streams.
Steinar H. Gunderson [Wed, 24 May 2017 19:28:51 +0000 (21:28 +0200)]
Release Cubemap 1.3.2.
Steinar H. Gunderson [Wed, 24 May 2017 19:24:57 +0000 (21:24 +0200)]
Fix a problem where streams with paths exactly 7 characters long get broken buffering behavior (served from start of backlog).
Steinar H. Gunderson [Fri, 22 Jul 2016 22:45:50 +0000 (00:45 +0200)]
Bump version number to 1.3.2-dev.
Steinar H. Gunderson [Fri, 22 Jul 2016 22:44:24 +0000 (00:44 +0200)]
Release Cubemap 1.3.1.
Steinar H. Gunderson [Fri, 22 Jul 2016 22:41:26 +0000 (00:41 +0200)]
Add latency statistics to the Munin plugin.
Steinar H. Gunderson [Sat, 16 Jul 2016 17:43:29 +0000 (19:43 +0200)]
Support Metacube metadata blocks, specifically timestamps.
Allows you to measure latency from encoder to reflector; specifically,
this is useful to figure out if you have a HTTP queue that keeps on
growing indefinitely.
Steinar H. Gunderson [Wed, 13 Jul 2016 22:50:28 +0000 (00:50 +0200)]
Bump version number to 1.3.1-dev.
Steinar H. Gunderson [Wed, 13 Jul 2016 22:48:52 +0000 (00:48 +0200)]
Release Cubemap 1.3.0.
Steinar H. Gunderson [Wed, 13 Jul 2016 18:59:25 +0000 (20:59 +0200)]
Fix verbosity checks on deserialization.
Steinar H. Gunderson [Wed, 13 Jul 2016 18:58:38 +0000 (20:58 +0200)]
Add some log suppressions I missed last time.
Steinar H. Gunderson [Wed, 13 Jul 2016 13:51:52 +0000 (15:51 +0200)]
Suppress HTTP input errors if there are too many of them; reduces log spam a fair bit.
Steinar H. Gunderson [Fri, 27 May 2016 08:13:26 +0000 (10:13 +0200)]
Fix a memory leak with raw inputs.
Steinar H. Gunderson [Fri, 27 May 2016 08:11:19 +0000 (10:11 +0200)]
Fix an issue where “http” could sneak into the Host: header.
Steinar H. Gunderson [Tue, 24 May 2016 22:15:40 +0000 (00:15 +0200)]
Remove input encoding for UDP streams.
Metacube input makes no sense for UDP; this was a bit too eager
copy-and-paste. And even worse, it had now become default.
Steinar H. Gunderson [Tue, 24 May 2016 22:10:39 +0000 (00:10 +0200)]
Fix a typo.
Steinar H. Gunderson [Mon, 9 May 2016 21:26:16 +0000 (23:26 +0200)]
Make the HTTP client send the right Host: header.
Steinar H. Gunderson [Mon, 18 Apr 2016 22:17:46 +0000 (00:17 +0200)]
Fix an issue where Metacube output would not include updated headers (e.g. on encoder restart).
Steinar H. Gunderson [Sat, 9 Apr 2016 23:15:21 +0000 (01:15 +0200)]
Add suppor for raw (non-Metacube) inputs over HTTP. Only really useful for TS.
Steinar H. Gunderson [Sat, 9 Apr 2016 23:15:00 +0000 (01:15 +0200)]
Explicitly specify proto2 syntax to silence a warning.
Philipp Kern [Sat, 2 Apr 2016 13:52:33 +0000 (15:52 +0200)]
Install the systemd service without obeying PREFIX.
Steinar H. Gunderson [Sun, 3 Apr 2016 23:54:44 +0000 (01:54 +0200)]
Bump versoin to 1.2.3-dev.