mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-19 13:08:05 +02:00
perf: faster stream startup
- Stop sending no-store on vendored player libraries: hls.min.js and mpegts.min.js (~750 KB) were re-downloaded on every player open - hls.js: start with 1 live segment instead of 3, lower buffer-first threshold 1.5s -> 0.8s, poll buffer every 100ms - mpegts.js: initial stash 512KB -> 128KB, start at 0.5s buffered - Live FFmpeg: -hls_init_time 1 closes the first segment after ~1s Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
dcf1c00cca
commit
92634dba13
5 files changed
+28
-16
No files matched your search
@@ -220,8 +220,11 @@ Handler createLiveStreamHandler(
|
||||
..._liveVideoArgs(quality, useNvidiaGpu),
|
||||
..._audioArgs(withFilters: false),
|
||||
// HLS sliding window: 10 x 2s segments (lower live latency than the
|
||||
// previous 20-segment window while still safe for iOS)
|
||||
// previous 20-segment window while still safe for iOS).
|
||||
// hls_init_time 1: first segment closes after ~1s so playback can
|
||||
// start sooner; subsequent segments use hls_time.
|
||||
'-f', 'hls',
|
||||
'-hls_init_time', '1',
|
||||
'-hls_time', '2',
|
||||
'-hls_list_size', '10',
|
||||
'-hls_flags', 'delete_segments+independent_segments',
|
||||
|
||||
+9
-5
@@ -245,12 +245,16 @@ void main(List<String> args) async {
|
||||
FutureOr<Response> staticHandler(Request request) async {
|
||||
final response = await baseStaticHandler(request);
|
||||
|
||||
// Disable cache for entry points to ensure updates are seen immediately
|
||||
// Disable cache for entry points to ensure updates are seen immediately.
|
||||
// Vendored player libraries (hls.js/mpegts.js, ~750 KB) are pinned
|
||||
// versions: keep them cacheable or every player open re-downloads them.
|
||||
final path = request.url.path;
|
||||
if (path.isEmpty ||
|
||||
path == 'index.html' ||
|
||||
path.endsWith('.js') ||
|
||||
path.endsWith('.json')) {
|
||||
final isVendored = path.startsWith('vendor/');
|
||||
if (!isVendored &&
|
||||
(path.isEmpty ||
|
||||
path == 'index.html' ||
|
||||
path.endsWith('.js') ||
|
||||
path.endsWith('.json'))) {
|
||||
return response.change(
|
||||
headers: {
|
||||
'Cache-Control': 'no-store, no-cache, must-revalidate, max-age=0',
|
||||
|
||||
Reference in new issue
Block a user