social.colibri.beta.voice.defs
Schema Diff
+10 -1
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 4 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason", sort: "knownValues", old_value: "[\"moderator\",\"superseded\",\"channelGone\"]", new_value: "[\"moderator\",\"superseded\",\"channelGone\",\"forbidden\"]" }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceServers" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceServers:items" }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions", tgt: "social.colibri.beta.voice.defs#transportOptions.iceServers", kind: "prop", name: Some("iceServers") }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceServers", tgt: "social.colibri.beta.voice.defs#transportOptions.iceServers:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceServers" }AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceServers:items" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason", sort: "knownValues", old_value: "[\"moderator\",\"superseded\",\"channelGone\"]", new_value: "[\"moderator\",\"superseded\",\"channelGone\",\"forbidden\"]" }
Additional Notes
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions", tgt: "social.colibri.beta.voice.defs#transportOptions.iceServers", kind: "prop", name: Some("iceServers") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceServers", tgt: "social.colibri.beta.voice.defs#transportOptions.iceServers:items", kind: "items", name: None }
1
1
{
2
2
"id": "social.colibri.beta.voice.defs",
3
3
"defs": {
4
4
"ack": {
5
5
"type": "object",
6
6
"required": [],
7
7
"properties": {},
8
8
"description": "Answers a heartbeat."
9
9
},
10
10
"join": {
11
11
"type": "object",
12
12
"required": [
13
13
"channel"
14
14
],
15
15
"properties": {
16
16
"channel": {
17
17
"type": "string",
18
18
"format": "space-ref",
19
19
"description": "The voice channel to join."
20
20
}
21
21
},
22
22
"description": "Joins a voice channel. A connection must join before sending any other frame, and joining a second channel leaves the first."
23
23
},
24
24
"error": {
25
25
"type": "object",
26
26
"required": [
27
27
"error"
28
28
],
29
29
"properties": {
30
30
"error": {
31
31
"type": "string",
32
32
"description": "Error name.",
33
33
"knownValues": [
34
34
"InvalidFrame",
35
35
"NotJoined",
36
36
"ChannelNotFound",
37
37
"NotVoiceChannel",
38
38
"Forbidden",
39
39
"NotFound"
40
40
]
41
41
},
42
42
"message": {
43
43
"type": "string",
44
44
"description": "Human-readable detail."
45
45
}
46
46
},
47
47
"description": "Something the client sent could not be acted on."
48
48
},
49
49
"leave": {
50
50
"type": "object",
51
51
"required": [],
52
52
"properties": {},
53
53
"description": "Leaves the voice channel this connection is joined to."
54
54
},
55
55
"joined": {
56
56
"type": "object",
57
57
"required": [
58
58
"channel"
59
59
],
60
60
"properties": {
61
61
"channel": {
62
62
"type": "string",
63
63
"format": "space-ref",
64
64
"description": "The voice channel now joined."
65
65
}
66
66
},
67
67
"description": "Confirms this connection has joined a voice channel."
68
68
},
69
69
"consume": {
70
70
"type": "object",
71
71
"required": [
72
72
"transportId",
73
73
"producerId",
74
74
"rtpCapabilities"
75
75
],
76
76
"properties": {
77
77
"producerId": {
78
78
"type": "string",
79
79
"description": "The producer to consume."
80
80
},
81
81
"transportId": {
82
82
"type": "string",
83
83
"description": "The receive transport to consume on."
84
84
},
85
85
"rtpCapabilities": {
86
86
"type": "unknown",
87
87
"description": "This connection's opaque mediasoup RTP capabilities blob."
88
88
}
89
89
},
90
90
"description": "Starts consuming another peer's producer on a receive transport this connection created."
91
91
},
92
92
"produce": {
93
93
"type": "object",
94
94
"required": [
95
95
"transportId",
96
96
"kind",
97
97
"rtpParameters",
98
98
"source"
99
99
],
100
100
"properties": {
101
101
"kind": {
102
102
"type": "string",
103
103
"description": "The media kind.",
104
104
"knownValues": [
105
105
"audio",
106
106
"video"
107
107
]
108
108
},
109
109
"source": {
110
110
"type": "string",
111
111
"description": "What this producer captures.",
112
112
"knownValues": [
113
113
"microphone",
114
114
"camera",
115
115
"screen"
116
116
]
117
117
},
118
118
"transportId": {
119
119
"type": "string",
120
120
"description": "The send transport to produce on."
121
121
},
122
122
"rtpParameters": {
123
123
"type": "unknown",
124
124
"description": "The opaque mediasoup RTP parameters blob."
125
125
}
126
126
},
127
127
"description": "Starts producing media on a send transport this connection created."
128
128
},
129
129
"peerLeft": {
130
130
"type": "object",
131
131
"required": [
132
132
"did"
133
133
],
134
134
"properties": {
135
135
"did": {
136
136
"type": "string",
137
137
"format": "did",
138
138
"description": "Who left."
139
139
}
140
140
},
141
141
"description": "A peer left the voice channel this connection is in."
142
142
},
143
143
"heartbeat": {
144
144
"type": "object",
145
145
"required": [],
146
146
"properties": {},
147
147
"description": "Keeps the connection alive. The server answers with an ack."
148
148
},
149
149
"peerJoined": {
150
150
"type": "object",
151
151
"required": [
152
152
"did"
153
153
],
154
154
"properties": {
155
155
"did": {
156
156
"type": "string",
157
157
"format": "did",
158
158
"description": "Who joined."
159
159
}
160
160
},
161
161
"description": "Another peer joined the voice channel this connection is in."
162
162
},
163
163
"disconnected": {
164
164
"type": "object",
165
165
"required": [],
166
166
"properties": {
167
167
"reason": {
168
168
"type": "string",
169
169
"description": "Why it happened.",
170
170
"knownValues": [
171
171
"moderator",
172
172
"superseded",
173
-
"channelGone"
173
+
"channelGone",
174
+
"forbidden"
174
175
]
175
176
}
176
177
},
177
178
"description": "The server removed this client from the voice channel. Sent only to the client it applies to."
178
179
},
179
180
"producerInfo": {
180
181
"type": "object",
181
182
"required": [
182
183
"producerId",
183
184
"did",
184
185
"kind"
185
186
],
186
187
"properties": {
187
188
"did": {
188
189
"type": "string",
189
190
"format": "did",
190
191
"description": "Who is producing this media."
191
192
},
192
193
"kind": {
193
194
"type": "string",
194
195
"description": "The media kind.",
195
196
"knownValues": [
196
197
"audio",
197
198
"video"
198
199
]
199
200
},
200
201
"paused": {
201
202
"type": "boolean",
202
203
"description": "Whether the producer is currently paused."
203
204
},
204
205
"source": {
205
206
"type": "string",
206
207
"description": "What the producer captures.",
207
208
"knownValues": [
208
209
"microphone",
209
210
"camera",
210
211
"screen"
211
212
]
212
213
},
213
214
"producerId": {
214
215
"type": "string",
215
216
"description": "The producer's identifier."
216
217
}
217
218
},
218
219
"description": "A media producer available to consume."
219
220
},
220
221
"setSelfState": {
221
222
"type": "object",
222
223
"required": [],
223
224
"properties": {
224
225
"muted": {
225
226
"type": "boolean",
226
227
"description": "Whether the microphone is muted."
227
228
},
228
229
"deafened": {
229
230
"type": "boolean",
230
231
"description": "Whether incoming audio is silenced."
231
232
}
232
233
},
233
234
"description": "Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged."
234
235
},
235
236
"closeProducer": {
236
237
"type": "object",
237
238
"required": [
238
239
"producerId"
239
240
],
240
241
"properties": {
241
242
"producerId": {
242
243
"type": "string",
243
244
"description": "The producer to close."
244
245
}
245
246
},
246
247
"description": "Closes a producer this connection owns."
247
248
},
248
249
"resumeConsumer": {
249
250
"type": "object",
250
251
"required": [
251
252
"consumerId"
252
253
],
253
254
"properties": {
254
255
"consumerId": {
255
256
"type": "string",
256
257
"description": "The consumer to resume."
257
258
}
258
259
},
259
260
"description": "Resumes a consumer this connection created, which is created paused by default."
260
261
},
261
262
"speakingUpdate": {
262
263
"type": "object",
263
264
"required": [
264
265
"did",
265
266
"speaking"
266
267
],
267
268
"properties": {
268
269
"did": {
269
270
"type": "string",
270
271
"format": "did",
271
272
"description": "Who this update is about."
272
273
},
273
274
"level": {
274
275
"type": "integer",
275
276
"description": "An audio level in dBFS."
276
277
},
277
278
"speaking": {
278
279
"type": "boolean",
279
280
"description": "Whether they are currently speaking."
280
281
}
281
282
},
282
283
"description": "A change in whether someone is currently speaking."
283
284
},
284
285
"consumerOptions": {
285
286
"type": "object",
286
287
"required": [
287
288
"id",
288
289
"producerId",
289
290
"kind",
290
291
"rtpParameters"
291
292
],
292
293
"properties": {
293
294
"id": {
294
295
"type": "string",
295
296
"description": "The consumer's identifier."
296
297
},
297
298
"kind": {
298
299
"type": "string",
299
300
"description": "The media kind.",
300
301
"knownValues": [
301
302
"audio",
302
303
"video"
303
304
]
304
305
},
305
306
"producerId": {
306
307
"type": "string",
307
308
"description": "The producer being consumed."
308
309
},
309
310
"rtpParameters": {
310
311
"type": "unknown",
311
312
"description": "The opaque mediasoup RTP parameters blob."
312
313
}
313
314
},
314
315
"description": "Parameters for consuming one producer."
315
316
},
316
317
"createTransport": {
317
318
"type": "object",
318
319
"required": [
319
320
"direction"
320
321
],
321
322
"properties": {
322
323
"direction": {
323
324
"type": "string",
324
325
"description": "Whether this transport will send or receive media.",
325
326
"knownValues": [
326
327
"send",
327
328
"recv"
328
329
]
329
330
}
330
331
},
331
332
"description": "Requests a new WebRTC transport for the joined channel."
332
333
},
333
334
"producerRemoved": {
334
335
"type": "object",
335
336
"required": [
336
337
"producerId",
337
338
"did"
338
339
],
339
340
"properties": {
340
341
"did": {
341
342
"type": "string",
342
343
"format": "did",
343
344
"description": "Whose producer this was."
344
345
},
345
346
"producerId": {
346
347
"type": "string",
347
348
"description": "The producer that closed."
348
349
}
349
350
},
350
351
"description": "A peer's producer closed."
351
352
},
352
353
"rtpCapabilities": {
353
354
"type": "object",
354
355
"properties": {
355
356
"payload": {
356
357
"type": "unknown",
357
358
"description": "The opaque mediasoup capability blob."
358
359
}
359
360
},
360
361
"description": "The RTP capabilities a WebRTC endpoint supports."
361
362
},
362
363
"connectTransport": {
363
364
"type": "object",
364
365
"required": [
365
366
"transportId",
366
367
"dtlsParameters"
367
368
],
368
369
"properties": {
369
370
"transportId": {
370
371
"type": "string",
371
372
"description": "The transport to connect."
372
373
},
373
374
"dtlsParameters": {
374
375
"type": "unknown",
375
376
"description": "The opaque mediasoup DTLS parameters blob."
376
377
}
377
378
},
378
379
"description": "Completes DTLS negotiation for a transport this connection created."
379
380
},
380
381
"transportOptions": {
381
382
"type": "object",
382
383
"required": [
383
384
"id",
384
385
"iceParameters",
385
386
"iceCandidates",
386
387
"dtlsParameters"
387
388
],
388
389
"properties": {
389
390
"id": {
390
391
"type": "string",
391
392
"description": "The transport's identifier."
392
393
},
393
394
"direction": {
394
395
"type": "string",
395
396
"description": "Which side of the call this transport carries.",
396
397
"knownValues": [
397
398
"send",
398
399
"recv"
399
400
]
400
401
},
402
+
"iceServers": {
403
+
"type": "array",
404
+
"items": {
405
+
"type": "unknown",
406
+
"description": "One opaque RTCIceServer entry."
407
+
},
408
+
"description": "STUN and TURN servers the client should use while gathering candidates. Absent when the server has none configured."
409
+
},
401
410
"iceCandidates": {
402
411
"type": "array",
403
412
"items": {
404
413
"type": "unknown",
405
414
"description": "One opaque mediasoup ICE candidate."
406
415
},
407
416
"description": "The mediasoup ICE candidates, one opaque blob per candidate. This is an array, not a single object, because that is what a WebRTC transport hands back."
408
417
},
409
418
"iceParameters": {
410
419
"type": "unknown",
411
420
"description": "The opaque mediasoup ICE parameters blob."
412
421
},
413
422
"dtlsParameters": {
414
423
"type": "unknown",
415
424
"description": "The opaque mediasoup DTLS parameters blob."
416
425
}
417
426
},
418
427
"description": "Parameters for creating one side of a WebRTC transport."
419
428
},
420
429
"moderationChanged": {
421
430
"type": "object",
422
431
"required": [
423
432
"did",
424
433
"muted",
425
434
"deafened"
426
435
],
427
436
"properties": {
428
437
"did": {
429
438
"type": "string",
430
439
"format": "did",
431
440
"description": "Whose state changed."
432
441
},
433
442
"muted": {
434
443
"type": "boolean",
435
444
"description": "Whether the microphone is muted, for any reason."
436
445
},
437
446
"deafened": {
438
447
"type": "boolean",
439
448
"description": "Whether incoming audio is silenced, for any reason."
440
449
},
441
450
"serverMuted": {
442
451
"type": "boolean",
443
452
"description": "Whether a moderator muted them. When this is true the peer cannot unmute themselves."
444
453
},
445
454
"serverDeafened": {
446
455
"type": "boolean",
447
456
"description": "Whether a moderator deafened them. When this is true the peer cannot undeafen themselves."
448
457
}
449
458
},
450
459
"description": "A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them."
451
460
},
452
461
"getRtpCapabilities": {
453
462
"type": "object",
454
463
"required": [],
455
464
"properties": {},
456
465
"description": "Requests the router's RTP capabilities for the joined channel."
457
466
}
458
467
},
459
468
"$type": "com.atproto.lexicon.schema",
460
469
"lexicon": 1
461
470
}