@relaymessenger/livekit 0.1.0-staging.1 → 0.1.0-staging.10
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 +62 -10
- package/dist/engine-werift.d.ts +2 -0
- package/dist/engine-werift.d.ts.map +1 -1
- package/dist/engine-werift.js +175 -20
- package/dist/engine-werift.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/livekit.d.ts +43 -6
- package/dist/livekit.d.ts.map +1 -1
- package/dist/livekit.js +96 -27
- package/dist/livekit.js.map +1 -1
- package/dist/transport.d.ts +175 -9
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +596 -87
- package/dist/transport.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -39,10 +39,21 @@ async function answerCall(callId: string, session: AgentSession) {
|
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
`RelayLiveKitCall.connect()` does not resolve until the WebRTC media peer has
|
|
42
|
-
reached `connected`. `RelayAudioInput`
|
|
43
|
-
audio
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
reached `connected`. `RelayAudioInput` hands the AgentSession the remote
|
|
43
|
+
participant's audio as 24 kHz mono PCM16 frames, the format of LiveKit's own
|
|
44
|
+
room input; the Opus decoder produces that format directly.
|
|
45
|
+
|
|
46
|
+
`RelayAudioOutput` has the shape of LiveKit's own `ParticipantAudioOutput`:
|
|
47
|
+
`captureFrame()` hands the frame to the transport and returns at once, so the
|
|
48
|
+
AgentSession may push a whole reply faster than real time; the engine's 20 ms
|
|
49
|
+
pump paces the wire. `flush()` closes the segment and reports
|
|
50
|
+
`playbackFinished` only after the transport has drained. `clearBuffer()` drops
|
|
51
|
+
audio that has not reached the wire and reports the segment as interrupted at
|
|
52
|
+
the position that actually played.
|
|
53
|
+
|
|
54
|
+
On the transport, `writeAudio()` resolves once its 10 ms slices are queued,
|
|
55
|
+
`queuedAudioMs()` is what has not left yet, and `waitForPlayout()` resolves when
|
|
56
|
+
the queue is empty and the pump is idle (early on `clearAudio()`).
|
|
46
57
|
|
|
47
58
|
Use `setMuted(true)` to publish participant mute state, `end()` to end the Relay
|
|
48
59
|
Call, and `close()` for local cleanup. If the signaling connection is replaced,
|
|
@@ -63,6 +74,9 @@ const transport = new RelayCallTransport({ room });
|
|
|
63
74
|
transport.on("audio", ({ samples, sampleRate, channelCount }) => {
|
|
64
75
|
// Interleaved signed PCM16 from the remote Relay participant.
|
|
65
76
|
});
|
|
77
|
+
// Inbound audio is 48 kHz stereo unless you pass
|
|
78
|
+
// `inboundAudio: { sampleRate: 8000 | 12000 | 16000 | 24000 | 48000, channelCount: 1 | 2 }`;
|
|
79
|
+
// the `"wrtc"` engine accepts only the default.
|
|
66
80
|
|
|
67
81
|
await transport.connect();
|
|
68
82
|
await transport.writeAudio({
|
|
@@ -70,6 +84,7 @@ await transport.writeAudio({
|
|
|
70
84
|
sampleRate: 48_000,
|
|
71
85
|
channelCount: 1,
|
|
72
86
|
});
|
|
87
|
+
await transport.waitForPlayout();
|
|
73
88
|
```
|
|
74
89
|
|
|
75
90
|
## ICE servers, TURN, and diagnostics
|
|
@@ -96,19 +111,56 @@ const call = await RelayLiveKitCall.connect({
|
|
|
96
111
|
},
|
|
97
112
|
],
|
|
98
113
|
iceTransportPolicy: "all",
|
|
99
|
-
mediaConnectTimeoutMs: 15_000,
|
|
100
114
|
});
|
|
101
115
|
```
|
|
102
116
|
|
|
103
|
-
`
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
`
|
|
117
|
+
`iceServers` may also be a function; it is called before every peer
|
|
118
|
+
connection, so it can mint fresh TURN credentials for each restart.
|
|
119
|
+
|
|
120
|
+
`connect()` resolves when media first reaches `connected`. It has no overall
|
|
121
|
+
deadline: when an SFU session is not `connected` within
|
|
122
|
+
`sessionConnectTimeoutMs` (5 seconds by default) of its answer, becomes
|
|
123
|
+
`failed`, or stays `disconnected` for 7 seconds, the transport closes that
|
|
124
|
+
peer, waits 250 ms (x1.1 per further attempt, at most 10 s), and publishes
|
|
125
|
+
from a new peer on a new session, for as long as the Call is ringing or in
|
|
126
|
+
progress. Outgoing audio keeps flowing into the new peer. `connect()` rejects
|
|
127
|
+
only when the Call ends, the room or transport closes, the room reports an
|
|
128
|
+
error, or the `signal` passed to it aborts. Each replacement emits
|
|
129
|
+
`restarted` with the reason and the replaced session's summary, for example
|
|
130
|
+
`local: host 2, srflx 0, relay 0; remote: udp 1473; states: new→complete 0.2s, connecting 0.3s, no connected; …`,
|
|
131
|
+
and `diagnostics().restarts` counts them. `mediaConnectTimeoutMs` and
|
|
132
|
+
`connectionTimeoutMs` are deprecated names for `sessionConnectTimeoutMs`.
|
|
133
|
+
|
|
134
|
+
`call.waitForPeerAudio(timeoutMs)` resolves once the person's audio has
|
|
135
|
+
arrived and the room shows them connected (the transport's `peerAudio` event);
|
|
136
|
+
start the agent's session after it so the first words are heard.
|
|
137
|
+
|
|
107
138
|
The same facts are available at any time from `call.diagnostics()` or
|
|
108
139
|
`transport.diagnostics()`: local candidate counts by type, the remote
|
|
109
140
|
candidates' transport and port (never their address), the ICE gathering, ICE
|
|
110
141
|
connection and peer connection state changes with their offsets from
|
|
111
|
-
`connect()`,
|
|
142
|
+
`connect()`, packet counts in both directions (`inbound`: RTP received, Opus
|
|
143
|
+
decode failures, PCM frames delivered, first and last packet offsets, packets
|
|
144
|
+
in the last 5 s; `outbound`: PCM frames accepted, Opus packets, RTP written
|
|
145
|
+
with the caller's audio, RTP written with silence, first and last packet
|
|
146
|
+
offsets, packets in the last 5 s, paced queue size, pacer state), the room frames seen (`roomState` count, pull `offer` count,
|
|
147
|
+
`ended` reason, `error` messages), and the one-line `summary`, for example
|
|
148
|
+
`…; in: 1234 rtp, 0 bad, 1234 frames, first 0.9s last 41.2s, 250/5s; out: 2600 frames, 1300 opus, 1300 rtp, silence 700, first 1.1s last 41.0s, 250/5s, queue 0, pacer alive; room: 3 roomState, 1 offer`.
|
|
149
|
+
Packet counts come from the `werift` engine; `wrtc` reports zero packets and
|
|
150
|
+
`pacer n/a`.
|
|
151
|
+
|
|
152
|
+
Like a live microphone, the `werift` engine's published track sends one Opus
|
|
153
|
+
packet every 20 ms from the moment media connects until the transport closes:
|
|
154
|
+
the caller's audio when some is queued, Opus silence otherwise. Cloudflare's
|
|
155
|
+
SFU will not let the person's side pull a track that has carried no RTP, so a
|
|
156
|
+
silent agent track would never be heard. Silence never counts toward
|
|
157
|
+
`queuedAudioMs()` or `waitForPlayout()`. The `wrtc` engine sends only the
|
|
158
|
+
audio written to it; write silence yourself if you use it.
|
|
159
|
+
|
|
160
|
+
`onWarning` is called once per call, with the summary, when outbound audio is
|
|
161
|
+
queued but no RTP packet has been written for 2 s while media is connected.
|
|
162
|
+
Nothing is restarted; the callback exists so the failing direction is named in
|
|
163
|
+
the agent's logs.
|
|
112
164
|
|
|
113
165
|
`RelayCallTransport` consumes the SDK's `CallRoom`; it does not duplicate the
|
|
114
166
|
room protocol. The default engine is `werift` (pure TypeScript WebRTC) with
|
package/dist/engine-werift.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export declare const WERIFT_CHANNEL_COUNT = 2;
|
|
|
6
6
|
/** One RTP packet carries 20 ms: 960 frames at 48 kHz, timestamp advances by 960. */
|
|
7
7
|
export declare const WERIFT_PACKET_MS = 20;
|
|
8
8
|
export type WeriftAudioSourceData = Parameters<RelayAudioSourceLike["onData"]>[0];
|
|
9
|
+
/** Packets counted for `diagnostics()`; the recent window is the last 5 s. */
|
|
10
|
+
export declare const STATS_WINDOW_MS = 5000;
|
|
9
11
|
/** Convert any PCM16 frame to interleaved 48 kHz stereo by linear interpolation. */
|
|
10
12
|
export declare const toWireFormat: (data: {
|
|
11
13
|
samples: Int16Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-werift.d.ts","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"engine-werift.d.ts","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"AAqCA,OAAO,EAGL,iBAAiB,EAIlB,MAAM,QAAQ,CAAC;AAChB,OAAO,KAAK,EAGV,oBAAoB,EAIpB,yBAAyB,EAEzB,kBAAkB,EACnB,MAAM,gBAAgB,CAAC;AAExB,sGAAsG;AACtG,eAAO,MAAM,kBAAkB,QAAS,CAAC;AACzC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAMnC,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAElF,8EAA8E;AAC9E,eAAO,MAAM,eAAe,OAAQ,CAAC;AA8BrC,oFAAoF;AACpF,eAAO,MAAM,YAAY,GAAI,MAAM;IACjC,OAAO,EAAE,UAAU,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB,KAAG,UAwBH,CAAC;AAwPF,eAAO,MAAM,0BAA0B,GACrC,SAAQ,yBAAyE,KAChF,iBAeC,CAAC;AAEL,eAAO,MAAM,yBAAyB,QAAO,kBAI3C,CAAC"}
|
package/dist/engine-werift.js
CHANGED
|
@@ -21,7 +21,11 @@
|
|
|
21
21
|
* offsets sequenceNumber/timestamp, so the local track starts both at 0.
|
|
22
22
|
* - ../../rtp/src/codec/opus.d.ts: `OpusRtpPayload.deSerialize(buffer)`.
|
|
23
23
|
* - node_modules/@evan/opus/lib.d.ts: `Encoder.encode(pcm16)` returns one Opus
|
|
24
|
-
* packet; `Decoder.decode(packet)` returns interleaved PCM16 bytes
|
|
24
|
+
* packet; `Decoder.decode(packet)` returns interleaved PCM16 bytes;
|
|
25
|
+
* `new Decoder({ channels?: 1 | 2, sample_rate?: 8000 | 12000 | 16000 |
|
|
26
|
+
* 24000 | 48000 })` decodes any Opus stream to that count and rate (libopus
|
|
27
|
+
* `opus_decoder_create(Fs, channels)`), which is how the sink honours
|
|
28
|
+
* `RelayInboundAudioFormat`.
|
|
25
29
|
* Participant shapes copied from the headless phone that joined Relay's room
|
|
26
30
|
* through Cloudflare's SFU on 2026-09-21 (_runtime/bin/headless-phone-webrtc.mjs
|
|
27
31
|
* lines 93-160): `bundlePolicy: "max-bundle", iceServers: []` (Cloudflare
|
|
@@ -41,6 +45,34 @@ const PACKET_FRAMES = (WERIFT_SAMPLE_RATE * WERIFT_PACKET_MS) / 1000;
|
|
|
41
45
|
const PACKET_SAMPLES = PACKET_FRAMES * WERIFT_CHANNEL_COUNT;
|
|
42
46
|
/** Dynamic payload type; werift's sender replaces it with the negotiated one. */
|
|
43
47
|
const LOCAL_PAYLOAD_TYPE = 111;
|
|
48
|
+
/** Packets counted for `diagnostics()`; the recent window is the last 5 s. */
|
|
49
|
+
export const STATS_WINDOW_MS = 5_000;
|
|
50
|
+
/** Monotone packet counter with first/last epoch timestamps and a 5 s window. */
|
|
51
|
+
class PacketClock {
|
|
52
|
+
count = 0;
|
|
53
|
+
firstAt;
|
|
54
|
+
lastAt;
|
|
55
|
+
#recent = [];
|
|
56
|
+
mark(now = Date.now()) {
|
|
57
|
+
this.count += 1;
|
|
58
|
+
this.firstAt ??= now;
|
|
59
|
+
this.lastAt = now;
|
|
60
|
+
this.#recent.push(now);
|
|
61
|
+
this.#prune(now);
|
|
62
|
+
}
|
|
63
|
+
recent(now = Date.now()) {
|
|
64
|
+
this.#prune(now);
|
|
65
|
+
return this.#recent.length;
|
|
66
|
+
}
|
|
67
|
+
#prune(now) {
|
|
68
|
+
const floor = now - STATS_WINDOW_MS;
|
|
69
|
+
let drop = 0;
|
|
70
|
+
while (drop < this.#recent.length && this.#recent[drop] < floor)
|
|
71
|
+
drop += 1;
|
|
72
|
+
if (drop)
|
|
73
|
+
this.#recent.splice(0, drop);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
44
76
|
/** Convert any PCM16 frame to interleaved 48 kHz stereo by linear interpolation. */
|
|
45
77
|
export const toWireFormat = (data) => {
|
|
46
78
|
const { samples, sampleRate, channelCount } = data;
|
|
@@ -69,8 +101,21 @@ export const toWireFormat = (data) => {
|
|
|
69
101
|
};
|
|
70
102
|
/**
|
|
71
103
|
* PCM16 in, paced 20 ms Opus RTP out. Frames are accumulated into whole
|
|
72
|
-
* packets; a timer
|
|
73
|
-
* cadence regardless of how the adapter chunks its writes.
|
|
104
|
+
* packets; a timer writes one packet every 20 ms so the wire sees a steady
|
|
105
|
+
* cadence regardless of how the adapter chunks its writes. Adapters may push
|
|
106
|
+
* far ahead of real time: `queuedMs()` is what has not left yet and
|
|
107
|
+
* `waitForDrain()` resolves once the queued application audio has been
|
|
108
|
+
* written (LiveKit's `AudioSource.queuedDuration` / `waitForPlayout` shape).
|
|
109
|
+
*
|
|
110
|
+
* From `start()` (the transport calls it when the peer first connects) until
|
|
111
|
+
* the track stops, the pump never pauses: a tick with no application audio
|
|
112
|
+
* queued writes an Opus silence frame instead, as a live microphone track
|
|
113
|
+
* does. Cloudflare's SFU refuses to pull a published track that has carried
|
|
114
|
+
* no RTP: `tracks/new` for the remote track returned `empty_track_error` "No
|
|
115
|
+
* track data from remote peer" after about 8.2 s on staging 2026-09-22, and
|
|
116
|
+
* the same pull returned in about 470 ms with silence flowing. Silence and
|
|
117
|
+
* application packets share one sequence and timestamp line, so queued audio
|
|
118
|
+
* replaces silence on the next tick with no gap and no jump.
|
|
74
119
|
*/
|
|
75
120
|
class WeriftAudioSource {
|
|
76
121
|
#encoder = new Encoder({
|
|
@@ -78,26 +123,69 @@ class WeriftAudioSource {
|
|
|
78
123
|
sample_rate: WERIFT_SAMPLE_RATE,
|
|
79
124
|
application: "voip",
|
|
80
125
|
});
|
|
126
|
+
/** 20 ms of digital silence, encoded once by the same encoder and reused. */
|
|
127
|
+
#silence = Buffer.from(this.#encoder.encode(new Int16Array(PACKET_SAMPLES)));
|
|
81
128
|
#track = new MediaStreamTrack({ kind: "audio", id: "microphone", streamId: "relay-call" });
|
|
82
129
|
#packets = [];
|
|
130
|
+
/** Every RTP packet written, silence included. */
|
|
131
|
+
#rtp = new PacketClock();
|
|
132
|
+
#opusPackets = 0;
|
|
133
|
+
#applicationRtpPackets = 0;
|
|
134
|
+
#silencePackets = 0;
|
|
83
135
|
#pending = new Int16Array(0);
|
|
84
136
|
#sequenceNumber = 1;
|
|
85
137
|
#timestamp = 0;
|
|
86
138
|
#first = true;
|
|
87
139
|
#pump;
|
|
140
|
+
#started = false;
|
|
88
141
|
#stopped = false;
|
|
142
|
+
#drainWaiters = new Set();
|
|
143
|
+
stats() {
|
|
144
|
+
return {
|
|
145
|
+
opusPackets: this.#opusPackets,
|
|
146
|
+
rtpPackets: this.#applicationRtpPackets,
|
|
147
|
+
silencePackets: this.#silencePackets,
|
|
148
|
+
firstRtpAt: this.#rtp.firstAt,
|
|
149
|
+
lastRtpAt: this.#rtp.lastAt,
|
|
150
|
+
recentRtpPackets: this.#rtp.recent(),
|
|
151
|
+
queued: this.#packets.length,
|
|
152
|
+
pacerAlive: this.#pump !== undefined,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
89
155
|
createTrack() {
|
|
90
156
|
const track = this.#track;
|
|
91
157
|
const stop = track.stop;
|
|
92
158
|
track.stop = () => {
|
|
93
159
|
this.#stopped = true;
|
|
94
|
-
this
|
|
95
|
-
this.#pending = new Int16Array(0);
|
|
160
|
+
this.clear();
|
|
96
161
|
this.#stopPump();
|
|
97
162
|
stop();
|
|
98
163
|
};
|
|
99
164
|
return track;
|
|
100
165
|
}
|
|
166
|
+
start() {
|
|
167
|
+
if (this.#started || this.#stopped)
|
|
168
|
+
return;
|
|
169
|
+
this.#started = true;
|
|
170
|
+
this.#startPump();
|
|
171
|
+
}
|
|
172
|
+
queuedMs() {
|
|
173
|
+
return this.#packets.length * WERIFT_PACKET_MS
|
|
174
|
+
+ (this.#pending.length / WERIFT_CHANNEL_COUNT / WERIFT_SAMPLE_RATE) * 1_000;
|
|
175
|
+
}
|
|
176
|
+
waitForDrain() {
|
|
177
|
+
this.#flushPending();
|
|
178
|
+
if (this.#drained())
|
|
179
|
+
return Promise.resolve();
|
|
180
|
+
return new Promise((resolve) => this.#drainWaiters.add(resolve));
|
|
181
|
+
}
|
|
182
|
+
clear() {
|
|
183
|
+
this.#packets.length = 0;
|
|
184
|
+
this.#pending = new Int16Array(0);
|
|
185
|
+
if (!this.#started)
|
|
186
|
+
this.#stopPump();
|
|
187
|
+
this.#notifyDrained();
|
|
188
|
+
}
|
|
101
189
|
onData(data) {
|
|
102
190
|
if (this.#stopped)
|
|
103
191
|
return;
|
|
@@ -109,21 +197,56 @@ class WeriftAudioSource {
|
|
|
109
197
|
while (merged.length - offset >= PACKET_SAMPLES) {
|
|
110
198
|
const frame = merged.subarray(offset, offset + PACKET_SAMPLES);
|
|
111
199
|
this.#packets.push(Buffer.from(this.#encoder.encode(frame)));
|
|
200
|
+
this.#opusPackets += 1;
|
|
112
201
|
offset += PACKET_SAMPLES;
|
|
113
202
|
}
|
|
114
203
|
this.#pending = merged.slice(offset);
|
|
115
204
|
this.#startPump();
|
|
116
205
|
}
|
|
206
|
+
/** Pad a sub-packet remainder with silence so the tail of a segment reaches the wire. */
|
|
207
|
+
#flushPending() {
|
|
208
|
+
if (this.#stopped || this.#pending.length === 0)
|
|
209
|
+
return;
|
|
210
|
+
const padded = new Int16Array(PACKET_SAMPLES);
|
|
211
|
+
padded.set(this.#pending);
|
|
212
|
+
this.#pending = new Int16Array(0);
|
|
213
|
+
this.#packets.push(Buffer.from(this.#encoder.encode(padded)));
|
|
214
|
+
this.#opusPackets += 1;
|
|
215
|
+
this.#startPump();
|
|
216
|
+
}
|
|
217
|
+
/** Application audio only: the silence the started pump keeps writing never counts. */
|
|
218
|
+
#drained() {
|
|
219
|
+
return this.#packets.length === 0
|
|
220
|
+
&& this.#pending.length === 0
|
|
221
|
+
&& (this.#started || this.#pump === undefined);
|
|
222
|
+
}
|
|
223
|
+
#notifyDrained() {
|
|
224
|
+
if (!this.#drained())
|
|
225
|
+
return;
|
|
226
|
+
for (const resolve of [...this.#drainWaiters]) {
|
|
227
|
+
this.#drainWaiters.delete(resolve);
|
|
228
|
+
resolve();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The first packet of a run leaves at once; every later one waits for the
|
|
233
|
+
* 20 ms tick, so a burst pushed faster than real time reaches the wire at
|
|
234
|
+
* packet cadence. Before `start()` the interval stops once the queue is
|
|
235
|
+
* empty; after it, the interval runs until the track stops.
|
|
236
|
+
*/
|
|
117
237
|
#startPump() {
|
|
118
|
-
if (this.#pump || this.#
|
|
238
|
+
if (this.#pump || this.#stopped)
|
|
119
239
|
return;
|
|
120
|
-
this.#
|
|
121
|
-
if (this.#packets.length === 0)
|
|
240
|
+
if (!this.#started && this.#packets.length === 0)
|
|
122
241
|
return;
|
|
242
|
+
this.#sendNext();
|
|
123
243
|
this.#pump = setInterval(() => {
|
|
124
244
|
this.#sendNext();
|
|
125
|
-
if (this.#packets.length === 0)
|
|
126
|
-
this.#
|
|
245
|
+
if (this.#packets.length === 0) {
|
|
246
|
+
if (!this.#started)
|
|
247
|
+
this.#stopPump();
|
|
248
|
+
this.#notifyDrained();
|
|
249
|
+
}
|
|
127
250
|
}, WERIFT_PACKET_MS);
|
|
128
251
|
this.#pump.unref?.();
|
|
129
252
|
}
|
|
@@ -134,8 +257,10 @@ class WeriftAudioSource {
|
|
|
134
257
|
this.#pump = undefined;
|
|
135
258
|
}
|
|
136
259
|
#sendNext() {
|
|
137
|
-
|
|
138
|
-
|
|
260
|
+
if (this.#stopped)
|
|
261
|
+
return;
|
|
262
|
+
const application = this.#packets.shift();
|
|
263
|
+
if (!application && !this.#started)
|
|
139
264
|
return;
|
|
140
265
|
const header = new RtpHeader({
|
|
141
266
|
payloadType: LOCAL_PAYLOAD_TYPE,
|
|
@@ -147,16 +272,35 @@ class WeriftAudioSource {
|
|
|
147
272
|
this.#first = false;
|
|
148
273
|
this.#sequenceNumber = (this.#sequenceNumber + 1) & 0xffff;
|
|
149
274
|
this.#timestamp = (this.#timestamp + PACKET_FRAMES) >>> 0;
|
|
150
|
-
this.#track.writeRtp(new RtpPacket(header,
|
|
275
|
+
this.#track.writeRtp(new RtpPacket(header, application ?? this.#silence));
|
|
276
|
+
if (application)
|
|
277
|
+
this.#applicationRtpPackets += 1;
|
|
278
|
+
else
|
|
279
|
+
this.#silencePackets += 1;
|
|
280
|
+
this.#rtp.mark();
|
|
151
281
|
}
|
|
152
282
|
}
|
|
153
|
-
/** Opus RTP in, PCM16 (48 kHz stereo) out, one `ondata` per packet. */
|
|
283
|
+
/** Opus RTP in, PCM16 in the requested format (default 48 kHz stereo) out, one `ondata` per packet. */
|
|
154
284
|
class WeriftAudioSink {
|
|
155
285
|
ondata = null;
|
|
156
|
-
#decoder
|
|
286
|
+
#decoder;
|
|
287
|
+
#rtp = new PacketClock();
|
|
288
|
+
#decodeFailures = 0;
|
|
157
289
|
#unsubscribe;
|
|
158
|
-
|
|
290
|
+
stats() {
|
|
291
|
+
return {
|
|
292
|
+
rtpPackets: this.#rtp.count,
|
|
293
|
+
decodeFailures: this.#decodeFailures,
|
|
294
|
+
firstRtpAt: this.#rtp.firstAt,
|
|
295
|
+
lastRtpAt: this.#rtp.lastAt,
|
|
296
|
+
recentRtpPackets: this.#rtp.recent(),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
constructor(track, format = { sampleRate: WERIFT_SAMPLE_RATE, channelCount: WERIFT_CHANNEL_COUNT }) {
|
|
300
|
+
const { sampleRate, channelCount } = format;
|
|
301
|
+
this.#decoder = new Decoder({ channels: channelCount, sample_rate: sampleRate });
|
|
159
302
|
const { unSubscribe } = track.onReceiveRtp.subscribe((rtp) => {
|
|
303
|
+
this.#rtp.mark();
|
|
160
304
|
const handler = this.ondata;
|
|
161
305
|
if (!handler || !rtp.payload?.length)
|
|
162
306
|
return;
|
|
@@ -166,16 +310,17 @@ class WeriftAudioSink {
|
|
|
166
310
|
bytes = this.#decoder.decode(packet.payload);
|
|
167
311
|
}
|
|
168
312
|
catch {
|
|
313
|
+
this.#decodeFailures += 1;
|
|
169
314
|
return;
|
|
170
315
|
}
|
|
171
316
|
const samples = new Int16Array(bytes.byteLength >> 1);
|
|
172
317
|
new Uint8Array(samples.buffer).set(bytes.subarray(0, samples.byteLength));
|
|
173
318
|
handler({
|
|
174
319
|
samples,
|
|
175
|
-
sampleRate
|
|
320
|
+
sampleRate,
|
|
176
321
|
bitsPerSample: 16,
|
|
177
|
-
channelCount
|
|
178
|
-
numberOfFrames: samples.length /
|
|
322
|
+
channelCount,
|
|
323
|
+
numberOfFrames: samples.length / channelCount,
|
|
179
324
|
});
|
|
180
325
|
});
|
|
181
326
|
this.#unsubscribe = unSubscribe;
|
|
@@ -185,6 +330,15 @@ class WeriftAudioSink {
|
|
|
185
330
|
this.#unsubscribe();
|
|
186
331
|
}
|
|
187
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Video codecs the peer can accept in a pull offer. Nothing decodes video: the
|
|
335
|
+
* transport only answers the person's `video` m-line receive-only and ignores
|
|
336
|
+
* the track (PROTOCOL.md section 5). werift matches a remote codec by MIME
|
|
337
|
+
* type alone (`findCodecByMimeType` in `TransceiverManager.setRemoteRTP`) and
|
|
338
|
+
* throws "negotiate codecs failed." for a media section with no local codec
|
|
339
|
+
* of its kind, so an audio-only codec list cannot answer a video m-line.
|
|
340
|
+
*/
|
|
341
|
+
const RECEIVE_VIDEO_MIME_TYPES = ["video/VP8", "video/VP9", "video/H264", "video/AV1"];
|
|
188
342
|
export const createWeriftPeerConnection = (config = { iceServers: [], iceTransportPolicy: "all" }) => new RTCPeerConnection({
|
|
189
343
|
bundlePolicy: "max-bundle",
|
|
190
344
|
iceServers: config.iceServers,
|
|
@@ -197,11 +351,12 @@ export const createWeriftPeerConnection = (config = { iceServers: [], iceTranspo
|
|
|
197
351
|
channels: WERIFT_CHANNEL_COUNT,
|
|
198
352
|
}),
|
|
199
353
|
],
|
|
354
|
+
video: RECEIVE_VIDEO_MIME_TYPES.map((mimeType) => new RTCRtpCodecParameters({ mimeType, clockRate: 90_000 })),
|
|
200
355
|
},
|
|
201
356
|
});
|
|
202
357
|
export const createWeriftWebRTCFactory = () => ({
|
|
203
358
|
createPeerConnection: (config) => createWeriftPeerConnection(config),
|
|
204
359
|
createAudioSource: () => new WeriftAudioSource(),
|
|
205
|
-
createAudioSink: (track) => new WeriftAudioSink(track),
|
|
360
|
+
createAudioSink: (track, format) => new WeriftAudioSink(track, format),
|
|
206
361
|
});
|
|
207
362
|
//# sourceMappingURL=engine-werift.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine-werift.js","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"engine-werift.js","sourceRoot":"","sources":["../src/engine-werift.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RelayAudioInput, RelayAudioOutput, RelayLiveKitCall, createRelayLiveKitAudio, type RelayLiveKitAudio, type RelayLiveKitAudioOptions, type RelayLiveKitConnectOptions, } from "./livekit.js";
|
|
2
|
-
export { RelayCallTransport, RelayCallTransportError, type RelayAudioFrame, type RelayCallEngine, type RelayCallIceDiagnostics, type RelayCallTransportCloseEvent, type RelayCallTransportOptions, type RelayIceServer, type RelayIceTransportPolicy, } from "./transport.js";
|
|
1
|
+
export { RelayAudioInput, RelayAudioOutput, LIVEKIT_ROOM_INPUT_AUDIO, RelayLiveKitCall, createRelayLiveKitAudio, type RelayLiveKitAudio, type RelayLiveKitAudioOptions, type RelayLiveKitConnectOptions, } from "./livekit.js";
|
|
2
|
+
export { RelayCallTransport, RelayCallTransportError, type RelayAudioFrame, type RelayCallEngine, type RelayCallIceDiagnostics, type RelayCallInboundDiagnostics, type RelayCallOutboundDiagnostics, type RelayCallRestartEvent, type RelayCallRestartReason, type RelayCallRoomDiagnostics, type RelayCallTransportCloseEvent, type RelayCallTransportOptions, type RelayIceServer, type RelayIceServersProvider, type RelayIceTransportPolicy, type RelayInboundAudioFormat, } from "./transport.js";
|
|
3
3
|
export { createWeriftWebRTCFactory } from "./engine-werift.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,GAChC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { RelayAudioInput, RelayAudioOutput, RelayLiveKitCall, createRelayLiveKitAudio, } from "./livekit.js";
|
|
1
|
+
export { RelayAudioInput, RelayAudioOutput, LIVEKIT_ROOM_INPUT_AUDIO, RelayLiveKitCall, createRelayLiveKitAudio, } from "./livekit.js";
|
|
2
2
|
export { RelayCallTransport, RelayCallTransportError, } from "./transport.js";
|
|
3
3
|
export { createWeriftWebRTCFactory } from "./engine-werift.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,wBAAwB,EACxB,gBAAgB,EAChB,uBAAuB,GAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GAexB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/livekit.d.ts
CHANGED
|
@@ -2,7 +2,18 @@ import { AudioInput, AudioOutput, type AgentSession } from "@livekit/agents";
|
|
|
2
2
|
import { AudioFrame } from "@livekit/rtc-node";
|
|
3
3
|
import type Relay from "@relaymessenger/sdk";
|
|
4
4
|
import type { CallRoomOptions } from "@relaymessenger/sdk";
|
|
5
|
-
import { RelayCallTransport, type RelayCallIceDiagnostics, type RelayIceServer, type RelayIceTransportPolicy } from "./transport.js";
|
|
5
|
+
import { RelayCallTransport, type RelayCallIceDiagnostics, type RelayIceServer, type RelayIceServersProvider, type RelayInboundAudioFormat, type RelayIceTransportPolicy } from "./transport.js";
|
|
6
|
+
/**
|
|
7
|
+
* The format LiveKit's own room input hands an AgentSession:
|
|
8
|
+
* `@livekit/agents` dist/voice/room_io/room_io.js:46-48
|
|
9
|
+
* `DEFAULT_ROOM_INPUT_OPTIONS = { audioSampleRate: 24e3, audioNumChannels: 1 }`,
|
|
10
|
+
* passed to the participant `AudioStream` (room_io.js:373-374). Plugins
|
|
11
|
+
* resample assuming the channel count they construct with
|
|
12
|
+
* (`@livekit/agents-plugin-google` 1.9.0 realtime_api.js:1307-1329
|
|
13
|
+
* `new AudioResampler(frame.sampleRate, 16000, 1)`; rtc-node's resampler reads
|
|
14
|
+
* raw bytes and ignores `frame.channels`), so the session must receive mono.
|
|
15
|
+
*/
|
|
16
|
+
export declare const LIVEKIT_ROOM_INPUT_AUDIO: Readonly<RelayInboundAudioFormat>;
|
|
6
17
|
/** LiveKit Agents input backed by the remote Relay participant's WebRTC audio. */
|
|
7
18
|
export declare class RelayAudioInput extends AudioInput {
|
|
8
19
|
#private;
|
|
@@ -10,11 +21,21 @@ export declare class RelayAudioInput extends AudioInput {
|
|
|
10
21
|
setAttached(attached: boolean): void;
|
|
11
22
|
close(): Promise<void>;
|
|
12
23
|
}
|
|
13
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* LiveKit Agents output that publishes TTS PCM to the Relay participant.
|
|
26
|
+
*
|
|
27
|
+
* Shape copied from `@livekit/agents` `ParticipantAudioOutput`
|
|
28
|
+
* (dist/voice/room_io/_output.js): `captureFrame` hands the frame to the
|
|
29
|
+
* transport and returns without waiting for playout, `flush()` starts a playout
|
|
30
|
+
* task that reports `onPlaybackFinished` only once the transport has drained,
|
|
31
|
+
* and `clearBuffer()` resolves the interruption future so that task reports
|
|
32
|
+
* `interrupted: true` with the position actually played.
|
|
33
|
+
*/
|
|
14
34
|
export declare class RelayAudioOutput extends AudioOutput {
|
|
15
35
|
#private;
|
|
16
36
|
constructor(transport: RelayCallTransport, sampleRate?: number);
|
|
17
37
|
captureFrame(frame: AudioFrame): Promise<void>;
|
|
38
|
+
/** Mark the segment complete; `onPlaybackFinished` fires once the transport has drained. */
|
|
18
39
|
flush(): void;
|
|
19
40
|
clearBuffer(): void;
|
|
20
41
|
close(): void;
|
|
@@ -32,14 +53,24 @@ export interface RelayLiveKitConnectOptions extends RelayLiveKitAudioOptions {
|
|
|
32
53
|
relay: Relay;
|
|
33
54
|
callId: string;
|
|
34
55
|
room?: CallRoomOptions;
|
|
35
|
-
/**
|
|
36
|
-
|
|
56
|
+
/**
|
|
57
|
+
* STUN and TURN servers for the agent's WebRTC peer. Defaults to none. A
|
|
58
|
+
* function is called again before every restart, to mint fresh TURN credentials.
|
|
59
|
+
*/
|
|
60
|
+
iceServers?: RelayIceServer[] | RelayIceServersProvider;
|
|
37
61
|
/** `"relay"` forces TURN. Defaults to `"all"`. */
|
|
38
62
|
iceTransportPolicy?: RelayIceTransportPolicy;
|
|
39
|
-
/**
|
|
63
|
+
/**
|
|
64
|
+
* How long one SFU session has to connect before the transport restarts onto
|
|
65
|
+
* a new one. Defaults to 5 seconds. `connect()` has no overall deadline.
|
|
66
|
+
*/
|
|
67
|
+
sessionConnectTimeoutMs?: number;
|
|
68
|
+
/** @deprecated Use `sessionConnectTimeoutMs`; now the per-session wait, not a `connect()` deadline. */
|
|
40
69
|
mediaConnectTimeoutMs?: number;
|
|
41
|
-
/** @deprecated Use `
|
|
70
|
+
/** @deprecated Use `sessionConnectTimeoutMs`. */
|
|
42
71
|
connectionTimeoutMs?: number;
|
|
72
|
+
/** Aborting stops `connect()` and closes the transport; the Call itself is not ended. */
|
|
73
|
+
signal?: AbortSignal;
|
|
43
74
|
}
|
|
44
75
|
type AgentSessionAudioTarget = Pick<AgentSession, "input" | "output">;
|
|
45
76
|
/**
|
|
@@ -56,6 +87,12 @@ export declare class RelayLiveKitCall {
|
|
|
56
87
|
static connect(options: RelayLiveKitConnectOptions): Promise<RelayLiveKitCall>;
|
|
57
88
|
attach(session: AgentSessionAudioTarget): void;
|
|
58
89
|
detach(): void;
|
|
90
|
+
/**
|
|
91
|
+
* Resolves once the person's audio has arrived and the room shows them
|
|
92
|
+
* connected (the transport's `peerAudio`). Await it before starting the
|
|
93
|
+
* AgentSession so the greeting is heard.
|
|
94
|
+
*/
|
|
95
|
+
waitForPeerAudio(timeoutMs: number): Promise<void>;
|
|
59
96
|
/** ICE candidates and state transitions for this call, with a one-line summary for logs. */
|
|
60
97
|
diagnostics(): RelayCallIceDiagnostics;
|
|
61
98
|
setMuted(muted: boolean): void;
|
package/dist/livekit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"livekit.d.ts","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"livekit.d.ts","sourceRoot":"","sources":["../src/livekit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAU,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAY,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EACL,kBAAkB,EAElB,KAAK,uBAAuB,EAE5B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAE7B,MAAM,gBAAgB,CAAC;AAExB;;;;;;;;;GASG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,uBAAuB,CAGrE,CAAC;AAEH,kFAAkF;AAClF,qBAAa,eAAgB,SAAQ,UAAU;;gBASjC,SAAS,EAAE,kBAAkB;IA4BhC,WAAW,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQtC;AAED;;;;;;;;;GASG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;;gBAWnC,SAAS,EAAE,kBAAkB,EAAE,UAAU,SAAS;IAK/C,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAoB7D,4FAA4F;IACnF,KAAK,IAAI,IAAI;IAWb,WAAW,IAAI,IAAI;IAS5B,KAAK,IAAI,IAAI;CAmBd;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,wBAAwB;IACvC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,iFAAiF;AACjF,eAAO,MAAM,uBAAuB,GAClC,WAAW,kBAAkB,EAC7B,UAAS,wBAA6B,KACrC,iBAGD,CAAC;AAEH,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,eAAe,CAAC;IAKvB;;;OAGG;IACH,UAAU,CAAC,EAAE,cAAc,EAAE,GAAG,uBAAuB,CAAC;IACxD,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,uBAAuB,CAAC;IAG7C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uGAAuG;IACvG,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,yFAAyF;IACzF,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,KAAK,uBAAuB,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,QAAQ,CAAC,CAAC;AAEtE;;;;GAIG;AACH,qBAAa,gBAAgB;;IAC3B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAIlC,OAAO;WAMM,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4BpF,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAQ9C,MAAM,IAAI,IAAI;IAOd;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,4FAA4F;IAC5F,WAAW,IAAI,uBAAuB;IAItC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9B,GAAG,IAAI,IAAI;IAIL,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|