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