prismcast 1.3.4 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/app.d.ts +3 -2
  2. package/dist/app.js +32 -17
  3. package/dist/app.js.map +1 -1
  4. package/dist/browser/channelSelection.d.ts +3 -2
  5. package/dist/browser/channelSelection.js +43 -19
  6. package/dist/browser/channelSelection.js.map +1 -1
  7. package/dist/browser/index.d.ts +1 -6
  8. package/dist/browser/index.js +14 -28
  9. package/dist/browser/index.js.map +1 -1
  10. package/dist/browser/tuning/hulu.js +613 -13
  11. package/dist/browser/tuning/hulu.js.map +1 -1
  12. package/dist/browser/tuning/sling.js +1 -1
  13. package/dist/browser/tuning/thumbnailRow.js +69 -71
  14. package/dist/browser/tuning/thumbnailRow.js.map +1 -1
  15. package/dist/browser/tuning/tileClick.js +111 -77
  16. package/dist/browser/tuning/tileClick.js.map +1 -1
  17. package/dist/browser/tuning/youtubeTv.js +5 -5
  18. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  19. package/dist/browser/video.d.ts +3 -10
  20. package/dist/browser/video.js +91 -10
  21. package/dist/browser/video.js.map +1 -1
  22. package/dist/config/index.d.ts +9 -3
  23. package/dist/config/index.js +28 -28
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/config/paths.d.ts +41 -0
  26. package/dist/config/paths.js +88 -0
  27. package/dist/config/paths.js.map +1 -0
  28. package/dist/config/providers.js +1 -1
  29. package/dist/config/sites.js +29 -12
  30. package/dist/config/sites.js.map +1 -1
  31. package/dist/config/userChannels.d.ts +1 -1
  32. package/dist/config/userChannels.js +10 -13
  33. package/dist/config/userChannels.js.map +1 -1
  34. package/dist/config/userConfig.d.ts +14 -7
  35. package/dist/config/userConfig.js +59 -34
  36. package/dist/config/userConfig.js.map +1 -1
  37. package/dist/index.d.ts +11 -1
  38. package/dist/index.js +187 -25
  39. package/dist/index.js.map +1 -1
  40. package/dist/routes/config.js +15 -7
  41. package/dist/routes/config.js.map +1 -1
  42. package/dist/routes/debug.js +41 -6
  43. package/dist/routes/debug.js.map +1 -1
  44. package/dist/routes/index.d.ts +1 -0
  45. package/dist/routes/index.js +3 -0
  46. package/dist/routes/index.js.map +1 -1
  47. package/dist/routes/logs.js +3 -3
  48. package/dist/routes/logs.js.map +1 -1
  49. package/dist/routes/playlist.d.ts +2 -2
  50. package/dist/routes/playlist.js +11 -9
  51. package/dist/routes/playlist.js.map +1 -1
  52. package/dist/routes/root.js +41 -2
  53. package/dist/routes/root.js.map +1 -1
  54. package/dist/routes/theme.js +4 -0
  55. package/dist/routes/theme.js.map +1 -1
  56. package/dist/routes/ui.js +2 -0
  57. package/dist/routes/ui.js.map +1 -1
  58. package/dist/routes/upgrade.d.ts +6 -0
  59. package/dist/routes/upgrade.js +68 -0
  60. package/dist/routes/upgrade.js.map +1 -0
  61. package/dist/service/commands.js +9 -7
  62. package/dist/service/commands.js.map +1 -1
  63. package/dist/service/generators.js +10 -15
  64. package/dist/service/generators.js.map +1 -1
  65. package/dist/streaming/fmp4Segmenter.d.ts +28 -0
  66. package/dist/streaming/fmp4Segmenter.js +140 -47
  67. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  68. package/dist/streaming/hls.js +3 -1
  69. package/dist/streaming/hls.js.map +1 -1
  70. package/dist/streaming/lifecycle.js +13 -6
  71. package/dist/streaming/lifecycle.js.map +1 -1
  72. package/dist/streaming/mp4Parser.d.ts +19 -10
  73. package/dist/streaming/mp4Parser.js +39 -29
  74. package/dist/streaming/mp4Parser.js.map +1 -1
  75. package/dist/streaming/setup.d.ts +2 -0
  76. package/dist/streaming/setup.js +4 -1
  77. package/dist/streaming/setup.js.map +1 -1
  78. package/dist/types/index.d.ts +10 -7
  79. package/dist/types/index.js.map +1 -1
  80. package/dist/upgrade/commands.d.ts +6 -0
  81. package/dist/upgrade/commands.js +210 -0
  82. package/dist/upgrade/commands.js.map +1 -0
  83. package/dist/upgrade/detection.d.ts +15 -0
  84. package/dist/upgrade/detection.js +75 -0
  85. package/dist/upgrade/detection.js.map +1 -0
  86. package/dist/upgrade/index.d.ts +2 -0
  87. package/dist/upgrade/index.js +7 -0
  88. package/dist/upgrade/index.js.map +1 -0
  89. package/dist/utils/fileLogger.d.ts +2 -1
  90. package/dist/utils/fileLogger.js +10 -8
  91. package/dist/utils/fileLogger.js.map +1 -1
  92. package/dist/utils/logger.js +1 -1
  93. package/dist/utils/m3u.js +1 -7
  94. package/dist/utils/m3u.js.map +1 -1
  95. package/dist/utils/platform.d.ts +8 -2
  96. package/dist/utils/platform.js +26 -6
  97. package/dist/utils/platform.js.map +1 -1
  98. package/dist/utils/version.d.ts +18 -0
  99. package/dist/utils/version.js +3 -3
  100. package/dist/utils/version.js.map +1 -1
  101. package/package.json +6 -6
