prismcast 1.5.2 → 1.6.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 (158) hide show
  1. package/README.md +44 -28
  2. package/dist/app.d.ts +5 -0
  3. package/dist/app.js +63 -5
  4. package/dist/app.js.map +1 -1
  5. package/dist/browser/channelSelection.js +14 -2
  6. package/dist/browser/channelSelection.js.map +1 -1
  7. package/dist/browser/index.d.ts +23 -9
  8. package/dist/browser/index.js +205 -88
  9. package/dist/browser/index.js.map +1 -1
  10. package/dist/browser/precaching.js +3 -3
  11. package/dist/browser/precaching.js.map +1 -1
  12. package/dist/browser/tuning/directv.js +13 -0
  13. package/dist/browser/tuning/directv.js.map +1 -1
  14. package/dist/browser/tuning/fox.js +12 -0
  15. package/dist/browser/tuning/fox.js.map +1 -1
  16. package/dist/browser/tuning/hbo.js +11 -0
  17. package/dist/browser/tuning/hbo.js.map +1 -1
  18. package/dist/browser/tuning/hulu.js +23 -0
  19. package/dist/browser/tuning/hulu.js.map +1 -1
  20. package/dist/browser/tuning/sling.js +34 -4
  21. package/dist/browser/tuning/sling.js.map +1 -1
  22. package/dist/browser/tuning/spectrum.js +12 -0
  23. package/dist/browser/tuning/spectrum.js.map +1 -1
  24. package/dist/browser/tuning/xfinity.d.ts +2 -0
  25. package/dist/browser/tuning/xfinity.js +607 -0
  26. package/dist/browser/tuning/xfinity.js.map +1 -0
  27. package/dist/browser/tuning/youtubeTv.js +14 -0
  28. package/dist/browser/tuning/youtubeTv.js.map +1 -1
  29. package/dist/browser/video.d.ts +2 -0
  30. package/dist/browser/video.js +99 -17
  31. package/dist/browser/video.js.map +1 -1
  32. package/dist/channels/index.js +173 -56
  33. package/dist/channels/index.js.map +1 -1
  34. package/dist/config/health.d.ts +28 -28
  35. package/dist/config/health.js +52 -52
  36. package/dist/config/health.js.map +1 -1
  37. package/dist/config/paths.d.ts +12 -0
  38. package/dist/config/paths.js +16 -0
  39. package/dist/config/paths.js.map +1 -1
  40. package/dist/config/profiles.d.ts +3 -2
  41. package/dist/config/profiles.js +45 -34
  42. package/dist/config/profiles.js.map +1 -1
  43. package/dist/config/providers.d.ts +7 -0
  44. package/dist/config/providers.js +14 -0
  45. package/dist/config/providers.js.map +1 -1
  46. package/dist/config/sites.d.ts +28 -0
  47. package/dist/config/sites.js +93 -122
  48. package/dist/config/sites.js.map +1 -1
  49. package/dist/config/userChannels.d.ts +3 -0
  50. package/dist/config/userChannels.js +10 -3
  51. package/dist/config/userChannels.js.map +1 -1
  52. package/dist/config/userConfig.d.ts +1 -0
  53. package/dist/config/userConfig.js +4 -0
  54. package/dist/config/userConfig.js.map +1 -1
  55. package/dist/config/userProfiles.d.ts +0 -1
  56. package/dist/config/userProfiles.js +18 -10
  57. package/dist/config/userProfiles.js.map +1 -1
  58. package/dist/index.js +16 -7
  59. package/dist/index.js.map +1 -1
  60. package/dist/native/decrypt.d.ts +32 -0
  61. package/dist/native/decrypt.js +85 -0
  62. package/dist/native/decrypt.js.map +1 -0
  63. package/dist/native/index.d.ts +58 -0
  64. package/dist/native/index.js +341 -0
  65. package/dist/native/index.js.map +1 -0
  66. package/dist/native/intercept.d.ts +35 -0
  67. package/dist/native/intercept.js +184 -0
  68. package/dist/native/intercept.js.map +1 -0
  69. package/dist/native/probe.d.ts +48 -0
  70. package/dist/native/probe.js +270 -0
  71. package/dist/native/probe.js.map +1 -0
  72. package/dist/native/proxy.d.ts +52 -0
  73. package/dist/native/proxy.js +904 -0
  74. package/dist/native/proxy.js.map +1 -0
  75. package/dist/routes/config/channels/table.js +19 -25
  76. package/dist/routes/config/channels/table.js.map +1 -1
  77. package/dist/routes/config/providers.js +4 -4
  78. package/dist/routes/config/providers.js.map +1 -1
  79. package/dist/routes/debug.js +5 -5
  80. package/dist/routes/debug.js.map +1 -1
  81. package/dist/routes/hls.js +12 -2
  82. package/dist/routes/hls.js.map +1 -1
  83. package/dist/routes/index.d.ts +1 -0
  84. package/dist/routes/index.js +3 -0
  85. package/dist/routes/index.js.map +1 -1
  86. package/dist/routes/root/content.js +80 -20
  87. package/dist/routes/root/content.js.map +1 -1
  88. package/dist/routes/root/scripts/status.js +14 -13
  89. package/dist/routes/root/scripts/status.js.map +1 -1
  90. package/dist/routes/root/styles.js +4 -2
  91. package/dist/routes/root/styles.js.map +1 -1
  92. package/dist/streaming/fmp4Segmenter.d.ts +3 -0
  93. package/dist/streaming/fmp4Segmenter.js +143 -42
  94. package/dist/streaming/fmp4Segmenter.js.map +1 -1
  95. package/dist/streaming/hls.d.ts +24 -19
  96. package/dist/streaming/hls.js +486 -261
  97. package/dist/streaming/hls.js.map +1 -1
  98. package/dist/streaming/hlsResume.d.ts +7 -0
  99. package/dist/streaming/hlsResume.js +22 -2
  100. package/dist/streaming/hlsResume.js.map +1 -1
  101. package/dist/streaming/hlsSegments.d.ts +42 -2
  102. package/dist/streaming/hlsSegments.js +109 -8
  103. package/dist/streaming/hlsSegments.js.map +1 -1
  104. package/dist/streaming/lifecycle.js +20 -2
  105. package/dist/streaming/lifecycle.js.map +1 -1
  106. package/dist/streaming/monitor.d.ts +1 -0
  107. package/dist/streaming/monitor.js +369 -21
  108. package/dist/streaming/monitor.js.map +1 -1
  109. package/dist/streaming/mp4Parser.d.ts +52 -6
  110. package/dist/streaming/mp4Parser.js +156 -30
  111. package/dist/streaming/mp4Parser.js.map +1 -1
  112. package/dist/streaming/mpegts.d.ts +2 -2
  113. package/dist/streaming/mpegts.js +156 -109
  114. package/dist/streaming/mpegts.js.map +1 -1
  115. package/dist/streaming/playlistBuilder.d.ts +38 -0
  116. package/dist/streaming/playlistBuilder.js +66 -0
  117. package/dist/streaming/playlistBuilder.js.map +1 -0
  118. package/dist/streaming/preroll.d.ts +106 -0
  119. package/dist/streaming/preroll.js +373 -0
  120. package/dist/streaming/preroll.js.map +1 -0
  121. package/dist/streaming/pretune.d.ts +8 -0
  122. package/dist/streaming/pretune.js +226 -0
  123. package/dist/streaming/pretune.js.map +1 -0
  124. package/dist/streaming/registry.d.ts +24 -3
  125. package/dist/streaming/registry.js +23 -1
  126. package/dist/streaming/registry.js.map +1 -1
  127. package/dist/streaming/setup.d.ts +7 -0
  128. package/dist/streaming/setup.js +27 -6
  129. package/dist/streaming/setup.js.map +1 -1
  130. package/dist/streaming/showInfo.d.ts +24 -0
  131. package/dist/streaming/showInfo.js +55 -3
  132. package/dist/streaming/showInfo.js.map +1 -1
  133. package/dist/streaming/statusEmitter.d.ts +6 -4
  134. package/dist/streaming/statusEmitter.js +9 -3
  135. package/dist/streaming/statusEmitter.js.map +1 -1
  136. package/dist/types/channels.d.ts +1 -0
  137. package/dist/types/index.d.ts +1 -1
  138. package/dist/types/profiles.d.ts +8 -1
  139. package/dist/types/selection.d.ts +4 -1
  140. package/dist/types/streaming.d.ts +7 -0
  141. package/dist/utils/chromeFetch.d.ts +20 -0
  142. package/dist/utils/chromeFetch.js +43 -0
  143. package/dist/utils/chromeFetch.js.map +1 -0
  144. package/dist/utils/debugFilter.js +15 -0
  145. package/dist/utils/debugFilter.js.map +1 -1
  146. package/dist/utils/delay.d.ts +16 -0
  147. package/dist/utils/delay.js +15 -1
  148. package/dist/utils/delay.js.map +1 -1
  149. package/dist/utils/ffmpeg.d.ts +1 -7
  150. package/dist/utils/ffmpeg.js +86 -127
  151. package/dist/utils/ffmpeg.js.map +1 -1
  152. package/dist/utils/index.d.ts +2 -0
  153. package/dist/utils/index.js +2 -0
  154. package/dist/utils/index.js.map +1 -1
  155. package/dist/utils/pid.d.ts +40 -0
  156. package/dist/utils/pid.js +83 -0
  157. package/dist/utils/pid.js.map +1 -0
  158. package/package.json +5 -5
