{
"id": "social.colibri.beta.voice.defs",
"defs": {
"ack": {
"type": "object",
"required": [],
"properties": {},
"description": "Answers a heartbeat."
},
"join": {
"type": "object",
"required": [
"channel"
],
"properties": {
"channel": {
"type": "string",
"format": "space-ref",
"description": "The voice channel to join."
}
},
"description": "Joins a voice channel. A connection must join before sending any other frame, and joining a second channel leaves the first."
},
"error": {
"type": "object",
"required": [
"error"
],
"properties": {
"error": {
"type": "string",
"description": "Error name.",
"knownValues": [
"InvalidFrame",
"NotJoined",
"ChannelNotFound",
"NotVoiceChannel",
"Forbidden",
"NotFound"
]
},
"message": {
"type": "string",
"description": "Human-readable detail."
}
},
"description": "Something the client sent could not be acted on."
},
"leave": {
"type": "object",
"required": [],
"properties": {},
"description": "Leaves the voice channel this connection is joined to."
},
"joined": {
"type": "object",
"required": [
"channel"
],
"properties": {
"channel": {
"type": "string",
"format": "space-ref",
"description": "The voice channel now joined."
}
},
"description": "Confirms this connection has joined a voice channel."
},
"consume": {
"type": "object",
"required": [
"transportId",
"producerId",
"rtpCapabilities"
],
"properties": {
"producerId": {
"type": "string",
"description": "The producer to consume."
},
"transportId": {
"type": "string",
"description": "The receive transport to consume on."
},
"rtpCapabilities": {
"type": "unknown",
"description": "This connection's opaque mediasoup RTP capabilities blob."
}
},
"description": "Starts consuming another peer's producer on a receive transport this connection created."
},
"produce": {
"type": "object",
"required": [
"transportId",
"kind",
"rtpParameters",
"source"
],
"properties": {
"kind": {
"type": "string",
"description": "The media kind.",
"knownValues": [
"audio",
"video"
]
},
"source": {
"type": "string",
"description": "What this producer captures.",
"knownValues": [
"microphone",
"camera",
"screen"
]
},
"transportId": {
"type": "string",
"description": "The send transport to produce on."
},
"rtpParameters": {
"type": "unknown",
"description": "The opaque mediasoup RTP parameters blob."
}
},
"description": "Starts producing media on a send transport this connection created."
},
"peerLeft": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Who left."
}
},
"description": "A peer left the voice channel this connection is in."
},
"heartbeat": {
"type": "object",
"required": [],
"properties": {},
"description": "Keeps the connection alive. The server answers with an ack."
},
"peerJoined": {
"type": "object",
"required": [
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Who joined."
}
},
"description": "Another peer joined the voice channel this connection is in."
},
"producerInfo": {
"type": "object",
"required": [
"producerId",
"did",
"kind"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Who is producing this media."
},
"kind": {
"type": "string",
"description": "The media kind.",
"knownValues": [
"audio",
"video"
]
},
"paused": {
"type": "boolean",
"description": "Whether the producer is currently paused."
},
"source": {
"type": "string",
"description": "What the producer captures.",
"knownValues": [
"microphone",
"camera",
"screen"
]
},
"producerId": {
"type": "string",
"description": "The producer's identifier."
}
},
"description": "A media producer available to consume."
},
"setSelfState": {
"type": "object",
"required": [],
"properties": {
"muted": {
"type": "boolean",
"description": "Whether the microphone is muted."
},
"deafened": {
"type": "boolean",
"description": "Whether incoming audio is silenced."
}
},
"description": "Updates this connection's own mute or deafen state. An absent field leaves the current value unchanged."
},
"closeProducer": {
"type": "object",
"required": [
"producerId"
],
"properties": {
"producerId": {
"type": "string",
"description": "The producer to close."
}
},
"description": "Closes a producer this connection owns."
},
"resumeConsumer": {
"type": "object",
"required": [
"consumerId"
],
"properties": {
"consumerId": {
"type": "string",
"description": "The consumer to resume."
}
},
"description": "Resumes a consumer this connection created, which is created paused by default."
},
"speakingUpdate": {
"type": "object",
"required": [
"did",
"speaking"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Who this update is about."
},
"level": {
"type": "integer",
"description": "An audio level in dBFS."
},
"speaking": {
"type": "boolean",
"description": "Whether they are currently speaking."
}
},
"description": "A change in whether someone is currently speaking."
},
"consumerOptions": {
"type": "object",
"required": [
"id",
"producerId",
"kind",
"rtpParameters"
],
"properties": {
"id": {
"type": "string",
"description": "The consumer's identifier."
},
"kind": {
"type": "string",
"description": "The media kind.",
"knownValues": [
"audio",
"video"
]
},
"producerId": {
"type": "string",
"description": "The producer being consumed."
},
"rtpParameters": {
"type": "unknown",
"description": "The opaque mediasoup RTP parameters blob."
}
},
"description": "Parameters for consuming one producer."
},
"createTransport": {
"type": "object",
"required": [
"direction"
],
"properties": {
"direction": {
"type": "string",
"description": "Whether this transport will send or receive media.",
"knownValues": [
"send",
"recv"
]
}
},
"description": "Requests a new WebRTC transport for the joined channel."
},
"producerRemoved": {
"type": "object",
"required": [
"producerId",
"did"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Whose producer this was."
},
"producerId": {
"type": "string",
"description": "The producer that closed."
}
},
"description": "A peer's producer closed."
},
"rtpCapabilities": {
"type": "object",
"properties": {
"payload": {
"type": "unknown",
"description": "The opaque mediasoup capability blob."
}
},
"description": "The RTP capabilities a WebRTC endpoint supports."
},
"connectTransport": {
"type": "object",
"required": [
"transportId",
"dtlsParameters"
],
"properties": {
"transportId": {
"type": "string",
"description": "The transport to connect."
},
"dtlsParameters": {
"type": "unknown",
"description": "The opaque mediasoup DTLS parameters blob."
}
},
"description": "Completes DTLS negotiation for a transport this connection created."
},
"transportOptions": {
"type": "object",
"required": [
"id",
"iceParameters",
"iceCandidates",
"dtlsParameters"
],
"properties": {
"id": {
"type": "string",
"description": "The transport's identifier."
},
"direction": {
"type": "string",
"description": "Which side of the call this transport carries.",
"knownValues": [
"send",
"recv"
]
},
"iceCandidates": {
"type": "array",
"items": {
"type": "unknown",
"description": "One opaque mediasoup ICE candidate."
},
"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."
},
"iceParameters": {
"type": "unknown",
"description": "The opaque mediasoup ICE parameters blob."
},
"dtlsParameters": {
"type": "unknown",
"description": "The opaque mediasoup DTLS parameters blob."
}
},
"description": "Parameters for creating one side of a WebRTC transport."
},
"moderationChanged": {
"type": "object",
"required": [
"did",
"muted",
"deafened"
],
"properties": {
"did": {
"type": "string",
"format": "did",
"description": "Whose state changed."
},
"muted": {
"type": "boolean",
"description": "Whether the microphone is muted, for any reason."
},
"deafened": {
"type": "boolean",
"description": "Whether incoming audio is silenced, for any reason."
},
"serverMuted": {
"type": "boolean",
"description": "Whether a moderator muted them. When this is true the peer cannot unmute themselves."
},
"serverDeafened": {
"type": "boolean",
"description": "Whether a moderator deafened them. When this is true the peer cannot undeafen themselves."
}
},
"description": "A peer's mute or deafen state changed, whether they did it themselves or a moderator did it to them."
},
"getRtpCapabilities": {
"type": "object",
"required": [],
"properties": {},
"description": "Requests the router's RTP capabilities for the joined channel."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}