1syntax = "proto3";
2
3package livekit;
4option go_package = "github.com/livekit/protocol/livekit";
5option csharp_namespace = "LiveKit.Proto";
6option ruby_package = "LiveKit::Proto";
7
8import "livekit_models.proto";
9import "livekit_egress.proto";
10
11// Room service that can be performed on any node
12// they are Twirp-based HTTP req/responses
13service RoomService {
14 // Creates a room with settings. Requires `roomCreate` permission.
15 // This method is optional; rooms are automatically created when clients connect to them for the first time.
16 rpc CreateRoom(CreateRoomRequest) returns (Room);
17
18 // List rooms that are active on the server. Requires `roomList` permission.
19 rpc ListRooms(ListRoomsRequest) returns (ListRoomsResponse);
20
21 // Deletes an existing room by name or id. Requires `roomCreate` permission.
22 // DeleteRoom will disconnect all participants that are currently in the room.
23 rpc DeleteRoom(DeleteRoomRequest) returns (DeleteRoomResponse);
24
25 // Lists participants in a room, Requires `roomAdmin`
26 rpc ListParticipants(ListParticipantsRequest) returns (ListParticipantsResponse);
27
28 // Get information on a specific participant, Requires `roomAdmin`
29 rpc GetParticipant(RoomParticipantIdentity) returns (ParticipantInfo);
30
31 // Removes a participant from room. Requires `roomAdmin`
32 rpc RemoveParticipant(RoomParticipantIdentity) returns (RemoveParticipantResponse);
33
34 // Mute/unmute a participant's track, Requires `roomAdmin`
35 rpc MutePublishedTrack(MuteRoomTrackRequest) returns (MuteRoomTrackResponse);
36
37 // Update participant metadata, will cause updates to be broadcasted to everyone in the room. Requires `roomAdmin`
38 rpc UpdateParticipant(UpdateParticipantRequest) returns (ParticipantInfo);
39
40 // Subscribes or unsubscribe a participant from tracks. Requires `roomAdmin`
41 rpc UpdateSubscriptions(UpdateSubscriptionsRequest) returns (UpdateSubscriptionsResponse);
42
43 // Send data over data channel to participants in a room, Requires `roomAdmin`
44 rpc SendData(SendDataRequest) returns (SendDataResponse);
45
46 // Update room metadata, will cause updates to be broadcasted to everyone in the room, Requires `roomAdmin`
47 rpc UpdateRoomMetadata (UpdateRoomMetadataRequest) returns (Room);
48}
49
50message CreateRoomRequest {
51 // name of the room
52 string name = 1;
53 // number of seconds to keep the room open if no one joins
54 uint32 empty_timeout = 2;
55 // limit number of participants that can be in a room
56 uint32 max_participants = 3;
57 // override the node room is allocated to, for debugging
58 string node_id = 4;
59 // metadata of room
60 string metadata = 5;
61 // egress
62 RoomEgress egress = 6;
63}
64
65message RoomEgress {
66 RoomCompositeEgressRequest room = 1;
67 AutoTrackEgress tracks = 2;
68}
69
70message ListRoomsRequest {
71 // when set, will only return rooms with name match
72 repeated string names = 1;
73}
74
75message ListRoomsResponse {
76 repeated Room rooms = 1;
77}
78
79message DeleteRoomRequest {
80 // name of the room
81 string room = 1;
82}
83
84message DeleteRoomResponse {
85}
86
87message ListParticipantsRequest {
88 // name of the room
89 string room = 1;
90}
91
92message ListParticipantsResponse {
93 repeated ParticipantInfo participants = 1;
94}
95
96message RoomParticipantIdentity {
97 // name of the room
98 string room = 1;
99 // identity of the participant
100 string identity = 2;
101}
102
103message RemoveParticipantResponse {
104}
105
106message MuteRoomTrackRequest {
107 // name of the room
108 string room = 1;
109 string identity = 2;
110 // sid of the track to mute
111 string track_sid = 3;
112 // set to true to mute, false to unmute
113 bool muted = 4;
114}
115
116message MuteRoomTrackResponse {
117 TrackInfo track = 1;
118}
119
120message UpdateParticipantRequest {
121 string room = 1;
122 string identity = 2;
123 // metadata to update. skipping updates if left empty
124 string metadata = 3;
125 // set to update the participant's permissions
126 ParticipantPermission permission = 4;
127}
128
129message UpdateSubscriptionsRequest {
130 string room = 1;
131 string identity = 2;
132 // list of sids of tracks
133 repeated string track_sids = 3;
134 // set to true to subscribe, false to unsubscribe from tracks
135 bool subscribe = 4;
136 // list of participants and their tracks
137 repeated ParticipantTracks participant_tracks = 5;
138}
139
140message UpdateSubscriptionsResponse {
141 // empty for now
142}
143
144message SendDataRequest {
145 string room = 1;
146 bytes data = 2;
147 DataPacket.Kind kind = 3;
148 repeated string destination_sids = 4;
149}
150
151message SendDataResponse {
152 //
153}
154
155message UpdateRoomMetadataRequest {
156 string room = 1;
157 // metadata to update. skipping updates if left empty
158 string metadata = 2;
159}