@relaymessenger/livekit 0.1.0-staging.16 → 0.1.0-staging.17
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 +14 -188
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +1 -1
- package/dist/livekit.d.ts +5 -7
- package/dist/livekit.d.ts.map +1 -1
- package/dist/livekit.js +15 -20
- package/dist/livekit.js.map +1 -1
- package/package.json +3 -8
- package/dist/engine-werift-video.d.ts +0 -70
- package/dist/engine-werift-video.d.ts.map +0 -1
- package/dist/engine-werift-video.js +0 -594
- package/dist/engine-werift-video.js.map +0 -1
- package/dist/engine-werift.d.ts +0 -48
- package/dist/engine-werift.d.ts.map +0 -1
- package/dist/engine-werift.js +0 -457
- package/dist/engine-werift.js.map +0 -1
- package/dist/transport.d.ts +0 -327
- package/dist/transport.d.ts.map +0 -1
- package/dist/transport.js +0 -1354
- package/dist/transport.js.map +0 -1
- package/dist/video-frame.d.ts +0 -56
- package/dist/video-frame.d.ts.map +0 -1
- package/dist/video-frame.js +0 -245
- package/dist/video-frame.js.map +0 -1
- package/dist/video-rtp.d.ts +0 -51
- package/dist/video-rtp.d.ts.map +0 -1
- package/dist/video-rtp.js +0 -294
- package/dist/video-rtp.js.map +0 -1
- package/dist/video.d.ts +0 -144
- package/dist/video.d.ts.map +0 -1
- package/dist/video.js +0 -228
- package/dist/video.js.map +0 -1
package/dist/video-rtp.js
DELETED
|
@@ -1,294 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video RTP payloads: packetizing with `rtp-packet` 0.4.2 and depacketizing
|
|
3
|
-
* with this file's own frame assembler.
|
|
4
|
-
*
|
|
5
|
-
* Why not werift's depacketizer: `DepacketizeCallback` with `waitForKeyframe`
|
|
6
|
-
* glues frames together (measured 2026-09-22, /tmp/video-spike-webcodecs), and
|
|
7
|
-
* `rtp-packet`'s `H264Depacketizer` keeps collecting NAL units across a lost
|
|
8
|
-
* marker packet (src/h264.js:267-344: it emits on the marker bit only and never
|
|
9
|
-
* looks at sequence numbers). A frame here is emitted only when every packet
|
|
10
|
-
* from the previous frame's marker to its own marker arrived, so a loss
|
|
11
|
-
* becomes a dropped frame and a keyframe request, never a corrupt frame.
|
|
12
|
-
*
|
|
13
|
-
* Formats: H.264 RFC 6184 (single NAL unit, STAP-A type 24, FU-A type 28;
|
|
14
|
-
* packetization-mode=1), VP8 RFC 7741 (payload descriptor section 4.2, frame
|
|
15
|
-
* start is S=1 with partition index 0, keyframe is P=0 in the first payload
|
|
16
|
-
* header byte, section 4.3).
|
|
17
|
-
*/
|
|
18
|
-
import { H264Packetizer, VP8Packetizer } from "rtp-packet";
|
|
19
|
-
/** Largest RTP packet the packetizers write, as in the 2026-09-22 spike through Cloudflare's SFU. */
|
|
20
|
-
export const VIDEO_RTP_MTU = 1_200;
|
|
21
|
-
/** RTP video clock (RFC 6184 section 8.2.1, RFC 7741 section 6.1). */
|
|
22
|
-
export const VIDEO_CLOCK_RATE = 90_000;
|
|
23
|
-
const START_CODE = new Uint8Array([0, 0, 0, 1]);
|
|
24
|
-
const NAL_IDR = 5;
|
|
25
|
-
const NAL_SPS = 7;
|
|
26
|
-
const NAL_PPS = 8;
|
|
27
|
-
const NAL_AUD = 9;
|
|
28
|
-
const NAL_STAP_A = 24;
|
|
29
|
-
const NAL_FU_A = 28;
|
|
30
|
-
const opensAccessUnit = (type) => type === NAL_AUD || type === NAL_SPS;
|
|
31
|
-
/** NAL units of an Annex-B access unit, start codes removed. */
|
|
32
|
-
export const splitAnnexB = (data) => {
|
|
33
|
-
const units = [];
|
|
34
|
-
let start = -1;
|
|
35
|
-
let i = 0;
|
|
36
|
-
while (i + 2 < data.length) {
|
|
37
|
-
if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 1) {
|
|
38
|
-
if (start >= 0) {
|
|
39
|
-
let end = i;
|
|
40
|
-
while (end > start && data[end - 1] === 0)
|
|
41
|
-
end -= 1;
|
|
42
|
-
if (end > start)
|
|
43
|
-
units.push(data.subarray(start, end));
|
|
44
|
-
}
|
|
45
|
-
i += 3;
|
|
46
|
-
start = i;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
i += 1;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
if (start >= 0 && start < data.length)
|
|
53
|
-
units.push(data.subarray(start));
|
|
54
|
-
return units;
|
|
55
|
-
};
|
|
56
|
-
const joinAnnexB = (units) => {
|
|
57
|
-
const out = new Uint8Array(units.reduce((sum, unit) => sum + START_CODE.length + unit.length, 0));
|
|
58
|
-
let at = 0;
|
|
59
|
-
for (const unit of units) {
|
|
60
|
-
out.set(START_CODE, at);
|
|
61
|
-
out.set(unit, at + START_CODE.length);
|
|
62
|
-
at += START_CODE.length + unit.length;
|
|
63
|
-
}
|
|
64
|
-
return out;
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* H.264: SPS and PPS travel together in one STAP-A packet ahead of the rest
|
|
68
|
-
* of the access unit, as libwebrtc sends them (RtpPacketizerH264 aggregates
|
|
69
|
-
* small NAL units); every other NAL unit goes alone or as FU-A fragments.
|
|
70
|
-
*/
|
|
71
|
-
export const createVideoPacketizer = (codec, options) => {
|
|
72
|
-
const mtu = options.mtu ?? VIDEO_RTP_MTU;
|
|
73
|
-
if (codec === "vp8") {
|
|
74
|
-
const packetizer = new VP8Packetizer({ ssrc: options.ssrc, payloadType: options.payloadType, mtu, pictureId: true });
|
|
75
|
-
return { packetize: (data, timestampUs) => packetizer.packetize({ data, timestamp: timestampUs }) };
|
|
76
|
-
}
|
|
77
|
-
const packetizer = new H264Packetizer({ ssrc: options.ssrc, payloadType: options.payloadType, mtu });
|
|
78
|
-
return {
|
|
79
|
-
packetize: (data, timestampUs) => {
|
|
80
|
-
const units = splitAnnexB(data);
|
|
81
|
-
const parameterSets = units.filter((unit) => {
|
|
82
|
-
const type = unit[0] & 0x1f;
|
|
83
|
-
return type === NAL_SPS || type === NAL_PPS;
|
|
84
|
-
});
|
|
85
|
-
const rest = units.filter((unit) => !parameterSets.includes(unit));
|
|
86
|
-
const packets = [];
|
|
87
|
-
const aggregate = parameterSets.length > 1
|
|
88
|
-
&& parameterSets.reduce((sum, unit) => sum + 2 + unit.length, 1) <= mtu;
|
|
89
|
-
if (aggregate)
|
|
90
|
-
packets.push(packetizer.packetizeStapA(parameterSets, timestampUs, rest.length === 0));
|
|
91
|
-
const single = aggregate ? rest : units;
|
|
92
|
-
if (single.length)
|
|
93
|
-
packets.push(...packetizer.packetize({ nalus: single, timestamp: timestampUs }));
|
|
94
|
-
return packets;
|
|
95
|
-
},
|
|
96
|
-
};
|
|
97
|
-
};
|
|
98
|
-
/** RFC 7741 section 4.2 descriptor length, or -1 when truncated. */
|
|
99
|
-
const vp8DescriptorLength = (payload) => {
|
|
100
|
-
let at = 1;
|
|
101
|
-
if (payload.length < 1)
|
|
102
|
-
return -1;
|
|
103
|
-
if (payload[0] & 0x80) {
|
|
104
|
-
if (payload.length < 2)
|
|
105
|
-
return -1;
|
|
106
|
-
const ext = payload[1];
|
|
107
|
-
at = 2;
|
|
108
|
-
if (ext & 0x80) {
|
|
109
|
-
if (payload.length <= at)
|
|
110
|
-
return -1;
|
|
111
|
-
at += payload[at] & 0x80 ? 2 : 1;
|
|
112
|
-
}
|
|
113
|
-
if (ext & 0x40)
|
|
114
|
-
at += 1;
|
|
115
|
-
if (ext & 0x30)
|
|
116
|
-
at += 1;
|
|
117
|
-
}
|
|
118
|
-
return at <= payload.length ? at : -1;
|
|
119
|
-
};
|
|
120
|
-
/**
|
|
121
|
-
* In-order RTP packets of one video stream in, whole frames out. Packets must
|
|
122
|
-
* arrive in sequence order (a jitter buffer ahead of it reorders); any
|
|
123
|
-
* sequence gap drops the frame it falls in, and `onDrop` asks for a keyframe.
|
|
124
|
-
*/
|
|
125
|
-
export class VideoFrameAssembler {
|
|
126
|
-
#codec;
|
|
127
|
-
#onFrame;
|
|
128
|
-
#onDrop;
|
|
129
|
-
#expectedSequence;
|
|
130
|
-
#timestamp;
|
|
131
|
-
#pieces = [];
|
|
132
|
-
#keyframe = false;
|
|
133
|
-
#broken;
|
|
134
|
-
/** H.264 FU-A in progress, and its pieces so far. */
|
|
135
|
-
#fragmenting = false;
|
|
136
|
-
#fuParts = [];
|
|
137
|
-
/** A marker packet has been seen since the stream (re)started: the next packet begins a frame. */
|
|
138
|
-
#synced = false;
|
|
139
|
-
#frames = 0;
|
|
140
|
-
#dropped = 0;
|
|
141
|
-
constructor(codec, onFrame, onDrop = () => undefined) {
|
|
142
|
-
this.#codec = codec;
|
|
143
|
-
this.#onFrame = onFrame;
|
|
144
|
-
this.#onDrop = onDrop;
|
|
145
|
-
}
|
|
146
|
-
get frames() {
|
|
147
|
-
return this.#frames;
|
|
148
|
-
}
|
|
149
|
-
get dropped() {
|
|
150
|
-
return this.#dropped;
|
|
151
|
-
}
|
|
152
|
-
push(packet) {
|
|
153
|
-
const gap = this.#expectedSequence !== undefined && packet.sequenceNumber !== this.#expectedSequence;
|
|
154
|
-
this.#expectedSequence = (packet.sequenceNumber + 1) & 0xffff;
|
|
155
|
-
if (this.#timestamp !== undefined && packet.timestamp !== this.#timestamp) {
|
|
156
|
-
// A new frame began before the current one saw its marker: its tail was lost.
|
|
157
|
-
this.#finish(false);
|
|
158
|
-
}
|
|
159
|
-
const piece = this.#codec === "vp8" ? this.#vp8(packet.payload) : this.#h264(packet.payload);
|
|
160
|
-
if (this.#timestamp === undefined) {
|
|
161
|
-
this.#timestamp = packet.timestamp;
|
|
162
|
-
// A frame is whole only if it provably starts here: VP8 marks its first
|
|
163
|
-
// packet (S=1, PID=0); H.264 cannot, so its frame must follow the
|
|
164
|
-
// previous frame's marker with no packet missing in between.
|
|
165
|
-
const start = piece?.frameStart === true || (this.#codec === "h264" && this.#synced && !gap);
|
|
166
|
-
if (!start)
|
|
167
|
-
this.#broken = "loss";
|
|
168
|
-
}
|
|
169
|
-
else if (gap) {
|
|
170
|
-
this.#broken = "loss";
|
|
171
|
-
}
|
|
172
|
-
if (!piece)
|
|
173
|
-
this.#broken ??= "malformed";
|
|
174
|
-
else {
|
|
175
|
-
this.#pieces.push(...piece.bytes);
|
|
176
|
-
if (piece.keyframe)
|
|
177
|
-
this.#keyframe = true;
|
|
178
|
-
}
|
|
179
|
-
if (packet.marker) {
|
|
180
|
-
this.#synced = true;
|
|
181
|
-
this.#finish(true);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/** Forget the frame in progress (the stream restarted). */
|
|
185
|
-
reset() {
|
|
186
|
-
this.#expectedSequence = undefined;
|
|
187
|
-
this.#synced = false;
|
|
188
|
-
this.#clear();
|
|
189
|
-
}
|
|
190
|
-
#finish(complete) {
|
|
191
|
-
const timestamp = this.#timestamp;
|
|
192
|
-
if (timestamp === undefined)
|
|
193
|
-
return;
|
|
194
|
-
const broken = complete ? this.#broken ?? (this.#fragmenting ? "loss" : undefined) : "loss";
|
|
195
|
-
const pieces = this.#pieces;
|
|
196
|
-
const keyframe = this.#keyframe;
|
|
197
|
-
this.#clear();
|
|
198
|
-
if (broken || pieces.length === 0) {
|
|
199
|
-
this.#dropped += 1;
|
|
200
|
-
this.#onDrop(broken ?? "malformed");
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const data = this.#codec === "vp8" ? concat(pieces) : joinAnnexB(pieces);
|
|
204
|
-
this.#frames += 1;
|
|
205
|
-
this.#onFrame({ data, keyframe, timestamp });
|
|
206
|
-
}
|
|
207
|
-
#clear() {
|
|
208
|
-
this.#timestamp = undefined;
|
|
209
|
-
this.#pieces = [];
|
|
210
|
-
this.#keyframe = false;
|
|
211
|
-
this.#broken = undefined;
|
|
212
|
-
this.#fragmenting = false;
|
|
213
|
-
this.#fuParts = [];
|
|
214
|
-
}
|
|
215
|
-
/** For H.264 each piece is one whole NAL unit; FU-A fragments are joined into one. */
|
|
216
|
-
#h264(payload) {
|
|
217
|
-
if (payload.length < 1)
|
|
218
|
-
return undefined;
|
|
219
|
-
const type = payload[0] & 0x1f;
|
|
220
|
-
if (type >= 1 && type <= 23) {
|
|
221
|
-
if (this.#fragmenting)
|
|
222
|
-
return undefined;
|
|
223
|
-
return { bytes: [payload], frameStart: opensAccessUnit(type), keyframe: type === NAL_IDR };
|
|
224
|
-
}
|
|
225
|
-
if (type === NAL_STAP_A) {
|
|
226
|
-
if (this.#fragmenting)
|
|
227
|
-
return undefined;
|
|
228
|
-
const units = [];
|
|
229
|
-
let at = 1;
|
|
230
|
-
while (at + 2 <= payload.length) {
|
|
231
|
-
const size = (payload[at] << 8) | payload[at + 1];
|
|
232
|
-
at += 2;
|
|
233
|
-
if (size === 0 || at + size > payload.length)
|
|
234
|
-
return undefined;
|
|
235
|
-
units.push(payload.subarray(at, at + size));
|
|
236
|
-
at += size;
|
|
237
|
-
}
|
|
238
|
-
if (at !== payload.length || units.length === 0)
|
|
239
|
-
return undefined;
|
|
240
|
-
return {
|
|
241
|
-
bytes: units,
|
|
242
|
-
frameStart: opensAccessUnit(units[0][0] & 0x1f),
|
|
243
|
-
keyframe: units.some((unit) => (unit[0] & 0x1f) === NAL_IDR),
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
if (type === NAL_FU_A) {
|
|
247
|
-
if (payload.length < 3)
|
|
248
|
-
return undefined;
|
|
249
|
-
const header = payload[1];
|
|
250
|
-
const start = (header & 0x80) !== 0;
|
|
251
|
-
const end = (header & 0x40) !== 0;
|
|
252
|
-
const original = header & 0x1f;
|
|
253
|
-
if (start) {
|
|
254
|
-
if (this.#fragmenting)
|
|
255
|
-
return undefined;
|
|
256
|
-
this.#fragmenting = true;
|
|
257
|
-
this.#fuParts = [new Uint8Array([(payload[0] & 0xe0) | original]), payload.subarray(2)];
|
|
258
|
-
}
|
|
259
|
-
else {
|
|
260
|
-
if (!this.#fragmenting)
|
|
261
|
-
return undefined;
|
|
262
|
-
this.#fuParts.push(payload.subarray(2));
|
|
263
|
-
}
|
|
264
|
-
if (!end)
|
|
265
|
-
return { bytes: [], frameStart: false, keyframe: false };
|
|
266
|
-
this.#fragmenting = false;
|
|
267
|
-
const unit = concat(this.#fuParts);
|
|
268
|
-
this.#fuParts = [];
|
|
269
|
-
return { bytes: [unit], frameStart: false, keyframe: original === NAL_IDR };
|
|
270
|
-
}
|
|
271
|
-
// STAP-B, MTAP and FU-B belong to packetization-mode 2, which is never negotiated.
|
|
272
|
-
return undefined;
|
|
273
|
-
}
|
|
274
|
-
#vp8(payload) {
|
|
275
|
-
const length = vp8DescriptorLength(payload);
|
|
276
|
-
if (length < 0 || length >= payload.length)
|
|
277
|
-
return undefined;
|
|
278
|
-
const start = (payload[0] & 0x10) !== 0 && (payload[0] & 0x07) === 0;
|
|
279
|
-
const body = payload.subarray(length);
|
|
280
|
-
return { bytes: [body], frameStart: start, keyframe: start && (body[0] & 0x01) === 0 };
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
const concat = (parts) => {
|
|
284
|
-
if (parts.length === 1)
|
|
285
|
-
return parts[0];
|
|
286
|
-
const out = new Uint8Array(parts.reduce((sum, part) => sum + part.length, 0));
|
|
287
|
-
let at = 0;
|
|
288
|
-
for (const part of parts) {
|
|
289
|
-
out.set(part, at);
|
|
290
|
-
at += part.length;
|
|
291
|
-
}
|
|
292
|
-
return out;
|
|
293
|
-
};
|
|
294
|
-
//# sourceMappingURL=video-rtp.js.map
|
package/dist/video-rtp.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video-rtp.js","sourceRoot":"","sources":["../src/video-rtp.ts"],"names":[],"mappings":"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"}
|
package/dist/video.d.ts
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Video tracks for Relay calls, with LiveKit's public API shape.
|
|
3
|
-
*
|
|
4
|
-
* Names and semantics copied from `@livekit/rtc-node` 0.13.35
|
|
5
|
-
* (node_modules/@livekit/rtc-node/src):
|
|
6
|
-
* - video_source.ts:18-75: `new VideoSource(width, height)`,
|
|
7
|
-
* `captureFrame(frame, timestampUs = BigInt(0), rotation = VIDEO_ROTATION_0)`
|
|
8
|
-
* which throws "VideoSource is closed" after `close()`.
|
|
9
|
-
* - track.ts:241-268: `LocalVideoTrack.createVideoTrack(name, source)` and
|
|
10
|
-
* `close(closeSource = true)`.
|
|
11
|
-
* - video_stream.ts:12-16 and :94-98: `VideoFrameEvent { frame, timestampUs,
|
|
12
|
-
* rotation }` and `class VideoStream extends ReadableStream<VideoFrameEvent>`
|
|
13
|
-
* built from a remote track, read with `for await`.
|
|
14
|
-
* - participant.ts:737 `publishTrack(track, options)` and :783
|
|
15
|
-
* `unpublishTrack(...)`; the publish options `videoCodec` and
|
|
16
|
-
* `videoEncoding { maxBitrate, maxFramerate }` from
|
|
17
|
-
* @livekit/rtc-ffi-bindings proto/room_pb.d.ts:1792-1859, and `VideoCodec`
|
|
18
|
-
* (VP8 = 0, H264 = 1) from proto/video_frame_pb.d.ts:28-50.
|
|
19
|
-
* The optional `{ capacity, format }` of `VideoStream` is LiveKit's Python SDK
|
|
20
|
-
* (livekit-rtc/livekit/rtc/video_stream.py:42-60, `RingQueue` in _utils.py:78-94:
|
|
21
|
-
* capacity 0 keeps every frame, a positive capacity drops the oldest).
|
|
22
|
-
*
|
|
23
|
-
* Relay semantics (PROTOCOL.md sections 1-2, _artifacts/calls-facetime-20260922):
|
|
24
|
-
* a participant publishes at most one `video` track; publishing it the first
|
|
25
|
-
* time negotiates it with an add-track offer and announces `userUpdate
|
|
26
|
-
* { video: true }`; unpublishing stops sending and announces `video: false`
|
|
27
|
-
* but leaves the track negotiated, so publishing again only resumes.
|
|
28
|
-
*/
|
|
29
|
-
import { ReadableStream } from "node:stream/web";
|
|
30
|
-
import { VideoBufferType, VideoFrame, VideoRotation } from "./video-frame.js";
|
|
31
|
-
export { VideoBufferType, VideoFrame, VideoRotation } from "./video-frame.js";
|
|
32
|
-
/** Same names and numbers as LiveKit's `VideoCodec`; Relay sends these two. */
|
|
33
|
-
export declare enum VideoCodec {
|
|
34
|
-
VP8 = 0,
|
|
35
|
-
H264 = 1
|
|
36
|
-
}
|
|
37
|
-
/** LiveKit's `VideoEncoding`. */
|
|
38
|
-
export interface VideoEncoding {
|
|
39
|
-
/** Bits per second. Defaults to 800 kbps, the rate measured through Cloudflare's SFU on 2026-09-22. */
|
|
40
|
-
maxBitrate?: number | bigint;
|
|
41
|
-
/** Encoder rate-control hint. Defaults to 30. */
|
|
42
|
-
maxFramerate?: number;
|
|
43
|
-
}
|
|
44
|
-
/** The subset of LiveKit's `TrackPublishOptions` a Relay call honours. */
|
|
45
|
-
export interface TrackPublishOptions {
|
|
46
|
-
/**
|
|
47
|
-
* Preferred codec. Defaults to H.264 (constrained baseline `42e01f`, the one
|
|
48
|
-
* profile Cloudflare's SFU accepts); VP8 is offered second either way.
|
|
49
|
-
*/
|
|
50
|
-
videoCodec?: VideoCodec;
|
|
51
|
-
videoEncoding?: VideoEncoding;
|
|
52
|
-
}
|
|
53
|
-
export type VideoFrameEvent = {
|
|
54
|
-
frame: VideoFrame;
|
|
55
|
-
timestampUs: bigint;
|
|
56
|
-
rotation: VideoRotation;
|
|
57
|
-
};
|
|
58
|
-
/** Counters for the published video track; timestamps are epoch ms. */
|
|
59
|
-
export interface RelayVideoSenderStats {
|
|
60
|
-
/** Negotiated send codec, learned from the answer; undefined before it. */
|
|
61
|
-
codec: "h264" | "vp8" | undefined;
|
|
62
|
-
framesCaptured: number;
|
|
63
|
-
framesEncoded: number;
|
|
64
|
-
/** Captured while unpublished, before the codec was known, or while the encoder was behind. */
|
|
65
|
-
framesDropped: number;
|
|
66
|
-
keyframes: number;
|
|
67
|
-
rtpPackets: number;
|
|
68
|
-
bytes: number;
|
|
69
|
-
/** PLI and FIR received from the SFU. */
|
|
70
|
-
keyframeRequests: number;
|
|
71
|
-
encodeErrors: number;
|
|
72
|
-
firstFrameAt: number | undefined;
|
|
73
|
-
lastFrameAt: number | undefined;
|
|
74
|
-
/** Frames encoded in the last 5 s. */
|
|
75
|
-
recentFrames: number;
|
|
76
|
-
width: number | undefined;
|
|
77
|
-
height: number | undefined;
|
|
78
|
-
}
|
|
79
|
-
/** Counters for the other participant's video track; timestamps are epoch ms. */
|
|
80
|
-
export interface RelayVideoReceiverStats {
|
|
81
|
-
codec: string | undefined;
|
|
82
|
-
rtpPackets: number;
|
|
83
|
-
/** Whole frames assembled from RTP. */
|
|
84
|
-
framesAssembled: number;
|
|
85
|
-
/** Frames dropped because a packet was lost or malformed, or a delta arrived before a keyframe. */
|
|
86
|
-
framesDropped: number;
|
|
87
|
-
framesDecoded: number;
|
|
88
|
-
decodeErrors: number;
|
|
89
|
-
/** PLI sent to ask the sender for a keyframe. */
|
|
90
|
-
keyframeRequests: number;
|
|
91
|
-
firstFrameAt: number | undefined;
|
|
92
|
-
lastFrameAt: number | undefined;
|
|
93
|
-
/** Frames decoded in the last 5 s. */
|
|
94
|
-
recentFrames: number;
|
|
95
|
-
width: number | undefined;
|
|
96
|
-
height: number | undefined;
|
|
97
|
-
}
|
|
98
|
-
export declare class VideoSource {
|
|
99
|
-
#private;
|
|
100
|
-
width: number;
|
|
101
|
-
height: number;
|
|
102
|
-
constructor(width: number, height: number);
|
|
103
|
-
/**
|
|
104
|
-
* Hand one raw frame to the published track. RGBA, BGRA and I420 (LiveKit
|
|
105
|
-
* `VideoBufferType`) go to the encoder as they are; the other packed RGB
|
|
106
|
-
* layouts are converted to I420 first. `timestampUs` 0 means "now".
|
|
107
|
-
* Frames captured while the track is not published are dropped.
|
|
108
|
-
*/
|
|
109
|
-
captureFrame(frame: VideoFrame, timestampUs?: bigint, rotation?: VideoRotation): void;
|
|
110
|
-
close(): Promise<void>;
|
|
111
|
-
}
|
|
112
|
-
export declare class LocalVideoTrack {
|
|
113
|
-
readonly kind: "video";
|
|
114
|
-
readonly name: string;
|
|
115
|
-
constructor(name: string, source: VideoSource);
|
|
116
|
-
static createVideoTrack(name: string, source: VideoSource): LocalVideoTrack;
|
|
117
|
-
close(closeSource?: boolean): Promise<void>;
|
|
118
|
-
}
|
|
119
|
-
/**
|
|
120
|
-
* The other participant's camera. Emitted once per call by the transport's
|
|
121
|
-
* `trackSubscribed` event; it survives SFU restarts (the transport moves it
|
|
122
|
-
* onto the new session's receiver), so a `VideoStream` read from it keeps going.
|
|
123
|
-
*/
|
|
124
|
-
export declare class RemoteVideoTrack {
|
|
125
|
-
#private;
|
|
126
|
-
readonly kind: "video";
|
|
127
|
-
readonly name = "video";
|
|
128
|
-
/** Counters summed over every receiver this track has had. */
|
|
129
|
-
stats(): RelayVideoReceiverStats | undefined;
|
|
130
|
-
}
|
|
131
|
-
export interface VideoStreamOptions {
|
|
132
|
-
/** Frames kept for a slow reader; 0 (the default) keeps all, a positive number drops the oldest. */
|
|
133
|
-
capacity?: number;
|
|
134
|
-
/** Pixel layout of every frame read; defaults to the decoder's I420. */
|
|
135
|
-
format?: VideoBufferType;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Decoded frames of a remote video track. Decoding starts when the first
|
|
139
|
-
* stream opens and stops when the last one is cancelled.
|
|
140
|
-
*/
|
|
141
|
-
export declare class VideoStream extends ReadableStream<VideoFrameEvent> {
|
|
142
|
-
constructor(track: RemoteVideoTrack, options?: VideoStreamOptions);
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=video.d.ts.map
|
package/dist/video.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../src/video.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,+EAA+E;AAC/E,oBAAY,UAAU;IACpB,GAAG,IAAI;IACP,IAAI,IAAI;CACT;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,uGAAuG;IACvG,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,uEAAuE;AACvE,MAAM,WAAW,qBAAqB;IACpC,2EAA2E;IAC3E,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,+FAA+F;IAC/F,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,iFAAiF;AACjF,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,mGAAmG;IACnG,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AA+BD,qBAAa,WAAW;;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;gBAKH,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKzC;;;;;OAKG;IACH,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,SAAY,EAAE,QAAQ,gBAAiC,GAAG,IAAI;IAKnG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B;AAED,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAIV,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAK7C,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,eAAe;IAIrE,KAAK,CAAC,WAAW,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C;AAOD;;;;GAIG;AACH,qBAAa,gBAAgB;;IAC3B,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,IAAI,WAAW;IAMxB,8DAA8D;IAC9D,KAAK,IAAI,uBAAuB,GAAG,SAAS;CAyE7C;AAED,MAAM,WAAW,kBAAkB;IACjC,oGAAoG;IACpG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,WAAY,SAAQ,cAAc,CAAC,eAAe,CAAC;gBAClD,KAAK,EAAE,gBAAgB,EAAE,OAAO,GAAE,kBAAuB;CA2CtE"}
|