@@ -2,10 +2,13 @@
2
2
  *
3
3
  * fmp4Segmenter.ts: fMP4 HLS segmentation for PrismCast.
4
4
  */
5
- import { createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovTimescales } from "./mp4Parser.js";
5
+ import { buildPrerollEntries, computePrerollWindow, getPrerollTotalDurationSec } from "./preroll.js";
6
+ import { createMP4BoxParser, detectMoofKeyframe, offsetMoofTimestamps, parseMoovCodecConfig, parseMoovTrackInfo } from "./mp4Parser.js";
6
7
  import { getSegmentCount, storeInitSegment, storeSegment, updatePlaylist } from "./hlsSegments.js";
7
8
  import { CONFIG } from "../config/index.js";
8
9
  import { LOG } from "../utils/index.js";
10
+ import { buildPlaylist } from "./playlistBuilder.js";
11
+ import { getStream } from "./registry.js";
9
12
  /* This module transforms a puppeteer-stream MP4 capture into HLS fMP4 segments. The overall flow is: (1) receive MP4 data from puppeteer-stream (H.264 + AAC from
10
13
  * either native capture or FFmpeg transcoding), (2) parse MP4 box structure to identify ftyp + moov (initialization segment) and moof + mdat pairs (media fragments),
11
14
  * (3) store init segment and accumulate media fragments into segments, and (4) generate and update the m3u8 playlist.
@@ -98,7 +101,7 @@ export function formatSessionStatsSummary(stats, segmentCount) {
98
101
  * @returns The segmenter interface with pipe, stop, and keyframe stats methods.
99
102
  */