@@ -5,6 +5,8 @@
5
5
  import { DEFAULTS, loadUserConfig } from "../config/userConfig.js";
6
6
  import { SERVICE_NAME, getPlatform, getServiceFilePath } from "../utils/platform.js";
7
7
  import { collectServiceEnvironment, getServiceGenerator } from "./generators.js";
8
+ import { getDataDir } from "../config/paths.js";
9
+ import path from "node:path";
8
10
  /* These handlers implement the `prismcast service` subcommands for installing, uninstalling, and checking the status of PrismCast as a system service. Each handler
9
11
  * prints its output directly to the console and exits with an appropriate status code.
10
12
  */
@@ -88,7 +90,7 @@ export function printServiceUsage() {
88
90
  print(" --force Force reinstall even if already installed");
89
91
  print("");
90
92
  print("The service runs as the current user and starts automatically at login.");
91
- print("Configuration is read from ~/.prismcast/config.json.");
93
+ print("Configuration is read from " + path.join(getDataDir(), "config.json") + ".");
92
94
  }
93
95
  /**
94
96
  * Handles the `service install` command. Generates and installs a service file for the current platform, then starts the service.
@@ -135,8 +137,8 @@ export async function handleInstall(force) {
135
137
  print("The service is now running and will start automatically at login.");
136
138
  print("");
137
139
  print("Useful commands:");
138
- print(" View logs: tail -f ~/.prismcast/prismcast.log");
139
- print(" View service log: tail -f ~/.prismcast/service-stdout.log");
140
+ print(" View logs: tail -f " + path.join(getDataDir(), "prismcast.log"));
141
+ print(" View service log: tail -f " + path.join(getDataDir(), "service-stdout.log"));
140
142
  print(" Stop service: prismcast service stop");
141
143
  print(" Start service: prismcast service start");
142
144
  print(" Status: prismcast service status");
@@ -146,7 +148,7 @@ export async function handleInstall(force) {
146
148
  print("The service is now running and will start automatically at login.");
147
149
  print("");
148
150
  print("Useful commands:");
149
- print(" View logs: tail -f ~/.prismcast/prismcast.log");
151
+ print(" View logs: tail -f " + path.join(getDataDir(), "prismcast.log"));
150
152
  print(" View journal: journalctl --user -u prismcast -f");
151
153
  print(" Stop service: prismcast service stop");
152
154
  print(" Start service: prismcast service start");
@@ -157,7 +159,7 @@ export async function handleInstall(force) {
157
159
  print("The service is now running and will start automatically at login.");
158
160
  print("");
159
161
  print("Useful commands:");
160
- print(" View logs: type %USERPROFILE%\\.prismcast\\prismcast.log");
162
+ print(" View logs: type " + path.join(getDataDir(), "prismcast.log"));
161
163
  print(" Stop service: prismcast service stop");
162
164
  print(" Start service: prismcast service start");
163
165
  print(" Status: prismcast service status");
@@ -195,8 +197,8 @@ export async function handleUninstall() {
195
197
  }
196
198
  print("Service uninstalled successfully.");
197
199
  print("");
198
- print("Note: Configuration and data files in ~/.prismcast/ have been preserved.");
199
- print("To remove all data, delete the ~/.prismcast directory manually.");
200
+ print("Note: Configuration and data files in " + getDataDir() + " have been preserved.");
201
+ print("To remove all data, delete the " + getDataDir() + " directory manually.");
200
202
  return 0;
201
203
  }
202
204
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/service/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/service/commands.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const { promises: fsPromises } = fs;
5
5
  /* Generates a launchd property list (plist) file for macOS. The plist is installed to ~/Library/LaunchAgents/ and configured with:
6
6
  * - RunAtLoad: Start when user logs in
7
7
  * - KeepAlive: Restart automatically if the process exits
8
- * - StandardOutPath/StandardErrorPath: Capture stdout/stderr to ~/.prismcast/logs/
8
+ * - StandardOutPath/StandardErrorPath: Capture stdout/stderr to the data directory
9
9
  */
