social.colibri.beta.voice.defs
Schema Diff
+33 -5
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 9 non-breaking changes.
Breaking Changes (1)
- KindChanged KindChanged { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", old_kind: "unknown", new_kind: "array" }
Non-Breaking Changes (9)
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverMuted" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items" }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#disconnected", tgt: "social.colibri.beta.voice.defs#disconnected.reason", kind: "prop", name: Some("reason") }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverMuted", kind: "prop", name: Some("serverMuted") }
- AddedEdge AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", tgt: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected" }AddedVertex { vertex_id: "social.colibri.beta.voice.defs#disconnected.reason" }AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened" }AddedVertex { vertex_id: "social.colibri.beta.voice.defs#moderationChanged.serverMuted" }AddedVertex { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates:items" }
Additional Notes
- Breaking: KindChanged { vertex_id: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", old_kind: "unknown", new_kind: "array" }
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#disconnected", tgt: "social.colibri.beta.voice.defs#disconnected.reason", kind: "prop", name: Some("reason") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverDeafened", kind: "prop", name: Some("serverDeafened") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#moderationChanged", tgt: "social.colibri.beta.voice.defs#moderationChanged.serverMuted", kind: "prop", name: Some("serverMuted") }
- Non-breaking: AddedEdge { src: "social.colibri.beta.voice.defs#transportOptions.iceCandidates", tgt: "social.colibri.beta.voice.defs#transportOptions.iceCandidates: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
+
"disconnected": {
164
+
"type": "object",
165
+
"required": [],
166
+
"properties": {
167
+
"reason": {
168
+
"type": "string",
169
+
"description": "Why it happened.",
170
+
"knownValues": [
171
+
"moderator",
172
+
"superseded",
173
+
"channelGone"
174
+
]
175
+
}
176
+
},
177
+
"description": "The server removed this client from the voice channel. Sent only to the client it applies to."
178
+
},
163
179
"producerInfo": {
164
180
"type": "object",
165
181
"required": [
166
182
"producerId",
167
183
"did",
168
184
"kind"
169
185
],
170
186
"properties": {
171
187
"did": {
172
188
"type": "string",
173
189
"format": "did",
174
190
"description": "Who is producing this media."
175
191
},
176
192
"kind": {
177
193
"type": "string",
178
194
"description": "The media kind.",
179
195
"knownValues": [
180
196
"audio",
181
197
"video"
182
198
]
183
199
},
184
200
"paused": {
185
201
"type": "boolean",
186
202
"description": "Whether the producer is currently paused."
187
203
},
188
204
"source": {
189
205
"type": "string",
190
206
"description": "What the producer captures.",
191
207
"knownValues": [
192
208
"microphone",
193
209
"camera",
194
210
"screen"
195
211
]
196
212
},
197
213
"producerId": {
198
214
"type": "string",
199
215
"description": "The producer's identifier."
200
216
}
201
217
},
202
218
"description": "A media producer available to consume."
203
219
},
204
220
"setSelfState": {
205
221
"type": "object",
206
222
"required": [],
207
223
"properties": {
208
224
"muted": {
209
225
"type": "boolean",
210
226
"description": "Whether the microphone is muted."
211
227
},
212
228
"deafened": {
213
229
"type": "boolean",
214
230
"description": "Whether incoming audio is silenced."
215
231
}
216
232
},
217
233
"description": "Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged."
218
234
},
219
235
"closeProducer": {
220
236
"type": "object",
221
237
"required": [
222
238
"producerId"
223
239
],
224
240
"properties": {
225
241
"producerId": {
226
242
"type": "string",
227
243
"description": "The producer to close."
228
244
}
229
245
},
230
246
"description": "Closes a producer this connection owns."
231
247
},
232
248
"resumeConsumer": {
233
249
"type": "object",
234
250
"required": [
235
251
"consumerId"
236
252
],
237
253
"properties": {
238
254
"consumerId": {
239
255
"type": "string",
240
256
"description": "The consumer to resume."
241
257
}
242
258
},
243
259
"description": "Resumes a consumer this connection created, which is created paused by default."
244
260
},
245
261
"speakingUpdate": {
246
262
"type": "object",
247
263
"required": [
248
264
"did",
249
265
"speaking"
250
266
],
251
267
"properties": {
252
268
"did": {
253
269
"type": "string",
254
270
"format": "did",
255
271
"description": "Who this update is about."
256
272
},
257
273
"level": {
258
274
"type": "integer",
259
275
"description": "An audio level in dBFS."
260
276
},
261
277
"speaking": {
262
278
"type": "boolean",
263
279
"description": "Whether they are currently speaking."
264
280
}
265
281
},
266
282
"description": "A change in whether someone is currently speaking."
267
283
},
268
284
"consumerOptions": {
269
285
"type": "object",
270
286
"required": [
271
287
"id",
272
288
"producerId",
273
289
"kind",
274
290
"rtpParameters"
275
291
],
276
292
"properties": {
277
293
"id": {
278
294
"type": "string",
279
295
"description": "The consumer's identifier."
280
296
},
281
297
"kind": {
282
298
"type": "string",
283
299
"description": "The media kind.",
284
300
"knownValues": [
285
301
"audio",
286
302
"video"
287
303
]
288
304
},
289
305
"producerId": {
290
306
"type": "string",
291
307
"description": "The producer being consumed."
292
308
},
293
309
"rtpParameters": {
294
310
"type": "unknown",
295
311
"description": "The opaque mediasoup RTP parameters blob."
296
312
}
297
313
},
298
314
"description": "Parameters for consuming one producer."
299
315
},
300
316
"createTransport": {
301
317
"type": "object",
302
318
"required": [
303
319
"direction"
304
320
],
305
321
"properties": {
306
322
"direction": {
307
323
"type": "string",
308
324
"description": "Whether this transport will send or receive media.",
309
325
"knownValues": [
310
326
"send",
311
327
"recv"
312
328
]
313
329
}
314
330
},
315
331
"description": "Requests a new WebRTC transport for the joined channel."
316
332
},
317
333
"producerRemoved": {
318
334
"type": "object",
319
335
"required": [
320
336
"producerId",
321
337
"did"
322
338
],
323
339
"properties": {
324
340
"did": {
325
341
"type": "string",
326
342
"format": "did",
327
343
"description": "Whose producer this was."
328
344
},
329
345
"producerId": {
330
346
"type": "string",
331
347
"description": "The producer that closed."
332
348
}
333
349
},
334
350
"description": "A peer's producer closed."
335
351
},
336
352
"rtpCapabilities": {
337
353
"type": "object",
338
354
"properties": {
339
355
"payload": {
340
356
"type": "unknown",
341
357
"description": "The opaque mediasoup capability blob."
342
358
}
343
359
},
344
360
"description": "The RTP capabilities a WebRTC endpoint supports."
345
361
},
346
362
"connectTransport": {
347
363
"type": "object",
348
364
"required": [
349
365
"transportId",
350
366
"dtlsParameters"
351
367
],
352
368
"properties": {
353
369
"transportId": {
354
370
"type": "string",
355
371
"description": "The transport to connect."
356
372
},
357
373
"dtlsParameters": {
358
374
"type": "unknown",
359
375
"description": "The opaque mediasoup DTLS parameters blob."
360
376
}
361
377
},
362
378
"description": "Completes DTLS negotiation for a transport this connection created."
363
379
},
364
380
"transportOptions": {
365
381
"type": "object",
366
382
"required": [
367
383
"id",
368
384
"iceParameters",
369
385
"iceCandidates",
370
386
"dtlsParameters"
371
387
],
372
388
"properties": {
373
389
"id": {
374
390
"type": "string",
375
391
"description": "The transport's identifier."
376
392
},
377
393
"direction": {
378
394
"type": "string",
379
395
"description": "Which side of the call this transport carries.",
380
396
"knownValues": [
381
397
"send",
382
398
"recv"
383
399
]
384
400
},
385
401
"iceCandidates": {
386
-
"type": "unknown",
387
-
"description": "The opaque mediasoup ICE candidates blob."
402
+
"type": "array",
403
+
"items": {
404
+
"type": "unknown",
405
+
"description": "One opaque mediasoup ICE candidate."
406
+
},
407
+
"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."
388
408
},
389
409
"iceParameters": {
390
410
"type": "unknown",
391
411
"description": "The opaque mediasoup ICE parameters blob."
392
412
},
393
413
"dtlsParameters": {
394
414
"type": "unknown",
395
415
"description": "The opaque mediasoup DTLS parameters blob."
396
416
}
397
417
},
398
418
"description": "Parameters for creating one side of a WebRTC transport."
399
419
},
400
420
"moderationChanged": {
401
421
"type": "object",
402
422
"required": [
403
423
"did",
404
424
"muted",
405
425
"deafened"
406
426
],
407
427
"properties": {
408
428
"did": {
409
429
"type": "string",
410
430
"format": "did",
411
431
"description": "Whose state changed."
412
432
},
413
433
"muted": {
414
434
"type": "boolean",
415
-
"description": "Whether the microphone is server-muted."
435
+
"description": "Whether the microphone is muted, for any reason."
416
436
},
417
437
"deafened": {
418
438
"type": "boolean",
419
-
"description": "Whether incoming audio is server-silenced."
439
+
"description": "Whether incoming audio is silenced, for any reason."
440
+
},
441
+
"serverMuted": {
442
+
"type": "boolean",
443
+
"description": "Whether a moderator muted them. When this is true the peer cannot unmute themselves."
444
+
},
445
+
"serverDeafened": {
446
+
"type": "boolean",
447
+
"description": "Whether a moderator deafened them. When this is true the peer cannot undeafen themselves."
420
448
}
421
449
},
422
-
"description": "A peer's server-enforced mute or deafen state changed."
450
+
"description": "A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them."
423
451
},
424
452
"getRtpCapabilities": {
425
453
"type": "object",
426
454
"required": [],
427
455
"properties": {},
428
456
"description": "Requests the router's RTP capabilities for the joined channel."
429
457
}
430
458
},
431
459
"$type": "com.atproto.lexicon.schema",
432
460
"lexicon": 1
433
461
}