100
103
  export function createFMP4Segmenter(options) {
101
- const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex, streamId } = options;
104
+ const { initialTrackTimestamps, onError, onStop, pendingDiscontinuity, prerollBaseUrl, prerollSegmentCount, previousInitSegment, priorSessionStats, startingInitVersion, startingSegmentIndex, streamId } = options;
102
105
  // Initialize state.
103
106
  const state = {
104
107
  discontinuityIndices: new Set(),
@@ -111,16 +114,20 @@ export function createFMP4Segmenter(options) {
111
114
  initVersion: startingInitVersion ?? 0,
112
115
  keyframeCount: 0,
113
116
  lastKeyframeTime: null,
117
+ lastSegmentHasVideo: null,
114
118
  lastSegmentSize: 0,
115
119
  maxKeyframeIntervalMs: 0,
116
120
  minKeyframeIntervalMs: Infinity,
117
121
  nonKeyframeCount: 0,
118
122
  normalizedReferencePositionSec: null,
119
123
  pendingDiscontinuity: pendingDiscontinuity ?? false,
124
+ prerollBaseUrl: prerollBaseUrl ?? null,
125
+ prerollSegmentCount: prerollSegmentCount ?? 0,
120
126
  segmentDurations: new Map(),
121
127
  segmentFirstMoofChecked: false,
122
128
  segmentIndex: startingSegmentIndex ?? 0,
123
129
  segmentStartTime: Date.now(),
130
+ segmentTimestamps: new Map(),
124
131
  segmentTrackDurations: new Map(),
125
132
  segmentsWithoutLeadingKeyframe: 0,
126
133
  sessionStats: priorSessionStats ? { ...priorSessionStats, tabReplacementCount: priorSessionStats.tabReplacementCount + 1 } :
@@ -130,56 +137,108 @@ export function createFMP4Segmenter(options) {
130
137
  trackOffsets: new Map(),
131
138
  trackOffsetsInitialized: new Set(),
132
139
  trackTimescales: new Map(),
133
- trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map()
140
+ trackTimestamps: initialTrackTimestamps ? new Map(initialTrackTimestamps) : new Map(),
141
+ videoTrackId: null,
142
+ videoTrafsInCurrentSegment: null
134
143
  };
135
144
  // Reference to the input stream for cleanup.
136
145
  let inputStream = null;
137
146
  /**
138
- * Generates the m3u8 playlist content.
147
+ * Generates the m3u8 playlist content. When preroll metadata is present (prerollSegmentCount > 0), the playlist includes both preroll entries (served from global
148
+ * /preroll/ routes with absolute URLs) and real entries (served from the stream's /hls/:name/ routes with relative URLs) in a single sliding window. The preroll
149
+ * entries use a separate #EXT-X-MAP for the preroll init segment, and a #EXT-X-DISCONTINUITY tag marks the boundary between preroll and real content. As real
150
+ * segments accumulate, preroll entries fall off the window naturally and the playlist becomes purely real content with zero overhead.
151
+ *
152
+ * Delegates all m3u8 formatting to the shared buildPlaylist() function. Preroll windowing and entry construction are handled by the compositor functions in
153
+ * preroll.ts. This function is responsible for constructing real segment entries from the segmenter's state and computing the discontinuity sequence from the
154
+ * segmenter's discontinuity history.
139
155
  */
140
156
  function generatePlaylist() {
141
- // Compute TARGETDURATION from the maximum actual segment duration in the current playlist window. RFC 8216 requires this value to be an integer that is greater
142
- // than or equal to every #EXTINF duration in the playlist. We floor at the configured segment duration to avoid under-declaring when all segments are short.
143
- const startIndex = Math.max(0, state.segmentIndex - Math.min(getSegmentCount(streamId), CONFIG.hls.maxSegments));
144
- let maxDuration = CONFIG.hls.segmentDuration;
145
- for (let i = startIndex; i < state.segmentIndex; i++) {
146
- const duration = state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration;
147
- if (duration > maxDuration) {
148
- maxDuration = duration;
149
- }
157
+ const realInitMapUri = "init.mp4?v=" + String(state.initVersion);
158
+ // Check whether the preroll timer has fired and the client is actually watching preroll. The segment index offset (starting at prerollSegmentCount) is always
159
+ // applied structurally, but preroll entries are only included in the playlist when the deferred timer has fired — indicated by prerollStartTime being set on the
160
+ // stream's HLS state. This is the same dynamic check the native proxy uses in its generatePlaylist(). Without this, fast capture streams (tuning before the
161
+ // preroll delay elapses) would include unnecessary preroll entries in their first playlists.
162
+ const stream = getStream(streamId);
163
+ const prerollActive = (state.prerollSegmentCount > 0) && (stream?.hls.prerollStartTime !== null) && (stream?.hls.prerollStartTime !== undefined);
164
+ // Compute the sliding window start index. When preroll is active, the compositor handles the three-way max (floor, sliding window, preroll cap). Without
165
+ // preroll (or when the timer hasn't fired), the standard sliding window rule applies.
166
+ const realSegmentCount = getSegmentCount(streamId);
167
+ let startIndex;
168
+ if (prerollActive) {
169
+ startIndex = computePrerollWindow({
170
+ currentSegmentIndex: state.segmentIndex,
171
+ maxSegments: CONFIG.hls.maxSegments,
172
+ prerollSegmentCount: state.prerollSegmentCount,
173
+ realSegmentCount
174
+ });
175
+ }
176
+ else {
177
+ startIndex = Math.max(0, state.segmentIndex - Math.min(realSegmentCount, CONFIG.hls.maxSegments));
150
178
  }
151
- const lines = [
152
- "#EXTM3U",
153
- "#EXT-X-VERSION:7",
154
- ["#EXT-X-TARGETDURATION:", String(Math.ceil(maxDuration))].join(""),
155
- ["#EXT-X-MEDIA-SEQUENCE:", String(startIndex)].join(""),
156
- ["#EXT-X-MAP:URI=\"init.mp4?v=", String(state.initVersion), "\""].join("")
157
- ];
158
- // Add segment entries for each segment in the current playlist window.
159
- for (let i = startIndex; i < state.segmentIndex; i++) {
160
- // Add discontinuity marker before segments that follow a recovery event. Re-emit the init segment reference so clients explicitly reinitialize the decoder
161
- // with the current codec parameters.
179
+ // Build preroll entries for preroll indices still in the window. Only included when the deferred preroll timer has fired and the client is watching preroll.
180
+ let prerollEntries = [];
181
+ if (prerollActive && state.prerollBaseUrl && (startIndex < state.prerollSegmentCount)) {
182
+ prerollEntries = buildPrerollEntries({ baseUrl: state.prerollBaseUrl, extension: ".m4s", prerollSegmentCount: state.prerollSegmentCount, startIndex });
183
+ }
184
+ // Build real segment entries from the segmenter's state. Each entry carries its duration, optional discontinuity marker with init re-emission, and wall-clock
185
+ // timestamp for PROGRAM-DATE-TIME. The real range starts at either the window start (when no preroll) or the preroll segment count (when preroll entries cover
186
+ // the earlier indices).
187
+ const realEntries = [];
188
+ const realStartIndex = Math.max(startIndex, state.prerollSegmentCount);
189
+ for (let i = realStartIndex; i < state.segmentIndex; i++) {
190
+ const entry = {
191
+ duration: state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration,
192
+ url: "segment" + String(i) + ".m4s"
193
+ };
194
+ // Add discontinuity marker and re-emit the init segment reference at preroll-to-real boundaries and recovery events. The preroll-to-real boundary is handled
195
+ // via the existing pendingDiscontinuity mechanism — outputSegment() adds prerollSegmentCount to discontinuityIndices when the first real segment is output.
162
196
  if (state.discontinuityIndices.has(i)) {
163
- lines.push("#EXT-X-DISCONTINUITY");
164
- lines.push(["#EXT-X-MAP:URI=\"init.mp4?v=", String(state.initVersion), "\""].join(""));
197
+ entry.discontinuity = true;
198
+ entry.mapUri = realInitMapUri;
199
+ }
200
+ // Emit PROGRAM-DATE-TIME for real segments using the recorded wall-clock timestamp. Intentionally omitted from preroll segments — preroll is synthetic
201
+ // placeholder content and assigning it wall-clock timestamps would create a backward time jump at the preroll-to-live boundary.
202
+ const timestamp = state.segmentTimestamps.get(i);
203
+ if (timestamp) {
204
+ entry.programDateTime = timestamp.toISOString();
165
205
  }
166
- // Use the actual recorded duration for this segment. Fall back to the configured target duration for segments that predate duration tracking (e.g. after
167
- // a hot restart with continuation).
168
- const duration = state.segmentDurations.get(i) ?? CONFIG.hls.segmentDuration;
169
- lines.push(["#EXTINF:", duration.toFixed(3), ","].join(""));
170
- lines.push(["segment", String(i), ".m4s"].join(""));
206
+ realEntries.push(entry);
171
207
  }
172
- lines.push("");
173
- return lines.join("\n");
208
+ // Compute DISCONTINUITY-SEQUENCE: the count of discontinuities that have scrolled off the beginning of the playlist window. Only provided when discontinuities
209
+ // exist in the stream's history — when undefined, the builder omits the tag entirely.
210
+ let discontinuitySequence;
211
+ if (state.discontinuityIndices.size > 0) {
212
+ let discSeq = 0;
213
+ for (const idx of state.discontinuityIndices) {
214
+ if (idx < startIndex) {
215
+ discSeq++;
216
+ }
217
+ }
218
+ discontinuitySequence = discSeq;
219
+ }
220
+ // Determine the initial MAP URI. When the window starts with preroll entries, use the preroll init segment. Otherwise, use the real init segment. The
221
+ // prerollBaseUrl is guaranteed non-null when prerollEntries is non-empty (guarded by the conditional above).
222
+ const initialMapUri = ((prerollEntries.length > 0) && state.prerollBaseUrl) ? (state.prerollBaseUrl + "/preroll/init.mp4") : realInitMapUri;
223
+ const entries = [...prerollEntries, ...realEntries];
224
+ return buildPlaylist({
225
+ discontinuitySequence,
226
+ initialMapUri,
227
+ mediaSequence: startIndex,
228
+ targetDuration: CONFIG.hls.segmentDuration,
229
+ version: 7
230
+ }, entries);
174
231
  }
175
232
  /**
176
- * Resets per-segment tracking state. Called after outputting a segment. Extracted to avoid duplication of the same four assignments.
233
+ * Resets per-segment tracking state. Called after outputting a segment. Extracted to avoid duplication of the same five assignments.
177
234
  */
178
235
  function resetSegmentTracking() {
179
236
  state.fragmentBuffer = [];
180
237
  state.segmentFirstMoofChecked = false;
181
238
  state.segmentStartTime = Date.now();
182
239
  state.segmentTrackDurations = new Map();
240
+ // Reset video traf tracking for the next segment. Stays null if the video trackId is unknown; otherwise starts false until a video traf is seen.
241
+ state.videoTrafsInCurrentSegment = (state.videoTrackId !== null) ? false : null;
183
242
  }
184
243
  /**
185
244
  * Outputs the current fragment buffer as a segment.
@@ -209,6 +268,7 @@ export function createFMP4Segmenter(options) {
209
268
  }
210
269
  const actualDuration = Math.max(0.1, (mediaDuration > 0) ? mediaDuration : ((Date.now() - state.segmentStartTime) / 1000));
211
270
  state.segmentDurations.set(state.segmentIndex, actualDuration);
271
+ state.segmentTimestamps.set(state.segmentIndex, new Date());
212
272
  // Compute inter-track sync spread for session statistics. This measures the timing difference between audio and video tracks at each segment boundary. Only
213
273
  // computed when both tracks have known timescales and active timestamp counters.
214
274
  if (state.trackTimescales.size >= 2) {
@@ -243,17 +303,19 @@ export function createFMP4Segmenter(options) {
243
303
  // Combine all fragment data into a single segment.
244
304
  const segmentData = Buffer.concat(state.fragmentBuffer);
245
305
  const segmentName = ["segment", String(state.segmentIndex), ".m4s"].join("");
246
- // Store the segment and update size for health monitoring.
306
+ // Store the segment and update size and track composition for health monitoring.
247
307
  storeSegment(streamId, segmentName, segmentData);
308
+ state.lastSegmentHasVideo = state.videoTrafsInCurrentSegment;
248
309
  state.lastSegmentSize = segmentData.length;
249
310
  // Increment segment index and mark the first segment as emitted.
250
311
  state.segmentIndex++;
251
312
  state.firstSegmentEmitted = true;
252
- // Prune duration entries outside the playlist sliding window to prevent unbounded growth.
313
+ // Prune duration and timestamp entries outside the playlist sliding window to prevent unbounded growth.
253
314
  const pruneThreshold = Math.max(0, state.segmentIndex - CONFIG.hls.maxSegments);
254
315
  for (const idx of state.segmentDurations.keys()) {
255
316
  if (idx < pruneThreshold) {
256
317
  state.segmentDurations.delete(idx);
318
+ state.segmentTimestamps.delete(idx);
257
319
  }
258
320
  }
259
321
  // Clear the fragment buffer and reset segment-level tracking for the next segment.
@@ -323,23 +385,48 @@ export function createFMP4Segmenter(options) {
323
385
  if (initChanged) {
324
386
  state.initVersion++;
325
387
  }
326
- // Extract per-track timescale values from the moov box. These convert trun sample durations (timescale units) to seconds for media-time EXTINF values.
327
- // Wrapped in try/catch so a malformed moov never prevents stream startup — EXTINF falls back to wall-clock time if parsing fails.
388
+ // Extract per-track metadata from the moov box in a single pass: timescales (for media-time EXTINF values) and handler types (for identifying the video
389
+ // track). The video trackId enables track-aware segment health monitoring — the monitor can distinguish dead capture pipelines (audio-only segments, no video
390
+ // trafs) from legitimate small segments produced by static content. Wrapped in try/catch so a malformed moov never prevents stream startup — EXTINF falls
391
+ // back to wall-clock time if parsing fails, and video traf tracking degrades gracefully to null.
328
392
  try {
329
- state.trackTimescales = parseMoovTimescales(box.data);
393
+ const trackInfo = parseMoovTrackInfo(box.data);
394
+ for (const [trackId, info] of trackInfo) {
395
+ state.trackTimescales.set(trackId, info.timescale);
396
+ if (info.handlerType === "vide") {
397
+ state.videoTrackId = trackId;
398
+ state.videoTrafsInCurrentSegment = false;
399
+ }
400
+ }
330
401
  if (state.trackTimescales.size === 0) {
331
- LOG.debug("streaming:segmenter", "No track timescales found in moov. EXTINF will use wall-clock fallback.");
402
+ LOG.debug("streaming:segmenter", "No track info found in moov. EXTINF will use wall-clock fallback.");
332
403
  }
333
404
  }
334
405
  catch {
335
- LOG.debug("streaming:segmenter", "Failed to parse moov timescales. EXTINF will use wall-clock fallback.");
406
+ LOG.debug("streaming:segmenter", "Failed to parse moov track info. EXTINF will use wall-clock fallback.");
336
407
  }
337
408
  // Log init segment details for debugging timescale or codec issues.
338
409
  const timescaleEntries = [];
339
410
  for (const [trackId, timescale] of state.trackTimescales) {
340
411
  timescaleEntries.push("track " + String(trackId) + "=" + String(timescale));
341
412
  }
342
- LOG.debug("streaming:segmenter", "Init segment received: %d bytes, version=%d, timescales=[%s].", initData.length, state.initVersion, timescaleEntries.join(", "));
413
+ LOG.debug("streaming:segmenter", "Init segment received: %d bytes, version=%d, timescales=[%s], videoTrackId=%s.", initData.length, state.initVersion, timescaleEntries.join(", "), String(state.videoTrackId ?? "unknown"));
414
+ // Extract and log codec configuration from the moov for diagnostics. These parameters are needed to match preroll encoding with Chrome's output so
415
+ // CDVR's transcoder sees consistent codec parameters across the preroll-to-real DISCONTINUITY boundary.
416
+ try {
417
+ const codecConfig = parseMoovCodecConfig(box.data);
418
+ if (codecConfig.video) {
419
+ LOG.debug("streaming:segmenter", "Video codec: profile=%d, profileCompatibility=0x%s, level=%d.", codecConfig.video.profile, codecConfig.video.profileCompatibility.toString(16).padStart(2, "0"), codecConfig.video.level);
420
+ }
421
+ if (codecConfig.audio) {
422
+ const sampleRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];
423
+ const sampleRate = sampleRates[codecConfig.audio.sampleRateIndex] ?? 0;
424
+ LOG.debug("streaming:segmenter", "Audio codec: objectType=%d (AAC-LC=%d), sampleRate=%dHz (index=%d).", codecConfig.audio.objectType, codecConfig.audio.objectType === 2 ? 1 : 0, sampleRate, codecConfig.audio.sampleRateIndex);
425
+ }
426
+ }
427
+ catch {
428
+ LOG.debug("streaming:segmenter", "Failed to parse codec configuration from moov.");
429
+ }
343
430
  // Compute the normalized reference position for tab replacement offset initialization. This converts the old segmenter's per-track timestamp counters
344
431
  // 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
432
  // Deriving all per-track offsets from this shared reference eliminates the inter-track bias that per-track independent offsets would freeze from the old
@@ -358,6 +445,14 @@ export function createFMP4Segmenter(options) {
358
445
  state.normalizedReferencePositionSec = totalSec / count;
359
446
  }
360
447
  }
448
+ // When preroll is active, override the normalized reference position with the total preroll duration in seconds. This makes Chrome's real content PTS
449
+ // continue from where the preroll ended, eliminating the PTS discontinuity at the preroll-to-live boundary. Without this, Chrome's MediaRecorder starts at
450
+ // PTS 0, causing CDVR's remuxer to detect a PTS reset and apply a sentinel pts_offset (1152921504606840.75) that breaks the Apple TV's timeline display.
451
+ // With continuous PTS, the remuxer sees smooth progression and computes a normal offset. This overrides any resume-based reference because the new session's
452
+ // preroll PTS timeline takes precedence over the old session's timestamps.
453
+ if (state.prerollSegmentCount > 0) {
454
+ state.normalizedReferencePositionSec = getPrerollTotalDurationSec();
455
+ }
361
456
  // Suppress the discontinuity marker when codec parameters are unchanged (byte-identical init). This avoids an unnecessary decoder flush on the client.
362
457
  if (!initChanged && state.pendingDiscontinuity) {
363
458
  state.pendingDiscontinuity = false;
@@ -422,6 +517,11 @@ export function createFMP4Segmenter(options) {
422
517
  if (needsRewrite) {
423
518
  offsetMoofTimestamps(box.data, state.trackOffsets);
424
519
  }
520
+ // Check whether this moof contains a traf for the video track. The trackResults map contains an entry for every traf in the moof, keyed by trackId.
521
+ // If the video trackId is present, we know the capture pipeline is producing video data (even if the frame content is static/low-motion).
522
+ if ((state.videoTrackId !== null) && trackResults.has(state.videoTrackId)) {
523
+ state.videoTrafsInCurrentSegment = true;
524
+ }
425
525
  // Track "next expected" for future tab replacement handoff and accumulate durations for EXTINF.
426
526
  for (const [trackId, result] of trackResults) {
427
527
  const trackOffset = state.trackOffsets.get(trackId) ?? 0n;
@@ -517,6 +617,7 @@ export function createFMP4Segmenter(options) {
517
617
  nonKeyframeCount: state.nonKeyframeCount,
518
618
  segmentsWithoutLeadingKeyframe: state.segmentsWithoutLeadingKeyframe
519
619
  }),
620
+ getLastSegmentHasVideo: () => state.lastSegmentHasVideo,
520
621
  getLastSegmentSize: () => state.lastSegmentSize,
521
622
  getSegmentIndex: () => state.segmentIndex,
522
623
  getSessionStats: () => ({ ...state.sessionStats }),
@@ -1 +1 @@
1
- {"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fmp4Segmenter.js","sourceRoot":"","sources":["../../src/streaming/fmp4Segmenter.ts"],"names":[],"mappings":"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"}
@@ -33,8 +33,8 @@ export declare function sendValidationError(validation: {
33
33
  statusCode: number;
34
34
  }, res: Response): void;
35
35
  /**
36
- * Ensures a stream is running for a channel. If no stream exists, starts one. If a stream startup is in progress (-1 sentinel), waits for it to complete. Returns
37
- * the stream ID if successful, or null if an error occurred (with the error response already sent to the client).
36
+ * Ensures a stream is running for a channel. If no stream exists, registers a pending stream with a preroll playlist (when available) and launches async setup. If a
37
+ * stream already exists (either fully set up or pending), returns its ID immediately.
38
38
  *
39
39
  * The existing-stream check runs first so that ad-hoc streams (registered under synthetic keys like "play-a1b2c3d4") can be served without failing the
40
40
  * "Channel not found" check.
@@ -45,11 +45,13 @@ export declare function sendValidationError(validation: {
45
45
  * @param channelName - The channel key (or synthetic ad-hoc key) to stream.
46
46
  * @param req - Express request object (for profile override and client IP).
47
47
  * @param res - Express response object (for error responses).
48
- * @returns The stream ID if a stream is running, or null if an error occurred.
48
+ * @returns The stream ID if a stream is running or pending, or null if an error occurred.
49
49
  */
50
50
  export declare function ensureChannelStream(channelName: string, req: Request, res: Response): Promise<Nullable<number>>;
51
51
  /**
52
- * Handles HLS playlist requests. Ensures a stream is running for the channel (blocking until ready if a new stream must start), then returns the playlist.
52
+ * Handles HLS playlist requests. If a stream exists (fully set up or pending with preroll), returns the playlist immediately. If no stream exists and the preroll is
53
+ * available, registers a pending stream with a preroll playlist and returns it immediately while setup runs asynchronously. Falls back to blocking initialization when
54
+ * the preroll is not available.
53
55
  *
54
56
  * Route: GET /hls/:name/stream.m3u8
55
57
  *
@@ -58,7 +60,8 @@ export declare function ensureChannelStream(channelName: string, req: Request, r
58
60
  */
59
61
  export declare function handleHLSPlaylist(req: Request, res: Response): Promise<void>;
60
62
  /**
61
- * Handles HLS segment requests. Returns the requested segment from memory. Supports both the fMP4 initialization segment (init.mp4) and media segments (.m4s).
63
+ * Handles HLS segment requests. Returns the requested segment from memory. Supports the fMP4 initialization segment (init.mp4), capture-mode media segments
64
+ * (.m4s), native-mode video segments (.ts), and audio segments for streams with separate audio renditions.
62
65
  *
63
66
  * Route: GET /hls/:name/:segment
64
67
  *
@@ -66,6 +69,16 @@ export declare function handleHLSPlaylist(req: Request, res: Response): Promise<
66
69
  * @param res - Express response object.
67
70
  */
68
71
  export declare function handleHLSSegment(req: Request, res: Response): void;
72
+ /**
73
+ * Handles HLS variant playlist requests for streams with separate audio renditions. Serves video.m3u8 or audio.m3u8 depending on the requested playlist name.
74
+ * Returns 404 for streams that don't have separate audio.
75
+ *
76
+ * Route: GET /hls/:name/video.m3u8 and GET /hls/:name/audio.m3u8
77
+ *
78
+ * @param req - Express request object.
79
+ * @param res - Express response object.
80
+ */
81
+ export declare function handleHLSVariantPlaylist(req: Request, res: Response): void;
69
82
  /**
70
83
  * Handles ad-hoc stream requests for arbitrary URLs. Generates a deterministic synthetic key from the URL and profile, starts a stream if none exists, and redirects
71
84
  * to the standard HLS playlist path. This enables streaming URLs that are not predefined as channels.
@@ -79,14 +92,6 @@ export declare function handleHLSSegment(req: Request, res: Response): void;
79
92
  * @param res - Express response object.
80
93
  */
81
94
  export declare function handlePlayStream(req: Request, res: Response): Promise<void>;
82
- /**
83
- * Waits for a stream startup to complete without sending any HTTP responses. Used by MPEG-TS when headers have already been flushed and error responses cannot be
84
- * sent.
85
- *
86
- * @param channelName - The channel name (or synthetic ad-hoc key) to poll.
87
- * @returns The resolved stream ID on success, or null if startup failed or timed out.
88
- */
89
- export declare function awaitStreamReadySilent(channelName: string): Promise<Nullable<number>>;
90
95
  /**
91
96
  * Options for initializing a stream.
92
97
  */
@@ -97,19 +102,19 @@ interface InitializeStreamOptions {
97
102
  clientAddress: Nullable<string>;
98
103
  clickSelector?: string;
99
104
  clickToPlay?: boolean;
105
+ preTuned?: boolean;
106
+ mpegTsClient?: boolean;
100
107
  profileOverride?: string;
101
108
  url: string;
102
109
  }
103
110
  /**
104
- * Initializes a new HLS stream. This is the shared stream startup logic used by both channel-based and ad-hoc streams. It handles browser capture setup, segmenter
105
- * creation, stream registration, and event emission.
111
+ * Initializes a new HLS stream. This is the blocking wrapper used by callers that need to wait for the full setup to complete (pretune, MPEG-TS, ad-hoc play).
112
+ * Registers a pending stream entry with the channel-to-stream mapping, then awaits the full async setup.
106
113
  *
107
- * A -1 sentinel is set in channelToStreamId during setup to prevent duplicate stream starts. On success, the sentinel is replaced with the real stream ID. On
108
- * failure, the sentinel is removed and the error is re-thrown for the caller to handle HTTP error responses appropriately (channel-based streams need HDHomeRun
109
- * headers, ad-hoc streams do not).
114
+ * For the non-blocking path used by HLS playlist requests, see registerPendingStream() + completeStreamSetup() called from ensureChannelStream().
110
115
  *
111
116
  * @param options - Stream initialization options.
112
- * @returns The stream ID on success, or null if the stream was terminated during the narrow setup window (orphaned setup race condition).
117
+ * @returns The stream ID on success, or null if the stream was terminated during setup.
113
118
  * @throws StreamSetupError if setup fails, or Error for unexpected failures.
114
119
  */
115
120
  export declare function initializeStream(options: InitializeStreamOptions): Promise<Nullable<number>>;