10
10
  /**
11
11
  * Escapes a string for use in XML by replacing special characters with entities.
@@ -13,12 +13,7 @@ const { promises: fsPromises } = fs;
13
13
  * @returns The escaped string safe for XML.
14
14
  */
15
15
  function escapeXml(str) {
16
- return str
17
- .replace(/&/g, "&")
18
- .replace(/</g, "&lt;")
19
- .replace(/>/g, "&gt;")
20
- .replace(/"/g, "&quot;")
21
- .replace(/'/g, "&apos;");
16
+ return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
22
17
  }
23
18
  /**
24
19
  * Creates a launchd service generator for macOS.
@@ -179,10 +174,7 @@ function createSystemdGenerator() {
179
174
  // Build environment variables. Always include PRISMCAST_SERVICE=1 for service detection.
180
175
  const envVars = { PRISMCAST_SERVICE: "1", ...options.envVars };
181
176
  // Generate Environment= lines, sorted alphabetically.
182
- const envLines = Object.entries(envVars)
183
- .sort(([a], [b]) => a.localeCompare(b))
184
- .map(([key, value]) => "Environment=\"" + key + "=" + value + "\"")
185
- .join("\n");
177
+ const envLines = Object.entries(envVars).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => "Environment=\"" + key + "=" + value + "\"").join("\n");
186
178
  // Generate the unit file content.
187
179
  return [
188
180
  "[Unit]",
@@ -295,10 +287,7 @@ function createWindowsSchedulerGenerator() {
295
287
  // Build environment variables for the command. We'll set them in the task action using cmd /c set.
296
288
  const envVars = { PRISMCAST_SERVICE: "1", ...options.envVars };
297
289
  // Generate environment variable SET commands.
298
- const envSets = Object.entries(envVars)
299
- .sort(([a], [b]) => a.localeCompare(b))
300
- .map(([key, value]) => "set \"" + key + "=" + value + "\"")
301
- .join(" && ");
290
+ const envSets = Object.entries(envVars).sort(([a], [b]) => a.localeCompare(b)).map(([key, value]) => "set \"" + key + "=" + value + "\"").join(" && ");
302
291
  // Return the command to run (used by install).
303
292
  return "cmd /c \"cd /d \"" + workingDir + "\" && " + envSets + " && \"" + nodePath + "\" \"" + entryPoint + "\"\"";
304
293
  },
@@ -418,6 +407,12 @@ export function collectServiceEnvironment() {
418
407
  "CHROME_BIN",
419
408
  "FRAME_RATE",
420
409
  "HOST",
410
+ "LOG_MAX_SIZE",
411
+ "PORT",
412
+ "PRISMCAST_CHROME_DATA_DIR",
413
+ "PRISMCAST_DATA_DIR",
414
+ "PRISMCAST_DEBUG",
415
+ "PRISMCAST_LOG_FILE",
421
416
  "QUALITY_PRESET",
422
417
  "VIDEO_BITRATE"
423
418
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/service/generators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generators.js","sourceRoot":"","sources":["../../src/service/generators.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface FMP4SegmenterOptions {
9
9
  onStop: () => void;
10
10
  pendingDiscontinuity?: boolean;
11
11
  previousInitSegment?: Nullable<Buffer>;
12
+ priorSessionStats?: SessionStats;
12
13
  startingInitVersion?: number;
13
14
  startingSegmentIndex?: number;
14
15
  streamId: number;
@@ -26,6 +27,18 @@ export interface KeyframeStats {
26
27
  nonKeyframeCount: number;
27
28
  segmentsWithoutLeadingKeyframe: number;
28
29
  }
30
+ /**
31
+ * Session-level statistics accumulated across the lifetime of a stream, including across tab replacements. These metrics provide a summary of segmenter health and A-V
32
+ * synchronization quality when the stream terminates.
33
+ */
34
+ export interface SessionStats {
35
+ malformedMoofCount: number;
36
+ syncSpreadCount: number;
37
+ syncSpreadMaxMs: number;
38
+ syncSpreadMinMs: number;
39
+ syncSpreadSumMs: number;
40
+ tabReplacementCount: number;
41
+ }
29
42
  /**
30
43
  * Result of creating an fMP4 segmenter.
31
44
  */
@@ -35,6 +48,7 @@ export interface FMP4SegmenterResult {
35
48
  getKeyframeStats: () => KeyframeStats;
36
49
  getLastSegmentSize: () => number;
37
50
  getSegmentIndex: () => number;
51
+ getSessionStats: () => SessionStats;
38
52
  getTrackTimestamps: () => Map<number, bigint>;
39
53
  markDiscontinuity: () => void;
40
54
  pipe: (stream: Readable) => void;
@@ -52,6 +66,20 @@ export interface FMP4SegmenterResult {
52
66
  * @returns Formatted summary string, or empty string if no data.
53
67
  */
54
68
  export declare function formatKeyframeStatsSummary(stats: KeyframeStats): string;
69
+ /**
70
+ * Formats session statistics into a human-readable summary for the termination log. Returns an empty string if no sync measurements were recorded. The format provides
71
+ * a concise overview of segmenter health including A-V synchronization, tab replacements, and data integrity.
72
+ *
73
+ * Example output:
74
+ * - "Session: 1725 segments, A-V sync: mean 12.0ms, min 0.7ms, max 25.7ms."
75
+ * - "Session: 485 segments, A-V sync: mean 10.5ms, min 1.7ms, max 24.3ms, 2 tab replacements."
76
+ * - "Session: 100 segments, A-V sync: mean 15.2ms, min 2.0ms, max 30.1ms, 1 tab replacement, 3 malformed moofs."
77
+ *
78
+ * @param stats - The session statistics to format.
79
+ * @param segmentCount - Total number of segments produced across all segmenter instances.
80
+ * @returns Formatted summary string, or empty string if no data.
81
+ */
82
+ export declare function formatSessionStatsSummary(stats: SessionStats, segmentCount: number): string;
55
83
  /**
56
84
  * Creates an fMP4 segmenter that transforms MP4 input into HLS segments. The segmenter parses MP4 boxes, extracts the init segment, detects keyframes in each moof
57
85
  * fragment, and accumulates media fragments into segments based on the configured duration.
@@ -2,7 +2,7 @@
2
2
  *
3
3
  * fmp4Segmenter.ts: fMP4 HLS segmentation for PrismCast.
4
4
  */
5
- import { createMP4BoxParser, detectMoofKeyframe, parseMoovTimescales, rewriteMoofTimestamps } from "./mp4Parser.js";
5
+ import { createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovTimescales } from "./mp4Parser.js";
6
6
  import { storeInitSegment, storeSegment, updatePlaylist } from "./hlsSegments.js";
7
7
  import { CONFIG } from "../config/index.js";
8
8
  import { LOG } from "../utils/index.js";
@@ -17,11 +17,6 @@ import { LOG } from "../utils/index.js";
17
17
  // Set to true to enable keyframe detection and statistics. This parses traf/trun sample flags in each moof to track keyframe frequency and log per-segment warnings.
18
18
  // Useful for diagnosing frozen screen issues in downstream HLS consumers.
19
19
  const KEYFRAME_DEBUG = false;
20
- // Ratio threshold for the duration sanity check. If a trun's computed total duration exceeds this multiple of the established per-track baseline (or falls below 1/Nth),
21
- // the duration is considered corrupt and the timestamp counter is corrected to use the baseline value instead. A factor of 20 is deliberately generous — Chrome's
22
- // MediaRecorder legitimately produces bursty moofs (5-8x normal) when the source player buffers and then delivers accumulated frames in a burst. Those are real data,
23
- // not corruption. This ratio catches only truly pathological values while letting burst moofs pass through with their correct durations.
24
- const DURATION_SANITY_RATIO = 20n;
25
20
  // Keyframe Stats Formatting.
26
21
  /**
27
22
  * Formats keyframe statistics into a human-readable summary for the termination log. Returns an empty string if no moof boxes were processed. The format mirrors the
@@ -60,6 +55,41 @@ export function formatKeyframeStatsSummary(stats) {
60
55
  parts.push(".");
61
56
  return parts.join("");
62
57
  }
58
+ /**
59
+ * Formats session statistics into a human-readable summary for the termination log. Returns an empty string if no sync measurements were recorded. The format provides
60
+ * a concise overview of segmenter health including A-V synchronization, tab replacements, and data integrity.
61
+ *
62
+ * Example output:
63
+ * - "Session: 1725 segments, A-V sync: mean 12.0ms, min 0.7ms, max 25.7ms."
64
+ * - "Session: 485 segments, A-V sync: mean 10.5ms, min 1.7ms, max 24.3ms, 2 tab replacements."
65
+ * - "Session: 100 segments, A-V sync: mean 15.2ms, min 2.0ms, max 30.1ms, 1 tab replacement, 3 malformed moofs."
66
+ *
67
+ * @param stats - The session statistics to format.
68
+ * @param segmentCount - Total number of segments produced across all segmenter instances.
69
+ * @returns Formatted summary string, or empty string if no data.
70
+ */
71
+ export function formatSessionStatsSummary(stats, segmentCount) {
72
+ if (stats.syncSpreadCount === 0) {
73
+ return "";
74
+ }
75
+ const meanMs = (stats.syncSpreadSumMs / stats.syncSpreadCount).toFixed(1);
76
+ const parts = ["Session: ", String(segmentCount), " segments, A-V sync: mean ", meanMs, "ms, min ", stats.syncSpreadMinMs.toFixed(1), "ms, max ",
77
+ stats.syncSpreadMaxMs.toFixed(1), "ms"];
78
+ if (stats.tabReplacementCount > 0) {
79
+ parts.push(", ", String(stats.tabReplacementCount), " tab replacement");
80
+ if (stats.tabReplacementCount !== 1) {
81
+ parts.push("s");
82
+ }
83
+ }
84
+ if (stats.malformedMoofCount > 0) {
85
+ parts.push(", ", String(stats.malformedMoofCount), " malformed moof");
86
+ if (stats.malformedMoofCount !== 1) {
87
+ parts.push("s");
88
+ }
89
+ }
90
+ parts.push(".");
91
+ return parts.join("");
92
+ }
63
93
  // Segmenter Implementation.
64
94
  /**
65
95
  * Creates an fMP4 segmenter that transforms MP4 input into HLS segments. The segmenter parses MP4 boxes, extracts the init segment, detects keyframes in each moof
@@ -68,7 +98,7 @@ export function formatKeyframeStatsSummary(stats) {
68
98
  * @returns The segmenter interface with pipe, stop, and keyframe stats methods.
69
99
  */
70
100
  export function createFMP4Segmenter(options) {
71
- const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, previousInitSegment, startingInitVersion, startingSegmentIndex, streamId } = options;
101
+ const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex, streamId } = options;
72
102
  // Initialize state.
73
103
  const state = {
74
104
  discontinuityIndices: new Set(),
@@ -85,6 +115,7 @@ export function createFMP4Segmenter(options) {
85
115
  maxKeyframeIntervalMs: 0,
86
116
  minKeyframeIntervalMs: Infinity,
87
117
  nonKeyframeCount: 0,
118
+ normalizedReferencePositionSec: null,
88
119
  pendingDiscontinuity: pendingDiscontinuity ?? false,
89
120
  segmentDurations: new Map(),
90
121
  segmentFirstMoofChecked: false,
@@ -92,12 +123,14 @@ export function createFMP4Segmenter(options) {
92
123
  segmentStartTime: Date.now(),
93
124
  segmentTrackDurations: new Map(),
94
125
  segmentsWithoutLeadingKeyframe: 0,
126
+ sessionStats: priorSessionStats ? { ...priorSessionStats, tabReplacementCount: priorSessionStats.tabReplacementCount + 1 } :
127
+ { malformedMoofCount: 0, syncSpreadCount: 0, syncSpreadMaxMs: 0, syncSpreadMinMs: Infinity, syncSpreadSumMs: 0, tabReplacementCount: 0 },
95
128
  stopped: false,
96
129
  totalKeyframeIntervalMs: 0,
97
- trackExpectedDurations: new Map(),
130
+ trackOffsets: new Map(),
131
+ trackOffsetsInitialized: new Set(),
98
132
  trackTimescales: new Map(),
99
- trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map(),
100
- zeroDurationWarned: new Set()
133
+ trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map()
101
134
  };
102
135
  // Reference to the input stream for cleanup.
103
136
  let inputStream = null;
@@ -162,7 +195,7 @@ export function createFMP4Segmenter(options) {
162
195
  }
163
196
  // Compute the segment duration from accumulated trun durations (media timeline). Both audio and video tracks should produce nearly identical real-time values. We
164
197
  // take the maximum across tracks to handle edge cases where one track has slightly more data at a segment boundary. Falls back to wall-clock time if no media
165
- // durations were accumulated (e.g., rewriteMoofTimestamps threw for every moof in this segment, or moov timescale parsing failed). Floored at 0.1 seconds to
198
+ // durations were accumulated (e.g., timestamp processing threw for every moof in this segment, or moov timescale parsing failed). Floored at 0.1 seconds to
166
199
  // prevent zero-duration entries that would violate HLS expectations.
167
200
  let mediaDuration = 0;
168
201
  for (const [trackId, accumulated] of state.segmentTrackDurations) {
@@ -176,6 +209,37 @@ export function createFMP4Segmenter(options) {
176
209
  }
177
210
  const actualDuration = Math.max(0.1, (mediaDuration > 0) ? mediaDuration : ((Date.now() - state.segmentStartTime) / 1000));
178
211
  state.segmentDurations.set(state.segmentIndex, actualDuration);
212
+ // Compute inter-track sync spread for session statistics. This measures the timing difference between audio and video tracks at each segment boundary. Only
213
+ // computed when both tracks have known timescales and active timestamp counters.
214
+ if (state.trackTimescales.size >= 2) {
215
+ let minPos = Infinity;
216
+ let maxPos = -Infinity;
217
+ let validCount = 0;
218
+ for (const [trackId, timestamp] of state.trackTimestamps) {
219
+ const timescale = state.trackTimescales.get(trackId);
220
+ if (timescale && (timestamp > 0n)) {
221
+ const positionSec = Number(timestamp) / timescale;
222
+ if (positionSec < minPos) {
223
+ minPos = positionSec;
224
+ }
225
+ if (positionSec > maxPos) {
226
+ maxPos = positionSec;
227
+ }
228
+ validCount++;
229
+ }
230
+ }
231
+ if (validCount >= 2) {
232
+ const spreadMs = (maxPos - minPos) * 1000;
233
+ state.sessionStats.syncSpreadCount++;
234
+ state.sessionStats.syncSpreadSumMs += spreadMs;
235
+ if (spreadMs < state.sessionStats.syncSpreadMinMs) {
236
+ state.sessionStats.syncSpreadMinMs = spreadMs;
237
+ }
238
+ if (spreadMs > state.sessionStats.syncSpreadMaxMs) {
239
+ state.sessionStats.syncSpreadMaxMs = spreadMs;
240
+ }
241
+ }
242
+ }
179
243
  // Combine all fragment data into a single segment.
180
244
  const segmentData = Buffer.concat(state.fragmentBuffer);
181
245
  const segmentName = ["segment", String(state.segmentIndex), ".m4s"].join("");
@@ -276,6 +340,24 @@ export function createFMP4Segmenter(options) {
276
340
  timescaleEntries.push("track " + String(trackId) + "=" + String(timescale));
277
341
  }
278
342
  LOG.debug("streaming:segmenter", "Init segment received: %d bytes, version=%d, timescales=[%s].", initData.length, state.initVersion, timescaleEntries.join(", "));
343
+ // Compute the normalized reference position for tab replacement offset initialization. This converts the old segmenter's per-track timestamp counters
344
+ // to seconds via the new moov's timescales (which Chrome keeps consistent across captures), then averages across tracks to produce a single shared position.
345
+ // Deriving all per-track offsets from this shared reference eliminates the inter-track bias that per-track independent offsets would freeze from the old
346
+ // segmenter's A-V jitter at the moment of replacement.
347
+ if (initialTrackTimestamps && (state.trackTimescales.size > 0)) {
348
+ let totalSec = 0;
349
+ let count = 0;
350
+ for (const [trackId, timestamp] of initialTrackTimestamps) {
351
+ const timescale = state.trackTimescales.get(trackId);
352
+ if (timescale) {
353
+ totalSec += Number(timestamp) / timescale;
354
+ count++;
355
+ }
356
+ }
357
+ if (count > 0) {
358
+ state.normalizedReferencePositionSec = totalSec / count;
359
+ }
360
+ }
279
361
  // Suppress the discontinuity marker when codec parameters are unchanged (byte-identical init). This avoids an unnecessary decoder flush on the client.
280
362
  if (!initChanged && state.pendingDiscontinuity) {
281
363
  state.pendingDiscontinuity = false;
@@ -300,50 +382,60 @@ export function createFMP4Segmenter(options) {
300
382
  }
301
383
  }
302
384
  }
303
- // Rewrite tfdt.baseMediaDecodeTime in each traf with self-generated monotonic timestamps. This eliminates discontinuities from capture restarts (tab
304
- // replacement, source reload). Wrapped in try/catch so a malformed moof never crashes the segmenter the segment passes through with Chrome's original
305
- // timestamps, which is better than dropping it entirely.
385
+ // Rewrite tfdt.baseMediaDecodeTime in each traf by adding a constant per-track offset to Chrome's original values. This preserves Chrome's wall-clock-based
386
+ // inter-track sync rather than regenerating timestamps from trun durations (which accumulates drift). The offset is 0 during normal playback (pure pass-through).
387
+ // During tab replacement, offsets are derived from a normalized reference position (mean of all tracks' old positions in seconds) to eliminate inter-track
388
+ // bias — see normalizedReferencePositionSec. Wrapped in try/catch so a malformed moof never crashes the segmenter — the segment passes through with Chrome's
389
+ // original timestamps, which is better than dropping it entirely.
306
390
  try {
307
- const trafDurations = rewriteMoofTimestamps(box.data, state.trackTimestamps);
308
- // Process per-track durations for diagnostics and sanity checking.
309
- for (const [trackId, duration] of trafDurations) {
310
- // Zero duration: rate-limited warning. Indicates a trun parsing issue but doesn't corrupt the counter (advancing by zero is harmless).
311
- if (duration === 0n) {
312
- if (!state.zeroDurationWarned.has(trackId)) {
313
- state.zeroDurationWarned.add(trackId);
314
- LOG.debug("streaming:segmenter", "Zero duration in moof traf for track %d.", trackId);
391
+ const trackResults = offsetMoofTimestamps(box.data, state.trackOffsets);
392
+ // Lazy offset initialization: compute offsets for all newly seen tracks before any corrective re-write. This two-pass approach is necessary because
393
+ // offsetMoofTimestamps processes ALL trafs in the moof — if we re-called after each individual track's initialization, already-offset tracks would get
394
+ // their offset applied a second time. By computing all offsets first, a single re-call applies them all atomically. This is safe because on the first
395
+ // moof of a segmenter all tracks are uninitialized, so the first call writes all tracks with offset 0 (no-op) and the re-call applies all offsets to
396
+ // Chrome's original values. Chrome's MediaRecorder declares all tracks in the moov at stream start and tab replacement creates a fresh segmenter, so a
397
+ // new track appearing mid-stream in a multi-track moof alongside already-initialized tracks cannot occur.
398
+ let needsRewrite = false;
399
+ for (const [trackId, result] of trackResults) {
400
+ if (!state.trackOffsetsInitialized.has(trackId)) {
401
+ const initialValue = initialTrackTimestamps?.get(trackId);
402
+ const timescale = state.trackTimescales.get(trackId);
403
+ let offset = 0n;
404
+ // Compute the per-track offset. When a normalized reference position is available (tab replacement with valid timescales), derive the offset from
405
+ // the shared reference to eliminate inter-track bias. Otherwise fall back to per-track independent offsets (fresh stream or moov parse failure).
406
+ if ((state.normalizedReferencePositionSec !== null) && timescale) {
407
+ offset = BigInt(Math.round(state.normalizedReferencePositionSec * timescale)) - result.originalTfdt;
315
408
  }
316
- continue;
317
- }
318
- // The effective duration is what trackTimestamps actually advances by for this moof. Normally this equals the trun-computed duration, but the sanity
319
- // check below may clamp it to the expected baseline when the computed value is unreasonable.
320
- let effectiveDuration = duration;
321
- // Sanity check: compare against the anchored baseline for this track. A wildly off duration (e.g., from a corrupt trun with inflated per-sample durations)
322
- // would permanently shift all subsequent timestamps if not caught. The rewrite function already advanced the counter by `duration` — we correct it here
323
- // by substituting the baseline value when the computed value is unreasonable. The baseline is anchored to the first valid moof and never updated — this
324
- // prevents baseline poisoning from burst moofs that Chrome's MediaRecorder produces after source buffering stalls.
325
- const expected = state.trackExpectedDurations.get(trackId);
326
- if (expected && (expected > 0n) && ((duration > (expected * DURATION_SANITY_RATIO)) || (duration < (expected / DURATION_SANITY_RATIO)))) {
327
- const current = state.trackTimestamps.get(trackId);
328
- if (current !== undefined) {
329
- state.trackTimestamps.set(trackId, current - duration + expected);
409
+ else if (initialValue !== undefined) {
410
+ offset = initialValue - result.originalTfdt;
411
+ }
412
+ state.trackOffsets.set(trackId, offset);
413
+ state.trackOffsetsInitialized.add(trackId);
414
+ if (offset !== 0n) {
415
+ needsRewrite = true;
330
416
  }
331
- effectiveDuration = expected;
332
- LOG.debug("streaming:segmenter", "Clamped abnormal trun duration for track %d: %s units (expected ~%s, baselines=%d).", trackId, String(duration), String(expected), state.trackExpectedDurations.size);
417
+ LOG.debug("streaming:segmenter", "Initialized offset for track %d: %s (initial=%s, chrome=%s).", trackId, String(offset), String(initialValue ?? 0n), String(result.originalTfdt));
333
418
  }
334
- else if (!state.trackExpectedDurations.has(trackId)) {
335
- // Establish baseline from the first valid moof per track. The baseline is never updated afterward see trackExpectedDurations comment in SegmenterState.
336
- state.trackExpectedDurations.set(trackId, duration);
337
- LOG.debug("streaming:segmenter", "Anchored baseline for track %d: %s units (segment %d).", trackId, String(duration), state.segmentIndex);
419
+ }
420
+ // The first call wrote uninitialized tracks with offset 0 (pure pass-through), so the buffer still contains Chrome's original tfdt values for those
421
+ // tracks. Now that all offsets are stored, a single re-call applies them correctly without double-offsetting any track.
422
+ if (needsRewrite) {
423
+ offsetMoofTimestamps(box.data, state.trackOffsets);
424
+ }
425
+ // Track "next expected" for future tab replacement handoff and accumulate durations for EXTINF.
426
+ for (const [trackId, result] of trackResults) {
427
+ const trackOffset = state.trackOffsets.get(trackId) ?? 0n;
428
+ state.trackTimestamps.set(trackId, result.originalTfdt + trackOffset + result.duration);
429
+ // Accumulate duration for media-time EXTINF computation. No sanity check needed — Chrome's timestamps are trusted.
430
+ if (result.duration > 0n) {
431
+ const prev = state.segmentTrackDurations.get(trackId) ?? 0n;
432
+ state.segmentTrackDurations.set(trackId, prev + result.duration);
338
433
  }
339
- // Accumulate the effective duration for media-time EXTINF computation. This stays synchronized with the trackTimestamps counter that drives
340
- // baseMediaDecodeTime — clamped moofs contribute the clamped value, normal moofs contribute the trun-computed value.
341
- const prev = state.segmentTrackDurations.get(trackId) ?? 0n;
342
- state.segmentTrackDurations.set(trackId, prev + effectiveDuration);
343
434
  }
344
435
  }
345
436
  catch {
346
- LOG.debug("streaming:segmenter", "Failed to rewrite moof timestamps.");
437
+ state.sessionStats.malformedMoofCount++;
438
+ LOG.debug("streaming:segmenter", "Failed to apply offset to moof timestamps.");
347
439
  }
348
440
  // When keyframe debugging is enabled, parse traf/trun sample flags to detect whether this moof starts with a keyframe. Wrapped in try/catch for failure
349
441
  // isolation — a malformed moof should never crash the segmenter.
@@ -427,6 +519,7 @@ export function createFMP4Segmenter(options) {
427
519
  }),
428
520
  getLastSegmentSize: () => state.lastSegmentSize,
429
521
  getSegmentIndex: () => state.segmentIndex,
522
+ getSessionStats: () => ({ ...state.sessionStats }),
430
523
  getTrackTimestamps: () => new Map(state.trackTimestamps),
431
524
  markDiscontinuity: () => {
432
525
  if (state.stopped) {