@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.
- package/dist/src/api.d.ts +6 -2
- package/dist/src/api.js +7 -3
- package/dist/src/api.js.map +1 -1
- package/dist/src/channel.js +19 -2
- package/dist/src/channel.js.map +1 -1
- package/dist/src/crypto.d.ts +13 -0
- package/dist/src/crypto.js +21 -0
- package/dist/src/crypto.js.map +1 -1
- package/dist/src/gateway.js +150 -36
- package/dist/src/gateway.js.map +1 -1
- package/dist/src/h264Packetizer.d.ts +55 -0
- package/dist/src/h264Packetizer.js +153 -0
- package/dist/src/h264Packetizer.js.map +1 -0
- package/dist/src/sandboxScreenCdp.d.ts +15 -0
- package/dist/src/sandboxScreenCdp.js +41 -2
- package/dist/src/sandboxScreenCdp.js.map +1 -1
- package/dist/src/sandboxScreenH264.d.ts +26 -0
- package/dist/src/sandboxScreenH264.js +184 -0
- package/dist/src/sandboxScreenH264.js.map +1 -0
- package/dist/src/sandboxScreenRtc.d.ts +19 -6
- package/dist/src/sandboxScreenRtc.js +181 -59
- package/dist/src/sandboxScreenRtc.js.map +1 -1
- package/package.json +1 -1
|
@@ -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":"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"}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
5
|
-
sendToViewer: (
|
|
6
|
-
/** True once the DataChannel is open (P2P is carrying the
|
|
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
|
|
21
|
-
onData: (
|
|
22
|
-
/** DataChannel opened — P2P is live; stop using the relay for
|
|
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;
|