The unified based image provides all hardware acceleration methods, so
users will not have install specific hardware variants.
Hardware-specific images will be published for a short time in order to
provide warnings to existing users to migrate their install over to the
non-suffixed version.
Thank you to @jasongdove for his hard work on the base image!
This will allow us to run CPU intensive commands away from the main
server event loop, which could improve stream quality and allow us to
ditch erroneous setTimeout calls to flush the event loop. We will
eventually move all scheduling operations onto the server because they
are much more flexible.
* Updates Typescript to latest version
* Changes server Typescript config to actually emit JS files. We were
already running a full tsc invocation against the server for
typechecking anyway... and we use tsx for fast dev iteration w/o
typechecking, so we may as well just emit the actual JS files so that we
can take advantage of thinks like decorator metadata (upcoming inversify
PR...)
* Updates better-sqlite version to latest
* Bumps node version requirement to 22 and codifies it in package.json
engines
This commit features a major rewrite and refactoring of the streaming
pipeline and class hierachy in Tunarr. It introduces new default
streaming modes in an attempt to stabilize transitions between program
streams, reuse underlying resources (e.g. ffmpeg processes), reduce the
complexity of interaction between various streaming class components,
and increase flexibility for future development.
Some notable changes:
* The default MPEG-TS stream is now backed by HLS. IPTV and Web
streaming sessions are shared
* Transcode readahead implementation. This should create smoother
streams. For FFMPEG 7 (and future versions) we use the native
"readrate_initial_burst" option. For earlier versions we use an
artificial readahead. **NOTE**: FFMPEG <7 artificial readahead might
have unintended side effects (e.g. loudness normalization issues) and
as such FFMPEG 7+ is recommended
* Separation between building an ffmpeg process, spawning the process,
and the notion of a 'transcode session'. These are all separate
classes now with narrow concerns
* Other misc refactoring to cleanup code and remove leftover superfluous
logic from DTV
* Cleaning up scary code - checkpoint 1
* Massive server cleanup + optimizations - Part 1
* Bump mikro-orm versions
* Pilot using tagged types (type branding) on FillerShow.uuid for
(maybe) better type checking
* Start hacking away at the 'helperFuncs' file inherited from DTV
* Optimizations in getCurrentProgramAndTimeElapsed to reuse the
precalculated 'startTimeOffsets' from the channel lineup
* More type checks
* Untangling some of the crazier types I added earlier on to make
sense of the original code
* General cleanup + best practices
* Move util.ts to util/index.ts
* No longer using req.hijack() to send raw video stream to frontend -
this cleaned up a lot of code
* Introduce VideoStream + ConcatStream classes which hold functionality
related to streaming that used to be in the monolithic video.ts
* Simplify ChannelCache and break dependence on Plex IDs. This now
caches using our internal DB IDs
Left TODO:
* Completely remove helperFuncs.ts and put the functions in a more
appropriate place
* Subdirectories for Plex files
* Subdirectories for 'Player' classes
* Subdirectories for 'ffmpeg' classes
* Persist channel cache to disk periodically so that server restarts
preserve that information about streaming
* Update lockfile
* Fix build