@relaymessenger/sdk 0.5.0-staging.1 → 0.5.0-staging.3
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/README.md +1 -1
- package/dist/calls/call-room.d.ts +3 -1
- package/dist/calls/call-room.d.ts.map +1 -1
- package/dist/calls/call-room.js +19 -7
- package/dist/calls/call-room.js.map +1 -1
- package/dist/calls/engine-werift.d.ts.map +1 -1
- package/dist/calls/engine-werift.js +35 -1
- package/dist/calls/engine-werift.js.map +1 -1
- package/dist/calls/index.d.ts +3 -1
- package/dist/calls/index.d.ts.map +1 -1
- package/dist/calls/index.js +3 -1
- package/dist/calls/index.js.map +1 -1
- package/dist/calls/rive.d.ts +93 -0
- package/dist/calls/rive.d.ts.map +1 -0
- package/dist/calls/rive.js +190 -0
- package/dist/calls/rive.js.map +1 -0
- package/dist/calls/transport.d.ts +57 -1
- package/dist/calls/transport.d.ts.map +1 -1
- package/dist/calls/transport.js +161 -9
- package/dist/calls/transport.js.map +1 -1
- package/dist/calls/visemes.d.ts +52 -0
- package/dist/calls/visemes.d.ts.map +1 -0
- package/dist/calls/visemes.js +112 -0
- package/dist/calls/visemes.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/login.d.ts +9 -0
- package/dist/login.d.ts.map +1 -1
- package/dist/login.js +2 -0
- package/dist/login.js.map +1 -1
- package/dist/types.d.ts +68 -11
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rive in a Relay Call: the agent drives a Rive file the phone draws, through
|
|
3
|
+
* data binding (View Model Instance values and triggers), timed against the
|
|
4
|
+
* agent's own audio, and hears the values and triggers the phone writes back.
|
|
5
|
+
*
|
|
6
|
+
* Every wire name lives in this one block so a rename touches one place.
|
|
7
|
+
*/
|
|
8
|
+
export const RIVE_CHANNEL = "rive";
|
|
9
|
+
/** A message is at most 1 KB of UTF-8 JSON. */
|
|
10
|
+
export const RIVE_MESSAGE_MAX_BYTES = 1024;
|
|
11
|
+
/**
|
|
12
|
+
* The channel is unordered and lossy, as Cloudflare's docs advise for
|
|
13
|
+
* replaceable state (realtime/sfu/datachannels.mdx, "Configure message
|
|
14
|
+
* delivery"): each message overwrites what it sets, so a lost one is
|
|
15
|
+
* corrected by the next.
|
|
16
|
+
*/
|
|
17
|
+
export const RIVE_CHANNEL_OPTIONS = Object.freeze({ ordered: false, maxRetransmits: 0 });
|
|
18
|
+
const encoder = new TextEncoder();
|
|
19
|
+
const isRiveValue = (value) => typeof value === "boolean"
|
|
20
|
+
|| typeof value === "string"
|
|
21
|
+
|| (typeof value === "number" && Number.isFinite(value));
|
|
22
|
+
const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
|
|
23
|
+
const nonEmpty = (value) => typeof value === "string" && value.length > 0;
|
|
24
|
+
const validValues = (values) => isRecord(values)
|
|
25
|
+
&& Object.keys(values).length > 0
|
|
26
|
+
&& Object.entries(values).every(([name, value]) => name.length > 0 && isRiveValue(value));
|
|
27
|
+
/** Serialize one message, or throw when it is malformed or over 1 KB. */
|
|
28
|
+
export const encodeRiveMessage = (message) => {
|
|
29
|
+
const out = {};
|
|
30
|
+
if (message.t !== undefined) {
|
|
31
|
+
if (!Number.isFinite(message.t) || message.t < 0) {
|
|
32
|
+
throw new RangeError("Rive `at` must be a finite number of milliseconds, at least 0.");
|
|
33
|
+
}
|
|
34
|
+
out.t = Math.round(message.t);
|
|
35
|
+
}
|
|
36
|
+
for (const key of ["file", "artboard", "state_machine"]) {
|
|
37
|
+
const value = message[key];
|
|
38
|
+
if (value === undefined)
|
|
39
|
+
continue;
|
|
40
|
+
if (!nonEmpty(value))
|
|
41
|
+
throw new RangeError(`Rive \`${key}\` must be a non-empty string.`);
|
|
42
|
+
out[key] = value;
|
|
43
|
+
}
|
|
44
|
+
if ((out.artboard !== undefined || out.state_machine !== undefined) && out.file === undefined) {
|
|
45
|
+
throw new RangeError("Rive `artboard` and `state_machine` come with a `file`.");
|
|
46
|
+
}
|
|
47
|
+
if (message.view_model !== undefined) {
|
|
48
|
+
if (!validValues(message.view_model)) {
|
|
49
|
+
throw new TypeError("Rive `view_model` maps property names to finite numbers, booleans or strings.");
|
|
50
|
+
}
|
|
51
|
+
out.view_model = { ...message.view_model };
|
|
52
|
+
}
|
|
53
|
+
if (message.trigger !== undefined) {
|
|
54
|
+
if (!nonEmpty(message.trigger))
|
|
55
|
+
throw new RangeError("Rive `trigger` needs a trigger name.");
|
|
56
|
+
out.trigger = message.trigger;
|
|
57
|
+
}
|
|
58
|
+
if (out.view_model === undefined && out.trigger === undefined && out.file === undefined) {
|
|
59
|
+
throw new RangeError("A Rive message sets values, fires a trigger or shows a file.");
|
|
60
|
+
}
|
|
61
|
+
const text = JSON.stringify(out);
|
|
62
|
+
if (encoder.encode(text).byteLength > RIVE_MESSAGE_MAX_BYTES) {
|
|
63
|
+
throw new RangeError(`A Rive message is at most ${RIVE_MESSAGE_MAX_BYTES} bytes of JSON.`);
|
|
64
|
+
}
|
|
65
|
+
return text;
|
|
66
|
+
};
|
|
67
|
+
/** Read one message from the phone; null for anything malformed. Unknown keys are ignored. */
|
|
68
|
+
export const parseRiveMessage = (data) => {
|
|
69
|
+
const text = typeof data === "string"
|
|
70
|
+
? data
|
|
71
|
+
: data instanceof Uint8Array ? new TextDecoder().decode(data) : undefined;
|
|
72
|
+
if (text === undefined || encoder.encode(text).byteLength > RIVE_MESSAGE_MAX_BYTES)
|
|
73
|
+
return null;
|
|
74
|
+
let value;
|
|
75
|
+
try {
|
|
76
|
+
value = JSON.parse(text);
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (!isRecord(value))
|
|
82
|
+
return null;
|
|
83
|
+
const message = {};
|
|
84
|
+
if (value.view_model !== undefined) {
|
|
85
|
+
if (!validValues(value.view_model))
|
|
86
|
+
return null;
|
|
87
|
+
message.view_model = value.view_model;
|
|
88
|
+
}
|
|
89
|
+
if (value.trigger !== undefined) {
|
|
90
|
+
if (!nonEmpty(value.trigger))
|
|
91
|
+
return null;
|
|
92
|
+
message.trigger = value.trigger;
|
|
93
|
+
}
|
|
94
|
+
return message.view_model || message.trigger ? message : null;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* The agent's handle on its `rive` channel, from `transport.rive()`. Sends
|
|
98
|
+
* are fire-and-forget and return false when the channel is down (during a
|
|
99
|
+
* restart). When it reopens, the last `show` and the latest value of every
|
|
100
|
+
* property are sent again, untimed.
|
|
101
|
+
*/
|
|
102
|
+
export class RelayRive {
|
|
103
|
+
#sink;
|
|
104
|
+
#scene;
|
|
105
|
+
/** The latest value of every property set, replayed when the channel reopens. */
|
|
106
|
+
#values = new Map();
|
|
107
|
+
#listeners = new Map();
|
|
108
|
+
/** @internal */
|
|
109
|
+
constructor(sink) {
|
|
110
|
+
this.#sink = sink;
|
|
111
|
+
}
|
|
112
|
+
/** Set View Model Instance properties, such as `{ viseme: 3, speaking: true }`. */
|
|
113
|
+
set(values, timing = {}) {
|
|
114
|
+
const text = encodeRiveMessage({ ...at(timing), view_model: values });
|
|
115
|
+
for (const [name, value] of Object.entries(values))
|
|
116
|
+
this.#values.set(name, value);
|
|
117
|
+
return this.#sink.send(text);
|
|
118
|
+
}
|
|
119
|
+
/** Fire one trigger property, such as `"nod"`. */
|
|
120
|
+
trigger(name, timing = {}) {
|
|
121
|
+
return this.#sink.send(encodeRiveMessage({ ...at(timing), trigger: name }));
|
|
122
|
+
}
|
|
123
|
+
/** Switch to another Relay-hosted file, artboard or state machine, with optional starting values. */
|
|
124
|
+
show(scene, timing = {}) {
|
|
125
|
+
const text = encodeRiveMessage({ ...at(timing), ...scene });
|
|
126
|
+
this.#scene = {
|
|
127
|
+
file: scene.file,
|
|
128
|
+
...(scene.artboard === undefined ? {} : { artboard: scene.artboard }),
|
|
129
|
+
...(scene.state_machine === undefined ? {} : { state_machine: scene.state_machine }),
|
|
130
|
+
};
|
|
131
|
+
this.#values.clear();
|
|
132
|
+
for (const [name, value] of Object.entries(scene.view_model ?? {}))
|
|
133
|
+
this.#values.set(name, value);
|
|
134
|
+
return this.#sink.send(text);
|
|
135
|
+
}
|
|
136
|
+
on(event, listener) {
|
|
137
|
+
let listeners = this.#listeners.get(event);
|
|
138
|
+
if (!listeners) {
|
|
139
|
+
listeners = new Set();
|
|
140
|
+
this.#listeners.set(event, listeners);
|
|
141
|
+
}
|
|
142
|
+
listeners.add(listener);
|
|
143
|
+
return this;
|
|
144
|
+
}
|
|
145
|
+
off(event, listener) {
|
|
146
|
+
this.#listeners.get(event)?.delete(listener);
|
|
147
|
+
return this;
|
|
148
|
+
}
|
|
149
|
+
/** @internal One message from the phone. */
|
|
150
|
+
_receive(data) {
|
|
151
|
+
const message = parseRiveMessage(data);
|
|
152
|
+
if (!message)
|
|
153
|
+
return;
|
|
154
|
+
if (message.view_model)
|
|
155
|
+
this.#emit("view_model", message.view_model);
|
|
156
|
+
if (message.trigger)
|
|
157
|
+
this.#emit("trigger", message.trigger);
|
|
158
|
+
}
|
|
159
|
+
/** @internal The scene and latest values as untimed messages of at most 1 KB each. */
|
|
160
|
+
_replay() {
|
|
161
|
+
const messages = [];
|
|
162
|
+
if (this.#scene)
|
|
163
|
+
messages.push(encodeRiveMessage(this.#scene));
|
|
164
|
+
let batch = {};
|
|
165
|
+
for (const [name, value] of this.#values) {
|
|
166
|
+
const next = { ...batch, [name]: value };
|
|
167
|
+
try {
|
|
168
|
+
encodeRiveMessage({ view_model: next });
|
|
169
|
+
batch = next;
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
messages.push(encodeRiveMessage({ view_model: batch }));
|
|
173
|
+
batch = { [name]: value };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
if (Object.keys(batch).length)
|
|
177
|
+
messages.push(encodeRiveMessage({ view_model: batch }));
|
|
178
|
+
return messages;
|
|
179
|
+
}
|
|
180
|
+
#emit(event, ...args) {
|
|
181
|
+
for (const listener of this.#listeners.get(event) ?? []) {
|
|
182
|
+
try {
|
|
183
|
+
listener(...args);
|
|
184
|
+
}
|
|
185
|
+
catch { /* listeners own their failures */ }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const at = (timing) => (timing.at === undefined ? {} : { t: timing.at });
|
|
190
|
+
//# sourceMappingURL=rive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rive.js","sourceRoot":"","sources":["../../src/calls/rive.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CallRoom, CallRoomEndedFrame, CallRoomOptions, CallRoomStateFrame, Relay } from "../index.js";
|
|
2
2
|
import { type LocalVideoTrack, type RelayVideoReceiverStats, type RelayVideoSenderStats, RemoteVideoTrack, type TrackPublishOptions } from "./video.js";
|
|
3
3
|
import type { RelayVideoFactory } from "./video.js";
|
|
4
|
+
import { RelayRive } from "./rive.js";
|
|
4
5
|
export { LocalVideoTrack, RemoteVideoTrack, VideoBufferType, VideoCodec, VideoFrame, VideoRotation, VideoSource, VideoStream, type RelayVideoReceiverStats, type RelayVideoSenderStats, type TrackPublishOptions, type VideoEncoding, type VideoFrameEvent, type VideoStreamOptions, } from "./video.js";
|
|
5
6
|
export interface RelayAudioFrame {
|
|
6
7
|
/** Interleaved signed PCM16 samples. */
|
|
@@ -58,6 +59,23 @@ export interface RelayAudioSourceLike {
|
|
|
58
59
|
waitForDrain?(): Promise<void>;
|
|
59
60
|
/** Drop audio accepted but not yet written to RTP. */
|
|
60
61
|
clear?(): void;
|
|
62
|
+
/**
|
|
63
|
+
* The RTP timestamp of the next packet to be written, in milliseconds since
|
|
64
|
+
* the track's first packet (48 kHz clock, silence included).
|
|
65
|
+
*/
|
|
66
|
+
mediaTimeMs?(): number;
|
|
67
|
+
}
|
|
68
|
+
/** @internal */
|
|
69
|
+
export interface RelayDataChannelLike {
|
|
70
|
+
readonly readyState: string;
|
|
71
|
+
onopen?: (() => void) | null | undefined;
|
|
72
|
+
onclose?: (() => void) | null | undefined;
|
|
73
|
+
/** W3C `MessageEvent` shape; werift passes `{ data }` with a string or Buffer. */
|
|
74
|
+
onmessage?: ((event: {
|
|
75
|
+
data: unknown;
|
|
76
|
+
}) => void) | null | undefined;
|
|
77
|
+
send(data: string): void;
|
|
78
|
+
close(): void;
|
|
61
79
|
}
|
|
62
80
|
/** @internal */
|
|
63
81
|
export interface RelayAudioSinkLike {
|
|
@@ -111,6 +129,13 @@ export interface RelayPeerConnectionLike {
|
|
|
111
129
|
setRemoteDescription(description: RTCSessionDescriptionInit): Promise<void>;
|
|
112
130
|
addEventListener(type: "icegatheringstatechange", listener: () => void): void;
|
|
113
131
|
removeEventListener(type: "icegatheringstatechange", listener: () => void): void;
|
|
132
|
+
/** W3C `createDataChannel`; werift has it, the `wrtc` binding is not used for data. */
|
|
133
|
+
createDataChannel?(label: string, init: {
|
|
134
|
+
negotiated: true;
|
|
135
|
+
id: number;
|
|
136
|
+
ordered: boolean;
|
|
137
|
+
maxRetransmits: number;
|
|
138
|
+
}): RelayDataChannelLike;
|
|
114
139
|
/** W3C `getStats()`; the report is Map-like (werift `buildStatsReport`, libwebrtc `RTCStatsReport`). */
|
|
115
140
|
getStats?(): Promise<{
|
|
116
141
|
forEach(callback: (stat: Record<string, unknown>) => void): void;
|
|
@@ -347,6 +372,8 @@ type TransportListener<K extends TransportEvent> = (...args: TransportEventMap[K
|
|
|
347
372
|
* 5 s timer is the trigger that fires in practice.
|
|
348
373
|
*/
|
|
349
374
|
export declare const RESTART_CONNECT_TIMEOUT_MS = 5000;
|
|
375
|
+
/** How long `rive()` waits for the room to open the channel. */
|
|
376
|
+
export declare const RIVE_OPEN_TIMEOUT_MS = 10000;
|
|
350
377
|
export declare const RESTART_DISCONNECTED_MS = 7000;
|
|
351
378
|
export declare const RESTART_INITIAL_DELAY_MS = 250;
|
|
352
379
|
export declare const RESTART_BACKOFF_FACTOR = 1.1;
|
|
@@ -411,8 +438,14 @@ export declare class RelayCallTransport {
|
|
|
411
438
|
* frame resolves when it is queued, or when it is dropped: by `clearAudio()`,
|
|
412
439
|
* the Call ending, or `close()`. It never rejects, so an unawaited write
|
|
413
440
|
* cannot become an unhandled rejection.
|
|
441
|
+
*
|
|
442
|
+
* It resolves with where the frame's first sample sits on this agent's
|
|
443
|
+
* audio track, in the milliseconds Rive messages use for `at` (the RTP time
|
|
444
|
+
* sent plus what was queued ahead of it, measured when the frame is queued,
|
|
445
|
+
* so a held frame gets its real start), or `undefined` when the frame was
|
|
446
|
+
* dropped or the engine has no RTP clock.
|
|
414
447
|
*/
|
|
415
|
-
writeAudio(frame: RelayAudioFrame): Promise<
|
|
448
|
+
writeAudio(frame: RelayAudioFrame): Promise<number | undefined>;
|
|
416
449
|
/** Milliseconds of audio accepted by `writeAudio` but not yet written to RTP, held audio included. */
|
|
417
450
|
queuedAudioMs(): number;
|
|
418
451
|
/**
|
|
@@ -423,6 +456,29 @@ export declare class RelayCallTransport {
|
|
|
423
456
|
waitForPlayout(): Promise<void>;
|
|
424
457
|
/** Drop outgoing PCM that has not reached RTP, held audio included, and release `waitForPlayout()` callers. */
|
|
425
458
|
clearAudio(): void;
|
|
459
|
+
/**
|
|
460
|
+
* Where the next sample `writeAudio` accepts will sit on this agent's audio
|
|
461
|
+
* track, in milliseconds since the track's first RTP packet: the RTP time
|
|
462
|
+
* already sent plus everything queued. Read it just before `writeAudio` and
|
|
463
|
+
* add offsets inside that audio to time Rive messages (`at`). The track
|
|
464
|
+
* sends silence whenever nothing is queued, so the clock runs from connect
|
|
465
|
+
* and survives restarts. Audio held before the person receives this track
|
|
466
|
+
* starts later than this estimate, by the time the hold lasts; the value
|
|
467
|
+
* `writeAudio` resolves with is exact either way.
|
|
468
|
+
*/
|
|
469
|
+
audioTimeMs(): number;
|
|
470
|
+
/**
|
|
471
|
+
* Open this agent's `rive` data channel and resolve with its handle: set
|
|
472
|
+
* View Model values, fire triggers and switch files on the Rive the phone
|
|
473
|
+
* draws, timed against this agent's audio, and hear what the phone writes
|
|
474
|
+
* back. The same handle is returned on every call. After a restart the
|
|
475
|
+
* transport asks for the channel again on the new session and replays the
|
|
476
|
+
* scene and the latest values. Requires `connect()` and the werift engine;
|
|
477
|
+
* rejects after `timeoutMs` when the room opens no channel.
|
|
478
|
+
*/
|
|
479
|
+
rive(options?: {
|
|
480
|
+
timeoutMs?: number;
|
|
481
|
+
}): Promise<RelayRive>;
|
|
426
482
|
/**
|
|
427
483
|
* Resolves once `peerAudio` has fired (at once if it already has). Rejects
|
|
428
484
|
* after `timeoutMs`, or when the Call ends or the transport closes first.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/calls/transport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EAER,kBAAkB,EAElB,eAAe,EAGf,kBAAkB,EAElB,KAAK,EACN,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAE5B,KAAK,qBAAqB,EAC1B,gBAAgB,EAChB,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,WAAW,EACX,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AAIpB,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,mFAAmF;AACnF,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,CAAC;IACzB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,kFAAkF;AAClF,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,4CAA4C;IAC5C,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,gBAAgB;AAChB,MAAM,WAAW,oBAAoB;IACnC,WAAW,IAAI,yBAAyB,CAAC;IACzC,MAAM,CAAC,IAAI,EAAE;QACX,OAAO,EAAE,UAAU,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,EAAE,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,cAAc,EAAE,MAAM,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,mFAAmF;IACnF,KAAK,CAAC,IAAI,qBAAqB,CAAC;IAChC;;;;OAIG;IACH,KAAK,CAAC,IAAI,IAAI,CAAC;IACf,kHAAkH;IAClH,QAAQ,CAAC,IAAI,MAAM,CAAC;IACpB,8FAA8F;IAC9F,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,sDAAsD;IACtD,KAAK,CAAC,IAAI,IAAI,CAAC;CAChB;AAED,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;QACd,OAAO,EAAE,UAAU,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACnB,IAAI,IAAI,IAAI,CAAC;IACb,mFAAmF;IACnF,KAAK,CAAC,IAAI,mBAAmB,CAAC;CAC/B;AAED,gBAAgB;AAChB,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,IAAI,IAAI,CAAC;CACd;AAED,gBAAgB;AAChB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,gBAAgB;AAChB,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,iBAAiB,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACzD,uBAAuB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7C,2EAA2E;IAC3E,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,SAAS,CAAC,EAAE;YAAE,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,IAAI,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IACxF,yBAAyB,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/D,0BAA0B,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,yBAAyB,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC/F,cAAc,CACZ,KAAK,EAAE,yBAAyB,EAChC,IAAI,EAAE;QAAE,SAAS,EAAE,UAAU,CAAA;KAAE,GAC9B,uBAAuB,CAAC;IAC3B,WAAW,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;IAClD,YAAY,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACnD,mBAAmB,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,oBAAoB,CAAC,WAAW,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,gBAAgB,CAAC,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC9E,mBAAmB,CAAC,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjF,wGAAwG;IACxG,QAAQ,CAAC,IAAI,OAAO,CAAC;QAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;IAC3F,KAAK,IAAI,IAAI,CAAC;CACf;AAED,kFAAkF;AAClF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,OAAO,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB,KAAK,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,QAAQ,GAAG,cAAc,GAAG,OAAO,CAAC;AAErF,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACjD,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;CACrB;AAED,yDAAyD;AACzD,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,uBAAuB,CAGlE,CAAC;AAIH,iFAAiF;AACjF,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,kBAAkB,EAAE,uBAAuB,CAAC;CAC7C;AAED,kGAAkG;AAClG,MAAM,WAAW,kBAAmB,SAAQ,OAAO,CAAC,iBAAiB,CAAC;IACpE,oBAAoB,CAAC,MAAM,CAAC,EAAE,yBAAyB,GAAG,uBAAuB,CAAC;IAClF,iBAAiB,IAAI,oBAAoB,CAAC;IAC1C,eAAe,CAAC,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,uBAAuB,GAAG,kBAAkB,CAAC;CACxG;AAED,yFAAyF;AACzF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,CAAC;IAC5C,OAAO,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEhD,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,8DAA8D;IAC9D,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,gFAAgF;IAChF,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,GAAG,uBAAuB,CAAC;IACxD,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAC7C,gBAAgB;IAChB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uGAAuG;IACvG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC;;;;OAIG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC;AAED,oFAAoF;AACpF,MAAM,WAAW,2BAA2B;IAC1C,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,4DAA4D;AAC5D,MAAM,WAAW,4BAA4B;IAC3C,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,CAAC;IACzB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,UAAU,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC;AAED,uDAAuD;AACvD,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,wCAAwC;IACxC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,mFAAmF;AACnF,MAAM,WAAW,uBAAuB;IACtC,kDAAkD;IAClD,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,yFAAyF;IACzF,MAAM,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,yFAAyF;IACzF,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9F;;;;OAIG;IACH,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,2BAA2B,CAAC;IACrC,QAAQ,EAAE,4BAA4B,CAAC;IACvC,IAAI,EAAE,wBAAwB,CAAC;IAC/B,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,iBAAiB,GAAG;IACvB,KAAK,EAAE,CAAC,eAAe,CAAC,CAAC;IACzB,SAAS,EAAE,EAAE,CAAC;IACd,mFAAmF;IACnF,SAAS,EAAE,CAAC,qBAAqB,CAAC,CAAC;IACnC,SAAS,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAChC,2FAA2F;IAC3F,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC;IACvB;;;OAGG;IACH,eAAe,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACpC,oEAAoE;IACpE,iBAAiB,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,SAAS,EAAE,EAAE,CAAC;IACd,KAAK,EAAE,CAAC,kBAAkB,CAAC,CAAC;IAC5B,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;IACf,KAAK,EAAE,CAAC,4BAA4B,CAAC,CAAC;CACvC,CAAC;AAEF,KAAK,cAAc,GAAG,MAAM,iBAAiB,CAAC;AAC9C,KAAK,iBAAiB,CAAC,CAAC,SAAS,cAAc,IAAI,CAAC,GAAG,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AAO3F;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,KAAG,MACmD,CAAC;AAIrG,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM;CAK3C;AA4KD;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;;gBA6FjB,OAAO,EAAE,yBAAyB;IAmD9C,EAAE,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI;IAU5E,GAAG,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI;IAK7E;;;;;;OAMG;IACG,OAAO,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCpE,mFAAmF;IAC7E,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAOhC;;;OAGG;IACH,WAAW,IAAI,uBAAuB;IAiGtC;;;;;;;;;;;;;;;;;;OAkBG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BjD,sGAAsG;IACtG,aAAa,IAAI,MAAM;IAIvB;;;;OAIG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB/B,+GAA+G;IAC/G,UAAU,IAAI,IAAI;IAOlB;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD;;;;;OAKG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;;OAIG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IA8DpC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAK9B;;;;;;OAMG;IACG,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B5F;;;;OAIG;IACG,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,+DAA+D;IAC/D,IAAI,gBAAgB,IAAI,gBAAgB,GAAG,SAAS,CAEnD;IAED,qEAAqE;IACrE,UAAU,IAAI,mBAAmB;IAkBjC,GAAG,IAAI,IAAI;IAIX,KAAK,IAAI,IAAI;CA+lBd"}
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/calls/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/calls/transport.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RemoteVideoTrack, } from "./video.js";
|
|
2
|
+
import { RIVE_CHANNEL, RIVE_CHANNEL_OPTIONS, RelayRive } from "./rive.js";
|
|
2
3
|
export { LocalVideoTrack, RemoteVideoTrack, VideoBufferType, VideoCodec, VideoFrame, VideoRotation, VideoSource, VideoStream, } from "./video.js";
|
|
3
4
|
/** Opus's native rate and Relay's wire channel count. */
|
|
4
5
|
export const DEFAULT_INBOUND_AUDIO = Object.freeze({
|
|
@@ -21,6 +22,8 @@ const STALL_AFTER_MS = 2_000;
|
|
|
21
22
|
* 5 s timer is the trigger that fires in practice.
|
|
22
23
|
*/
|
|
23
24
|
export const RESTART_CONNECT_TIMEOUT_MS = 5_000;
|
|
25
|
+
/** How long `rive()` waits for the room to open the channel. */
|
|
26
|
+
export const RIVE_OPEN_TIMEOUT_MS = 10_000;
|
|
24
27
|
export const RESTART_DISCONNECTED_MS = 7_000;
|
|
25
28
|
export const RESTART_INITIAL_DELAY_MS = 250;
|
|
26
29
|
export const RESTART_BACKOFF_FACTOR = 1.1;
|
|
@@ -288,6 +291,12 @@ export class RelayCallTransport {
|
|
|
288
291
|
#addTrackPending = false;
|
|
289
292
|
#deferredOffer;
|
|
290
293
|
#lastAnswerSdp;
|
|
294
|
+
/** The agent's Rive handle, once `rive()` was called; kept across restarts. */
|
|
295
|
+
#rive;
|
|
296
|
+
/** The `rive` channel on the current peer. */
|
|
297
|
+
#riveChannel;
|
|
298
|
+
#riveChannelId;
|
|
299
|
+
#riveWaiters = new Set();
|
|
291
300
|
constructor(options) {
|
|
292
301
|
if (!options.callId.trim())
|
|
293
302
|
throw new Error("callId is required.");
|
|
@@ -527,6 +536,12 @@ export class RelayCallTransport {
|
|
|
527
536
|
* frame resolves when it is queued, or when it is dropped: by `clearAudio()`,
|
|
528
537
|
* the Call ending, or `close()`. It never rejects, so an unawaited write
|
|
529
538
|
* cannot become an unhandled rejection.
|
|
539
|
+
*
|
|
540
|
+
* It resolves with where the frame's first sample sits on this agent's
|
|
541
|
+
* audio track, in the milliseconds Rive messages use for `at` (the RTP time
|
|
542
|
+
* sent plus what was queued ahead of it, measured when the frame is queued,
|
|
543
|
+
* so a held frame gets its real start), or `undefined` when the frame was
|
|
544
|
+
* dropped or the engine has no RTP clock.
|
|
530
545
|
*/
|
|
531
546
|
writeAudio(frame) {
|
|
532
547
|
if (this.#closed)
|
|
@@ -548,8 +563,7 @@ export class RelayCallTransport {
|
|
|
548
563
|
channelCount: frame.channelCount,
|
|
549
564
|
};
|
|
550
565
|
if (this.subscribed && this.#heldAudio.length === 0) {
|
|
551
|
-
this.#writeAudio(captured, this.#audioGeneration);
|
|
552
|
-
return Promise.resolve();
|
|
566
|
+
return Promise.resolve(this.#writeAudio(captured, this.#audioGeneration));
|
|
553
567
|
}
|
|
554
568
|
return new Promise((resolve) => {
|
|
555
569
|
const ms = (captured.samples.length / captured.channelCount / captured.sampleRate) * 1000;
|
|
@@ -590,6 +604,130 @@ export class RelayCallTransport {
|
|
|
590
604
|
this.#audioSource?.clear?.();
|
|
591
605
|
this.#releasePlayoutWaiters();
|
|
592
606
|
}
|
|
607
|
+
/**
|
|
608
|
+
* Where the next sample `writeAudio` accepts will sit on this agent's audio
|
|
609
|
+
* track, in milliseconds since the track's first RTP packet: the RTP time
|
|
610
|
+
* already sent plus everything queued. Read it just before `writeAudio` and
|
|
611
|
+
* add offsets inside that audio to time Rive messages (`at`). The track
|
|
612
|
+
* sends silence whenever nothing is queued, so the clock runs from connect
|
|
613
|
+
* and survives restarts. Audio held before the person receives this track
|
|
614
|
+
* starts later than this estimate, by the time the hold lasts; the value
|
|
615
|
+
* `writeAudio` resolves with is exact either way.
|
|
616
|
+
*/
|
|
617
|
+
audioTimeMs() {
|
|
618
|
+
const source = this.#audioSource;
|
|
619
|
+
if (!source?.mediaTimeMs)
|
|
620
|
+
throw new RelayCallTransportError('This engine has no RTP audio clock; use the "werift" engine.');
|
|
621
|
+
return source.mediaTimeMs() + this.queuedAudioMs();
|
|
622
|
+
}
|
|
623
|
+
/**
|
|
624
|
+
* Open this agent's `rive` data channel and resolve with its handle: set
|
|
625
|
+
* View Model values, fire triggers and switch files on the Rive the phone
|
|
626
|
+
* draws, timed against this agent's audio, and hear what the phone writes
|
|
627
|
+
* back. The same handle is returned on every call. After a restart the
|
|
628
|
+
* transport asks for the channel again on the new session and replays the
|
|
629
|
+
* scene and the latest values. Requires `connect()` and the werift engine;
|
|
630
|
+
* rejects after `timeoutMs` when the room opens no channel.
|
|
631
|
+
*/
|
|
632
|
+
async rive(options = {}) {
|
|
633
|
+
if (this.#closed || this.#ended)
|
|
634
|
+
throw new RelayCallTransportError("Relay Call transport is closed.");
|
|
635
|
+
if (!this.#reportedConnected || !this.#peer)
|
|
636
|
+
throw new RelayCallTransportError("Relay Call transport is not connected.");
|
|
637
|
+
if (!this.#peer.createDataChannel || !this.#audioSource?.mediaTimeMs) {
|
|
638
|
+
throw new RelayCallTransportError('This engine cannot open the rive channel; use the "werift" engine.');
|
|
639
|
+
}
|
|
640
|
+
this.#rive ??= new RelayRive({
|
|
641
|
+
send: (text) => {
|
|
642
|
+
const channel = this.#riveChannel;
|
|
643
|
+
if (channel?.readyState !== "open")
|
|
644
|
+
return false;
|
|
645
|
+
try {
|
|
646
|
+
channel.send(text);
|
|
647
|
+
return true;
|
|
648
|
+
}
|
|
649
|
+
catch {
|
|
650
|
+
return false;
|
|
651
|
+
}
|
|
652
|
+
},
|
|
653
|
+
});
|
|
654
|
+
const rive = this.#rive;
|
|
655
|
+
if (this.#riveChannel?.readyState === "open")
|
|
656
|
+
return rive;
|
|
657
|
+
// One request per wait: callers that overlap share it; one after a timeout asks again.
|
|
658
|
+
if (this.#riveWaiters.size === 0)
|
|
659
|
+
this.#room.send({ type: RIVE_CHANNEL });
|
|
660
|
+
const timeoutMs = options.timeoutMs ?? RIVE_OPEN_TIMEOUT_MS;
|
|
661
|
+
await new Promise((resolve, reject) => {
|
|
662
|
+
const timer = setTimeout(() => {
|
|
663
|
+
this.#riveWaiters.delete(waiter);
|
|
664
|
+
reject(new RelayCallTransportError("Relay Call room opened no rive channel.", "rive_timeout"));
|
|
665
|
+
}, timeoutMs);
|
|
666
|
+
timer.unref?.();
|
|
667
|
+
const waiter = {
|
|
668
|
+
resolve: () => { clearTimeout(timer); this.#riveWaiters.delete(waiter); resolve(); },
|
|
669
|
+
reject: (error) => { clearTimeout(timer); this.#riveWaiters.delete(waiter); reject(error); },
|
|
670
|
+
};
|
|
671
|
+
this.#riveWaiters.add(waiter);
|
|
672
|
+
});
|
|
673
|
+
return rive;
|
|
674
|
+
}
|
|
675
|
+
/** The room created the channel on this peer's session: open its negotiated end. */
|
|
676
|
+
#openRiveChannel(frame) {
|
|
677
|
+
const peer = this.#peer;
|
|
678
|
+
const rive = this.#rive;
|
|
679
|
+
if (!peer?.createDataChannel || !rive || this.#closed || this.#ended)
|
|
680
|
+
return;
|
|
681
|
+
// Relay repeats the id for a repeated request: the open channel stays (closing it would free the id late).
|
|
682
|
+
const current = this.#riveChannel;
|
|
683
|
+
if (current && this.#riveChannelId === frame.id && current.readyState !== "closed" && current.readyState !== "closing")
|
|
684
|
+
return;
|
|
685
|
+
this.#closeRiveChannel();
|
|
686
|
+
this.#riveChannelId = frame.id;
|
|
687
|
+
const channel = peer.createDataChannel(RIVE_CHANNEL, {
|
|
688
|
+
negotiated: true,
|
|
689
|
+
id: frame.id,
|
|
690
|
+
...RIVE_CHANNEL_OPTIONS,
|
|
691
|
+
});
|
|
692
|
+
this.#riveChannel = channel;
|
|
693
|
+
const opened = () => {
|
|
694
|
+
if (this.#riveChannel !== channel)
|
|
695
|
+
return;
|
|
696
|
+
for (const text of rive._replay()) {
|
|
697
|
+
try {
|
|
698
|
+
channel.send(text);
|
|
699
|
+
}
|
|
700
|
+
catch { /* lossy by design */ }
|
|
701
|
+
}
|
|
702
|
+
for (const waiter of [...this.#riveWaiters])
|
|
703
|
+
waiter.resolve();
|
|
704
|
+
};
|
|
705
|
+
channel.onmessage = (event) => {
|
|
706
|
+
if (this.#riveChannel === channel)
|
|
707
|
+
rive._receive(event.data);
|
|
708
|
+
};
|
|
709
|
+
if (channel.readyState === "open")
|
|
710
|
+
opened();
|
|
711
|
+
else
|
|
712
|
+
channel.onopen = opened;
|
|
713
|
+
}
|
|
714
|
+
#closeRiveChannel() {
|
|
715
|
+
const channel = this.#riveChannel;
|
|
716
|
+
this.#riveChannel = undefined;
|
|
717
|
+
this.#riveChannelId = undefined;
|
|
718
|
+
if (!channel)
|
|
719
|
+
return;
|
|
720
|
+
channel.onopen = null;
|
|
721
|
+
channel.onmessage = null;
|
|
722
|
+
try {
|
|
723
|
+
channel.close();
|
|
724
|
+
}
|
|
725
|
+
catch { /* already closed */ }
|
|
726
|
+
}
|
|
727
|
+
#rejectRive(error) {
|
|
728
|
+
for (const waiter of [...this.#riveWaiters])
|
|
729
|
+
waiter.reject(error);
|
|
730
|
+
}
|
|
593
731
|
/**
|
|
594
732
|
* Resolves once `peerAudio` has fired (at once if it already has). Rejects
|
|
595
733
|
* after `timeoutMs`, or when the Call ends or the transport closes first.
|
|
@@ -657,10 +795,8 @@ export class RelayCallTransport {
|
|
|
657
795
|
#releaseHeldAudio() {
|
|
658
796
|
const held = this.#heldAudio.splice(0);
|
|
659
797
|
this.#heldAudioMs = 0;
|
|
660
|
-
for (const entry of held)
|
|
661
|
-
this.#writeAudio(entry.frame, this.#audioGeneration);
|
|
662
|
-
entry.resolve();
|
|
663
|
-
}
|
|
798
|
+
for (const entry of held)
|
|
799
|
+
entry.resolve(this.#writeAudio(entry.frame, this.#audioGeneration));
|
|
664
800
|
const waiters = this.#heldAudioWaiters.splice(0);
|
|
665
801
|
for (const waiter of waiters)
|
|
666
802
|
waiter();
|
|
@@ -670,7 +806,7 @@ export class RelayCallTransport {
|
|
|
670
806
|
const held = this.#heldAudio.splice(0);
|
|
671
807
|
this.#heldAudioMs = 0;
|
|
672
808
|
for (const entry of held)
|
|
673
|
-
entry.resolve();
|
|
809
|
+
entry.resolve(undefined);
|
|
674
810
|
const waiters = this.#heldAudioWaiters.splice(0);
|
|
675
811
|
for (const waiter of waiters)
|
|
676
812
|
waiter();
|
|
@@ -896,6 +1032,10 @@ export class RelayCallTransport {
|
|
|
896
1032
|
this.#roomOffers += 1;
|
|
897
1033
|
this.#queueNegotiation(() => this.#serverOffer(frame));
|
|
898
1034
|
});
|
|
1035
|
+
this.#room.on("rive", (frame) => {
|
|
1036
|
+
// Queued behind the establish offer's answer, so the SCTP transport exists.
|
|
1037
|
+
this.#queueNegotiation(async () => this.#openRiveChannel(frame));
|
|
1038
|
+
});
|
|
899
1039
|
this.#room.on("roomState", (frame) => {
|
|
900
1040
|
this.#roomStates += 1;
|
|
901
1041
|
this.#callStatus = frame.call?.status;
|
|
@@ -1003,6 +1143,9 @@ export class RelayCallTransport {
|
|
|
1003
1143
|
#serverError(frame) {
|
|
1004
1144
|
this.#roomErrors.push(frame.message);
|
|
1005
1145
|
const error = new RelayCallTransportError(frame.message, frame.code);
|
|
1146
|
+
// Relay refuses a rive channel with `media_unavailable` and keeps the call (Relay-Server #488).
|
|
1147
|
+
if (frame.code === "media_unavailable")
|
|
1148
|
+
this.#rejectRive(error);
|
|
1006
1149
|
this.#rejectReady(error);
|
|
1007
1150
|
this.#emit("error", error);
|
|
1008
1151
|
}
|
|
@@ -1023,6 +1166,9 @@ export class RelayCallTransport {
|
|
|
1023
1166
|
// Sent for every new session: the room re-pulls a restarted participant's
|
|
1024
1167
|
// tracks once it reports `connected` (PROTOCOL.md section 2).
|
|
1025
1168
|
this.#room.connected();
|
|
1169
|
+
// A new session has no rive channel: ask for it again.
|
|
1170
|
+
if (this.#rive && this.#reportedConnected)
|
|
1171
|
+
this.#room.send({ type: RIVE_CHANNEL });
|
|
1026
1172
|
if (!this.#reportedConnected) {
|
|
1027
1173
|
this.#reportedConnected = true;
|
|
1028
1174
|
this.#resolveReady();
|
|
@@ -1138,6 +1284,7 @@ export class RelayCallTransport {
|
|
|
1138
1284
|
this.#lastAnswerSdp = undefined;
|
|
1139
1285
|
this.#addTrackPending = false;
|
|
1140
1286
|
this.#deferredOffer = undefined;
|
|
1287
|
+
this.#closeRiveChannel();
|
|
1141
1288
|
this.#remoteVideoTrack?._detach();
|
|
1142
1289
|
this.#remoteVideoEngineTrack = undefined;
|
|
1143
1290
|
if (this.#remoteSink) {
|
|
@@ -1219,15 +1366,17 @@ export class RelayCallTransport {
|
|
|
1219
1366
|
if (!existing)
|
|
1220
1367
|
this.#emit("trackSubscribed", remote);
|
|
1221
1368
|
}
|
|
1369
|
+
/** Queues the frame and returns where it starts on the audio track (`audioTimeMs()` at that moment), or undefined when dropped. */
|
|
1222
1370
|
#writeAudio(frame, generation) {
|
|
1223
1371
|
const source = this.#audioSource;
|
|
1224
1372
|
if (!source || generation !== this.#audioGeneration)
|
|
1225
|
-
return;
|
|
1373
|
+
return undefined;
|
|
1374
|
+
const startMs = source.mediaTimeMs ? source.mediaTimeMs() + (source.queuedMs?.() ?? 0) : undefined;
|
|
1226
1375
|
const samplesPerChannel = (frame.sampleRate * AUDIO_SLICE_MS) / 1000;
|
|
1227
1376
|
const sliceSamples = samplesPerChannel * frame.channelCount;
|
|
1228
1377
|
for (let offset = 0; offset < frame.samples.length; offset += sliceSamples) {
|
|
1229
1378
|
if (this.#closed || generation !== this.#audioGeneration)
|
|
1230
|
-
return;
|
|
1379
|
+
return undefined;
|
|
1231
1380
|
const remaining = Math.min(sliceSamples, frame.samples.length - offset);
|
|
1232
1381
|
const samples = new Int16Array(sliceSamples);
|
|
1233
1382
|
samples.set(frame.samples.subarray(offset, offset + remaining));
|
|
@@ -1240,6 +1389,7 @@ export class RelayCallTransport {
|
|
|
1240
1389
|
});
|
|
1241
1390
|
this.#outboundFrames += 1;
|
|
1242
1391
|
}
|
|
1392
|
+
return startMs;
|
|
1243
1393
|
}
|
|
1244
1394
|
#releasePlayoutWaiters() {
|
|
1245
1395
|
for (const release of [...this.#playoutWaiters])
|
|
@@ -1372,6 +1522,8 @@ export class RelayCallTransport {
|
|
|
1372
1522
|
return { type, sdp: local.sdp };
|
|
1373
1523
|
}
|
|
1374
1524
|
#shutdownMedia() {
|
|
1525
|
+
this.#closeRiveChannel();
|
|
1526
|
+
this.#rejectRive(new RelayCallTransportError("Relay Call ended before the rive channel opened."));
|
|
1375
1527
|
this.#stopStallGuard();
|
|
1376
1528
|
this.#clearTimer("connect");
|
|
1377
1529
|
this.#clearTimer("disconnect");
|