@ozaiya/openclaw-channel 0.10.28 → 0.10.30

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.
@@ -0,0 +1,153 @@
1
+ /**
2
+ * RFC 6184 H.264 RTP packetizer for WebRTC media tracks.
3
+ *
4
+ * The native capture addon (ScreenCaptureKit + VideoToolbox) emits one
5
+ * Annex-B access unit (one encoded frame, start-code delimited NAL units) per
6
+ * `onFrame` callback. To send it over a werift WebRTC video track we must
7
+ * convert each access unit into a sequence of RTP payloads:
8
+ *
9
+ * - Single NAL unit packet — NALU that fits in one RTP packet (type 1-23)
10
+ * - FU-A fragmentation — NALU too large for one RTP packet (type 28)
11
+ *
12
+ * We deliberately do NOT emit STAP-A aggregation packets: the consumer is a
13
+ * browser's native WebRTC depacketizer, which handles single-NAL + FU-A
14
+ * universally, and keeping SPS/PPS/IDR as separate single-NAL packets is
15
+ * simpler and equally correct.
16
+ *
17
+ * werift's RTCRtpSender rewrites ssrc / payloadType / sequenceNumber on send
18
+ * (see rtpSender.ts `sendRtp`), so the packetizer only needs to produce correct
19
+ * `marker` (set on the final packet of an access unit) and `timestamp`
20
+ * (90 kHz). We still supply a monotonic 16-bit sequence number — werift bases
21
+ * its sequence offset on the first packet it observes.
22
+ */
23
+ import { RtpPacket, RtpHeader } from 'werift';
24
+ /** Conservative RTP payload size — keeps packets under the common 1280-byte
25
+ * path MTU after IP/UDP/SRTP/DTLS overhead, avoiding IP fragmentation. */
26
+ const RTP_MTU_PAYLOAD = 1200;
27
+ /** H.264 90 kHz RTP clock rate. */
28
+ export const H264_CLOCK_RATE = 90000;
29
+ /** NAL unit type for FU-A fragmentation units (RFC 6184 §5.8). */
30
+ const NALU_TYPE_FU_A = 28;
31
+ /** NAL unit type for IDR (instantaneous decoder refresh) slices — a keyframe. */
32
+ const NALU_TYPE_IDR = 5;
33
+ /** NAL unit type for sequence parameter set. */
34
+ const NALU_TYPE_SPS = 7;
35
+ /**
36
+ * Split an Annex-B byte stream (one access unit) into raw NAL units with the
37
+ * start codes (00 00 01 or 00 00 00 01) stripped. Each returned buffer begins
38
+ * with the 1-byte NAL header.
39
+ */
40
+ export function splitNalUnits(annexB) {
41
+ const nalus = [];
42
+ const len = annexB.length;
43
+ // Find the offset of each start code.
44
+ let i = 0;
45
+ let naluStart = -1;
46
+ const isStartCode3 = (p) => p + 2 < len && annexB[p] === 0 && annexB[p + 1] === 0 && annexB[p + 2] === 1;
47
+ const isStartCode4 = (p) => p + 3 < len && annexB[p] === 0 && annexB[p + 1] === 0 && annexB[p + 2] === 0 && annexB[p + 3] === 1;
48
+ while (i < len) {
49
+ if (isStartCode4(i)) {
50
+ if (naluStart >= 0 && i > naluStart)
51
+ nalus.push(annexB.subarray(naluStart, i));
52
+ i += 4;
53
+ naluStart = i;
54
+ }
55
+ else if (isStartCode3(i)) {
56
+ if (naluStart >= 0 && i > naluStart)
57
+ nalus.push(annexB.subarray(naluStart, i));
58
+ i += 3;
59
+ naluStart = i;
60
+ }
61
+ else {
62
+ i++;
63
+ }
64
+ }
65
+ if (naluStart >= 0 && naluStart < len)
66
+ nalus.push(annexB.subarray(naluStart, len));
67
+ // If no start codes were found, treat the whole buffer as one NAL unit
68
+ // (some encoders emit AVCC-less raw NALUs). This keeps us robust.
69
+ if (nalus.length === 0 && len > 0)
70
+ nalus.push(annexB);
71
+ return nalus;
72
+ }
73
+ /** True if the access unit contains an IDR slice (i.e. is a keyframe). */
74
+ export function isKeyframeAccessUnit(annexB) {
75
+ for (const nalu of splitNalUnits(annexB)) {
76
+ const type = nalu[0] & 0x1f;
77
+ if (type === NALU_TYPE_IDR || type === NALU_TYPE_SPS)
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+ /**
83
+ * Stateful packetizer — owns the rolling RTP sequence number for one track.
84
+ */
85
+ export class H264Packetizer {
86
+ /** 16-bit rolling sequence number; werift offsets from the first value. */
87
+ sequenceNumber;
88
+ payloadType;
89
+ ssrc;
90
+ constructor(opts) {
91
+ // werift overrides payloadType/ssrc on send; these are placeholders.
92
+ this.payloadType = opts?.payloadType ?? 96;
93
+ this.ssrc = opts?.ssrc ?? 0;
94
+ // Start from a fixed-but-arbitrary value; varying it is unnecessary since
95
+ // werift rewrites the on-wire sequence numbers.
96
+ this.sequenceNumber = (opts?.initialSequenceNumber ?? 0) & 0xffff;
97
+ }
98
+ nextSeq() {
99
+ const s = this.sequenceNumber;
100
+ this.sequenceNumber = (this.sequenceNumber + 1) & 0xffff;
101
+ return s;
102
+ }
103
+ makePacket(payload, timestamp, marker) {
104
+ const header = new RtpHeader({
105
+ version: 2,
106
+ payloadType: this.payloadType,
107
+ sequenceNumber: this.nextSeq(),
108
+ timestamp: timestamp >>> 0,
109
+ ssrc: this.ssrc,
110
+ marker,
111
+ });
112
+ return new RtpPacket(header, payload);
113
+ }
114
+ /**
115
+ * Packetize one Annex-B access unit into RTP packets.
116
+ * @param accessUnit Annex-B encoded frame (start-code delimited NALUs).
117
+ * @param rtpTimestamp 90 kHz RTP timestamp for this frame.
118
+ */
119
+ packetize(accessUnit, rtpTimestamp) {
120
+ const nalus = splitNalUnits(accessUnit);
121
+ if (nalus.length === 0)
122
+ return [];
123
+ // Build the payloads first so we know which is the final one (marker bit).
124
+ const payloads = [];
125
+ for (const nalu of nalus) {
126
+ if (nalu.length <= RTP_MTU_PAYLOAD) {
127
+ // Single NAL unit packet — payload is the NALU verbatim.
128
+ payloads.push(nalu);
129
+ }
130
+ else {
131
+ // FU-A fragmentation.
132
+ const naluHeader = nalu[0];
133
+ const fIndicator = naluHeader & 0xe0; // F + NRI bits
134
+ const naluType = naluHeader & 0x1f;
135
+ const body = nalu.subarray(1); // drop the 1-byte NAL header
136
+ const chunkSize = RTP_MTU_PAYLOAD - 2; // 2 bytes FU indicator + FU header
137
+ const total = Math.ceil(body.length / chunkSize);
138
+ for (let f = 0; f < total; f++) {
139
+ const start = f === 0 ? 1 : 0;
140
+ const end = f === total - 1 ? 1 : 0;
141
+ const fuIndicator = fIndicator | NALU_TYPE_FU_A;
142
+ const fuHeader = (start << 7) | (end << 6) | naluType; // R bit = 0
143
+ const slice = body.subarray(f * chunkSize, (f + 1) * chunkSize);
144
+ payloads.push(Buffer.concat([Buffer.from([fuIndicator, fuHeader]), slice]));
145
+ }
146
+ }
147
+ }
148
+ const ts = rtpTimestamp >>> 0;
149
+ const lastIndex = payloads.length - 1;
150
+ return payloads.map((p, idx) => this.makePacket(p, ts, idx === lastIndex));
151
+ }
152
+ }
153
+ //# sourceMappingURL=h264Packetizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h264Packetizer.js","sourceRoot":"","sources":["../../src/h264Packetizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE9C;0EAC0E;AAC1E,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AAErC,kEAAkE;AAClE,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B,iFAAiF;AACjF,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB,gDAAgD;AAChD,MAAM,aAAa,GAAG,CAAC,CAAC;AAExB;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAE1B,sCAAsC;IACtC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;IAEnB,MAAM,YAAY,GAAG,CAAC,CAAS,EAAW,EAAE,CACxC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,CAAC,CAAS,EAAW,EAAE,CACxC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAExG,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC,IAAI,CAAC,CAAC;YACP,SAAS,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/E,CAAC,IAAI,CAAC,CAAC;YACP,SAAS,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACJ,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IACD,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;IAEnF,uEAAuE;IACvE,kEAAkE;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEtD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,oBAAoB,CAAC,MAAc;IAC/C,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;QAC5B,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,aAAa;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAc;IACvB,2EAA2E;IACnE,cAAc,CAAS;IACd,WAAW,CAAS;IACpB,IAAI,CAAS;IAE9B,YAAY,IAA8E;QACtF,qEAAqE;QACrE,IAAI,CAAC,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC;QAC5B,0EAA0E;QAC1E,gDAAgD;QAChD,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,EAAE,qBAAqB,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;IACtE,CAAC;IAEO,OAAO;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC;QACzD,OAAO,CAAC,CAAC;IACb,CAAC;IAEO,UAAU,CAAC,OAAe,EAAE,SAAiB,EAAE,MAAe;QAClE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YACzB,OAAO,EAAE,CAAC;YACV,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE;YAC9B,SAAS,EAAE,SAAS,KAAK,CAAC;YAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM;SACT,CAAC,CAAC;QACH,OAAO,IAAI,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,UAAkB,EAAE,YAAoB;QAC9C,MAAM,KAAK,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,2EAA2E;QAC3E,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,MAAM,IAAI,eAAe,EAAE,CAAC;gBACjC,yDAAyD;gBACzD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACJ,sBAAsB;gBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,eAAe;gBACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;gBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,6BAA6B;gBAC5D,MAAM,SAAS,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,mCAAmC;gBAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;gBAEjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9B,MAAM,GAAG,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;oBAChD,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,YAAY;oBACnE,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;oBAChE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChF,CAAC;YACL,CAAC;QACL,CAAC;QAED,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC;IAC/E,CAAC;CACJ"}
@@ -15,8 +15,23 @@ export interface CdpScreencastOptions {
15
15
  width: number;
16
16
  height: number;
17
17
  }) => void;
18
+ /**
19
+ * Pointer moved/clicked inside the sandbox page (viewport CSS px — 1:1 with
20
+ * frame pixels at dpr=1). Sourced from a page-injected listener, so it sees
21
+ * BOTH the agent's synthetic CDP input and viewer takeover input. JPEG/H.264
22
+ * frames carry no pointer at all (headless screenshots have no OS cursor),
23
+ * so this is the viewer's only way to draw one.
24
+ */
25
+ onCursor?: (x: number, y: number, click: boolean) => void;
18
26
  quality?: number;
19
27
  minIntervalMs?: number;
28
+ /**
29
+ * Dynamic overrides, sampled per shot. The transport can change mid-session
30
+ * (relay → P2P DataChannel and back), and a direct channel affords higher
31
+ * quality + rate than the proxied relay — these let the caller retune live.
32
+ */
33
+ getQuality?: () => number;
34
+ getMinIntervalMs?: () => number;
20
35
  /**
21
36
  * Outbound relay backpressure in bytes (relayWs.bufferedAmount). When this is
22
37
  * high the network can't drain frames as fast as we capture them, so we PAUSE
@@ -52,6 +52,25 @@ const RECONNECT_DELAY_MS = 1000;
52
52
  const BACKPRESSURE_LIMIT_BYTES = 96 * 1024;
53
53
  // While paused for backpressure, re-check this often (ms).
54
54
  const BACKPRESSURE_RECHECK_MS = 25;
55
+ // Page-side pointer probe. Synthetic CDP input (Input.dispatchMouseEvent — from
56
+ // the agent's own automation OR viewer takeover) fires real DOM events, so a
57
+ // window-level listener sees every pointer move without touching the page's
58
+ // layout. Reports throttled coords through a CDP binding; clicks always report.
59
+ const CURSOR_BINDING = "__ozaiyaCursorReport";
60
+ const CURSOR_PROBE_JS = `(() => {
61
+ if (window.__ozaiyaCursorHooked) return; window.__ozaiyaCursorHooked = 1;
62
+ let last = 0;
63
+ const report = (e, click) => {
64
+ const fn = window.${CURSOR_BINDING};
65
+ if (typeof fn !== 'function') return;
66
+ const now = Date.now();
67
+ if (!click && now - last < 33) return;
68
+ last = now;
69
+ try { fn(JSON.stringify({ x: Math.round(e.clientX), y: Math.round(e.clientY), c: click ? 1 : 0 })); } catch {}
70
+ };
71
+ window.addEventListener('mousemove', (e) => report(e, false), { capture: true, passive: true });
72
+ window.addEventListener('mousedown', (e) => report(e, true), { capture: true, passive: true });
73
+ })();`;
55
74
  export async function createCdpScreencast(opts) {
56
75
  const { host, port } = opts;
57
76
  const quality = opts.quality ?? 55;
@@ -90,7 +109,8 @@ export async function createCdpScreencast(opts) {
90
109
  shotStartedAt = Date.now();
91
110
  // optimizeForSpeed trades a little compression ratio for a faster encode (free
92
111
  // when supported; ignored by older Chromium).
93
- shotId = send("Page.captureScreenshot", { format: "jpeg", quality, optimizeForSpeed: true });
112
+ const q = opts.getQuality?.() ?? quality;
113
+ shotId = send("Page.captureScreenshot", { format: "jpeg", quality: q, optimizeForSpeed: true });
94
114
  clearPending();
95
115
  pendingTimer = setTimeout(onCaptureTimeout, CAPTURE_TIMEOUT_MS);
96
116
  };
@@ -105,7 +125,8 @@ export async function createCdpScreencast(opts) {
105
125
  setTimeout(scheduleNext, BACKPRESSURE_RECHECK_MS);
106
126
  return;
107
127
  }
108
- setTimeout(poll, Math.max(0, minIntervalMs - (Date.now() - shotStartedAt)));
128
+ const interval = opts.getMinIntervalMs?.() ?? minIntervalMs;
129
+ setTimeout(poll, Math.max(0, interval - (Date.now() - shotStartedAt)));
109
130
  };
110
131
  // A capture resolved (frame arrived) or was abandoned (watchdog) — advance the loop.
111
132
  const finishShot = () => {
@@ -145,6 +166,15 @@ export async function createCdpScreencast(opts) {
145
166
  catch {
146
167
  return;
147
168
  }
169
+ if (msg.method === "Runtime.bindingCalled" && msg.params?.name === CURSOR_BINDING) {
170
+ try {
171
+ const p = JSON.parse(msg.params.payload ?? "");
172
+ if (typeof p.x === "number" && typeof p.y === "number")
173
+ opts.onCursor?.(p.x, p.y, !!p.c);
174
+ }
175
+ catch { /* malformed report — skip */ }
176
+ return;
177
+ }
148
178
  if (msg.id === shotId) {
149
179
  const data = msg.result?.data;
150
180
  if (data && !closed) {
@@ -198,6 +228,15 @@ export async function createCdpScreencast(opts) {
198
228
  }
199
229
  opts.log?.info?.("[sandbox-cdp] CDP connected — capturing frames");
200
230
  send("Page.enable");
231
+ if (opts.onCursor) {
232
+ // Pointer probe: binding + install on future documents + on the one
233
+ // that's already loaded (addScriptToEvaluateOnNewDocument alone only
234
+ // covers navigations). Runtime.enable is required for bindingCalled.
235
+ send("Runtime.enable");
236
+ send("Runtime.addBinding", { name: CURSOR_BINDING });
237
+ send("Page.addScriptToEvaluateOnNewDocument", { source: CURSOR_PROBE_JS });
238
+ send("Runtime.evaluate", { expression: CURSOR_PROBE_JS });
239
+ }
201
240
  clearPending();
202
241
  inflight = false;
203
242
  poll();
@@ -1 +1 @@
1
- {"version":3,"file":"sandboxScreenCdp.js","sourceRoot":"","sources":["../../src/sandboxScreenCdp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandboxScreenCdp.js","sourceRoot":"","sources":["../../src/sandboxScreenCdp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface H264Transcoder {
2
+ /** Feed one JPEG frame (drops internally when the encoder can't keep up). */
3
+ feed: (jpeg: Buffer) => void;
4
+ close: () => void;
5
+ }
6
+ export interface H264TranscoderOptions {
7
+ /** Resolved ffmpeg argv prefix, e.g. ['ffmpeg'] or ['docker','exec','-i','<id>','ffmpeg']. */
8
+ cmdPrefix: string[];
9
+ /** Spawn env (host mode needs the Docker.app bin dir on PATH). */
10
+ env?: NodeJS.ProcessEnv;
11
+ /** Target frame rate — also the keyframe interval (1s GOP). */
12
+ fps?: number;
13
+ bitrateKbps?: number;
14
+ onAccessUnit: (au: Buffer) => void;
15
+ /** Encoder died (crash, container gone) — caller falls back to JPEG. */
16
+ onExit?: () => void;
17
+ log?: {
18
+ info?: (m: string) => void;
19
+ warn?: (m: string) => void;
20
+ };
21
+ }
22
+ /**
23
+ * Try each candidate argv prefix with `-version`; return the first that runs.
24
+ */
25
+ export declare function probeFfmpeg(candidates: string[][], env?: NodeJS.ProcessEnv, timeoutMs?: number): Promise<string[] | null>;
26
+ export declare function createH264Transcoder(opts: H264TranscoderOptions): H264Transcoder;
@@ -0,0 +1,184 @@
1
+ /**
2
+ * JPEG → H.264 transcoder for the bot computer view media track.
3
+ *
4
+ * The CDP screencast stays the pixel source (Page.captureScreenshot — exact
5
+ * viewport pixels, so takeover input mapping is untouched), but instead of
6
+ * shipping each JPEG over the wire we pipe them into ffmpeg (image2pipe/mjpeg →
7
+ * libx264 zerolatency) and stream the H.264 access units over a WebRTC media
8
+ * track. Mostly-static browser content inter-frame compresses ~10-20x better
9
+ * than independent JPEGs, so a thin uplink (home WiFi behind TURN) carries
10
+ * 20fps where JPEG managed ~10.
11
+ *
12
+ * ffmpeg may not live in the gateway's own environment: compose-mode agents
13
+ * get a static binary baked into the image, while host-mode gateways reach the
14
+ * ffmpeg inside the sandbox-browser container via `docker exec -i`. The caller
15
+ * probes the candidates (probeFfmpeg) and passes the winning argv prefix; when
16
+ * none works the gateway simply keeps the JPEG path — this module is additive.
17
+ *
18
+ * Output parsing: x264 is run with aud=1, so the byte stream is delimited by
19
+ * Access Unit Delimiter NALUs. We split on AUDs and emit one Annex-B access
20
+ * unit per frame; a short flush timer emits the tail AU without waiting for
21
+ * the next frame's AUD (zerolatency flushes whole frames, so the tail is
22
+ * complete in practice — a rare torn AU just drops one frame and the ≤1s GOP
23
+ * recovers).
24
+ */
25
+ import { spawn, execFile } from "node:child_process";
26
+ /** How long to wait for more stdout before flushing the tail as a complete AU. */
27
+ const TAIL_FLUSH_MS = 15;
28
+ /** Drop frames instead of queueing unboundedly into a stalled encoder. */
29
+ const STDIN_HIGH_WATER = 2 * 1024 * 1024;
30
+ /**
31
+ * Try each candidate argv prefix with `-version`; return the first that runs.
32
+ */
33
+ export function probeFfmpeg(candidates, env, timeoutMs = 5000) {
34
+ const tryOne = (c) => new Promise((resolve) => {
35
+ try {
36
+ execFile(c[0], [...c.slice(1), "-version"], { timeout: timeoutMs, env }, (err, stdout) => {
37
+ resolve(!err && /ffmpeg version/i.test(String(stdout)));
38
+ });
39
+ }
40
+ catch {
41
+ resolve(false);
42
+ }
43
+ });
44
+ return candidates.reduce((acc, c) => acc.then((found) => (found ? found : tryOne(c).then((ok) => (ok ? c : null)))), Promise.resolve(null));
45
+ }
46
+ /** True when the buffer at `p` starts an Access Unit Delimiter NALU. */
47
+ function isAudAt(buf, p) {
48
+ // 00 00 00 01 09 or 00 00 01 09 — returns the start-code length, else 0.
49
+ if (p + 4 < buf.length && buf[p] === 0 && buf[p + 1] === 0 && buf[p + 2] === 0 && buf[p + 3] === 1 && (buf[p + 4] & 0x1f) === 9)
50
+ return 4;
51
+ if (p + 3 < buf.length && buf[p] === 0 && buf[p + 1] === 0 && buf[p + 2] === 1 && (buf[p + 3] & 0x1f) === 9)
52
+ return 3;
53
+ return 0;
54
+ }
55
+ export function createH264Transcoder(opts) {
56
+ const fps = opts.fps ?? 20;
57
+ const kbps = opts.bitrateKbps ?? 1200;
58
+ const args = [
59
+ ...opts.cmdPrefix.slice(1),
60
+ "-hide_banner", "-loglevel", "error",
61
+ "-f", "image2pipe", "-framerate", String(fps), "-c:v", "mjpeg", "-i", "pipe:0",
62
+ "-an",
63
+ "-c:v", "libx264", "-preset", "ultrafast", "-tune", "zerolatency",
64
+ "-profile:v", "baseline", "-pix_fmt", "yuv420p",
65
+ // H.264 requires even dimensions; the CDP viewport often isn't.
66
+ "-vf", "scale=trunc(iw/2)*2:trunc(ih/2)*2",
67
+ "-b:v", `${kbps}k`, "-maxrate", `${Math.round((kbps * 4) / 3)}k`, "-bufsize", `${Math.round(kbps / 2)}k`,
68
+ "-g", String(fps), "-keyint_min", String(fps),
69
+ // aud=1 → AU delimiters for output framing; scenecut=0 → keyframes only on the GOP.
70
+ "-x264-params", "aud=1:scenecut=0",
71
+ "-f", "h264", "pipe:1",
72
+ ];
73
+ let closed = false;
74
+ let proc;
75
+ try {
76
+ proc = spawn(opts.cmdPrefix[0], args, { stdio: ["pipe", "pipe", "pipe"], env: opts.env });
77
+ }
78
+ catch (err) {
79
+ opts.log?.warn?.(`[sandbox-h264] spawn failed: ${String(err)}`);
80
+ setImmediate(() => opts.onExit?.());
81
+ return { feed: () => { }, close: () => { } };
82
+ }
83
+ opts.log?.info?.(`[sandbox-h264] encoder started (${opts.cmdPrefix.join(" ")} @ ${fps}fps/${kbps}k)`);
84
+ let pending = Buffer.alloc(0);
85
+ let flushTimer = null;
86
+ const emitRange = (start, end) => {
87
+ if (end > start)
88
+ opts.onAccessUnit(pending.subarray(start, end));
89
+ };
90
+ // Split out every complete AUD-delimited access unit; keep the tail.
91
+ const drain = (final) => {
92
+ let auStart = -1;
93
+ let i = 0;
94
+ let consumed = 0;
95
+ while (i < pending.length) {
96
+ const sc = isAudAt(pending, i);
97
+ if (sc > 0) {
98
+ if (auStart >= 0) {
99
+ emitRange(auStart, i);
100
+ consumed = i;
101
+ }
102
+ auStart = i;
103
+ i += sc + 1;
104
+ }
105
+ else {
106
+ i++;
107
+ }
108
+ }
109
+ if (final && auStart >= 0) {
110
+ emitRange(auStart, pending.length);
111
+ consumed = pending.length;
112
+ }
113
+ if (consumed > 0)
114
+ pending = pending.subarray(consumed);
115
+ };
116
+ proc.stdout.on("data", (chunk) => {
117
+ if (closed)
118
+ return;
119
+ pending = pending.length ? Buffer.concat([pending, chunk]) : chunk;
120
+ drain(false);
121
+ // zerolatency flushes whole frames — if no more bytes arrive shortly, the
122
+ // tail is a complete AU; emit it now instead of waiting for the next frame.
123
+ if (flushTimer)
124
+ clearTimeout(flushTimer);
125
+ flushTimer = setTimeout(() => { if (!closed)
126
+ drain(true); }, TAIL_FLUSH_MS);
127
+ });
128
+ let stderrTail = "";
129
+ proc.stderr.on("data", (c) => { stderrTail = (stderrTail + c.toString()).slice(-500); });
130
+ proc.on("exit", (code) => {
131
+ if (flushTimer) {
132
+ clearTimeout(flushTimer);
133
+ flushTimer = null;
134
+ }
135
+ if (closed)
136
+ return;
137
+ closed = true;
138
+ opts.log?.warn?.(`[sandbox-h264] encoder exited code=${code}${stderrTail ? ` stderr: ${stderrTail.trim()}` : ""}`);
139
+ opts.onExit?.();
140
+ });
141
+ proc.on("error", (err) => {
142
+ if (closed)
143
+ return;
144
+ closed = true;
145
+ opts.log?.warn?.(`[sandbox-h264] encoder error: ${err.message}`);
146
+ opts.onExit?.();
147
+ });
148
+ return {
149
+ feed: (jpeg) => {
150
+ if (closed || !proc.stdin.writable)
151
+ return;
152
+ if (proc.stdin.writableLength > STDIN_HIGH_WATER)
153
+ return; // encoder stalled — drop
154
+ try {
155
+ proc.stdin.write(jpeg);
156
+ }
157
+ catch { /* dying — exit handler fires */ }
158
+ },
159
+ close: () => {
160
+ if (closed) {
161
+ try {
162
+ proc.kill("SIGKILL");
163
+ }
164
+ catch { /* ignore */ }
165
+ return;
166
+ }
167
+ closed = true;
168
+ if (flushTimer) {
169
+ clearTimeout(flushTimer);
170
+ flushTimer = null;
171
+ }
172
+ try {
173
+ proc.stdin.end();
174
+ }
175
+ catch { /* ignore */ }
176
+ // Grace for a clean drain, then make sure it's gone.
177
+ setTimeout(() => { try {
178
+ proc.kill("SIGKILL");
179
+ }
180
+ catch { /* ignore */ } }, 500).unref?.();
181
+ },
182
+ };
183
+ }
184
+ //# sourceMappingURL=sandboxScreenH264.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxScreenH264.js","sourceRoot":"","sources":["../../src/sandboxScreenH264.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,16 @@
1
1
  export interface SandboxRtcSession {
2
2
  /** Feed an inbound signaling message (JSON text from the viewer). */
3
3
  handleSignaling: (text: string) => void;
4
- /** Send one VNC chunk (noVNC → viewer) over the DataChannel. */
5
- sendToViewer: (buf: Buffer) => void;
6
- /** True once the DataChannel is open (P2P is carrying the VNC stream). */
4
+ /** Send one frame (binary) or control message (JSON text) over the DataChannel. */
5
+ sendToViewer: (data: Buffer | string) => void;
6
+ /** True once the DataChannel is open (P2P is carrying the stream). */
7
7
  isActive: () => boolean;
8
+ /** Outbound DataChannel buffer in bytes — backpressure signal for the capturer. */
9
+ getBufferedAmount: () => number;
10
+ /** True when the sendonly H.264 track is negotiated and the transport is up. */
11
+ isMediaReady: () => boolean;
12
+ /** Packetize + send one Annex-B access unit over the media track. */
13
+ sendVideoFrame: (accessUnit: Buffer) => boolean;
8
14
  /** Tear down the peer connection. */
9
15
  close: () => void;
10
16
  }
@@ -17,12 +23,19 @@ export interface SandboxRtcOptions {
17
23
  }>;
18
24
  /** Emit a signaling message (JSON text) back to the viewer over the relay WS. */
19
25
  sendSignal: (text: string) => void;
20
- /** Inbound VNC chunk from the viewer (DataChannel noVNC). */
21
- onData: (buf: Buffer) => void;
22
- /** DataChannel opened — P2P is live; stop using the relay for VNC. */
26
+ /** Inbound viewer data: binary = compact input encoding, string = JSON control. */
27
+ onData: (data: Buffer | string) => void;
28
+ /** DataChannel opened — P2P is live; stop using the relay for frames. */
23
29
  onActive: () => void;
24
30
  /** DataChannel closed / peer failed before it ever opened. */
25
31
  onClosed: () => void;
32
+ /**
33
+ * Offer a sendonly H.264 media track when the viewer's offer includes video.
34
+ * Set only when the gateway has a working transcoder to feed it.
35
+ */
36
+ enableVideo?: boolean;
37
+ /** The media track became feedable / stopped being feedable. */
38
+ onMediaStateChange?: (ready: boolean) => void;
26
39
  log?: {
27
40
  info?: (m: string) => void;
28
41
  warn?: (m: string) => void;