Skip to repository content

tenant.openagents/omega

No repository description is available.

OpenAgents Git authority 2026-07-28T04:01:07.656Z Public web read
NIP-34 coordinate30617:7649603503856e5148d571eac2766b288a8ff1e9e35d380337a1d2b0015b4f92:omega
MaintainersHidden in public view
References2 branches · 1 tag
Read-only clonegit clone https://openagents.com/git/tenant.openagents/omega.git
Browse files

livekit_egress.proto

264 lines · 6.7 KB · text
1syntax = "proto3";
2
3package livekit;
4option go_package = "github.com/livekit/protocol/livekit";
5option csharp_namespace = "LiveKit.Proto";
6option ruby_package = "LiveKit::Proto";
7
8service Egress {
9  // start recording or streaming a room, participant, or tracks
10  rpc StartRoomCompositeEgress(RoomCompositeEgressRequest) returns (EgressInfo);
11  rpc StartTrackCompositeEgress(TrackCompositeEgressRequest) returns (EgressInfo);
12  rpc StartTrackEgress(TrackEgressRequest) returns (EgressInfo);
13
14  // update web composite layout
15  rpc UpdateLayout(UpdateLayoutRequest) returns (EgressInfo);
16
17  // add or remove stream endpoints
18  rpc UpdateStream(UpdateStreamRequest) returns (EgressInfo);
19
20  // list available egress
21  rpc ListEgress(ListEgressRequest) returns (ListEgressResponse);
22
23  // stop a recording or stream
24  rpc StopEgress(StopEgressRequest) returns (EgressInfo);
25}
26
27// composite using a web browser
28message RoomCompositeEgressRequest {
29  string room_name = 1;         // required
30  string layout = 2;            // (optional)
31  bool audio_only = 3;          // (default false)
32  bool video_only = 4;          // (default false)
33  string custom_base_url = 5;   // (default https://recorder.livekit.io)
34  oneof output {                // required
35    EncodedFileOutput file = 6;
36    StreamOutput stream = 7;
37    SegmentedFileOutput segments = 10;
38  }
39  oneof options {
40    EncodingOptionsPreset preset = 8; // (default H264_720P_30)
41    EncodingOptions advanced = 9;     // (optional)
42  }
43}
44
45// containerize up to one audio and one video track
46message TrackCompositeEgressRequest {
47  string room_name = 1;      // required
48  string audio_track_id = 2; // (optional)
49  string video_track_id = 3; // (optional)
50  oneof output {             // required
51    EncodedFileOutput file = 4;
52    StreamOutput stream = 5;
53    SegmentedFileOutput segments = 8;
54  }
55  oneof options {
56    EncodingOptionsPreset preset = 6; // (default H264_720P_30)
57    EncodingOptions advanced = 7;     // (optional)
58  }
59}
60
61// record tracks individually, without transcoding
62message TrackEgressRequest {
63  string room_name = 1;  // required
64  string track_id = 2;   // required
65  oneof output {         // required
66    DirectFileOutput file = 3;
67    string websocket_url = 4;
68  }
69}
70
71enum EncodedFileType {
72  DEFAULT_FILETYPE = 0; // file type chosen based on codecs
73  MP4  = 1;
74  OGG = 2;
75}
76
77message EncodedFileOutput {
78  EncodedFileType file_type = 1; // (optional)
79  string filepath = 2;           // (optional)
80  oneof output {                 // required
81    S3Upload s3 = 3;
82    GCPUpload gcp = 4;
83    AzureBlobUpload azure = 5;
84  }
85}
86
87// Used to generate HLS segments or other kind of segmented output
88message SegmentedFileOutput {
89  SegmentedFileProtocol protocol = 1; // (optional)
90  string filename_prefix = 2;      // (optional)
91  string playlist_name = 3;        // (optional)
92  uint32 segment_duration = 4;     // (optional)
93  oneof output {                   // required
94    S3Upload s3 = 5;
95    GCPUpload gcp = 6;
96    AzureBlobUpload azure = 7;
97  }
98}
99
100message DirectFileOutput {
101  string filepath = 1; // (optional)
102  oneof output {       // required
103    S3Upload s3 = 2;
104    GCPUpload gcp = 3;
105    AzureBlobUpload azure = 4;
106  }
107}
108
109message S3Upload {
110  string access_key = 1;
111  string secret = 2;
112  string region = 3;
113  string endpoint = 4;
114  string bucket = 5;
115}
116
117message GCPUpload {
118  bytes credentials = 1;
119  string bucket = 2;
120}
121
122message AzureBlobUpload {
123  string account_name = 1;
124  string account_key = 2;
125  string container_name = 3;
126}
127
128enum StreamProtocol {
129  DEFAULT_PROTOCOL = 0; // protocol chosen based on urls
130  RTMP = 1;
131}
132
133enum SegmentedFileProtocol {
134  DEFAULT_SEGMENTED_FILE_PROTOCOL = 0;
135  HLS_PROTOCOL = 1;
136}
137
138message StreamOutput {
139  StreamProtocol protocol = 1; // required
140  repeated string urls = 2;    // required
141}
142
143enum AudioCodec {
144  DEFAULT_AC = 0;
145  OPUS = 1;
146  AAC = 2;
147}
148
149enum VideoCodec {
150  DEFAULT_VC = 0;
151  H264_BASELINE = 1;
152  H264_MAIN = 2;
153  H264_HIGH = 3;
154}
155
156message EncodingOptions {
157  int32 width = 1;             // (default 1920)
158  int32 height = 2;            // (default 1080)
159  int32 depth = 3;             // (default 24)
160  int32 framerate = 4;         // (default 30)
161  AudioCodec audio_codec = 5;  // (default OPUS)
162  int32 audio_bitrate = 6;     // (default 128)
163  int32 audio_frequency = 7;   // (default 44100)
164  VideoCodec video_codec = 8;  // (default H264_MAIN)
165  int32 video_bitrate = 9;     // (default 4500)
166}
167
168enum EncodingOptionsPreset {
169  H264_720P_30 = 0;           //  1280x720, 30fps, 3000kpbs, H.264_MAIN / OPUS
170  H264_720P_60 = 1;           //  1280x720, 60fps, 4500kbps, H.264_MAIN / OPUS
171  H264_1080P_30 = 2;          // 1920x1080, 30fps, 4500kbps, H.264_MAIN / OPUS
172  H264_1080P_60 = 3;          // 1920x1080, 60fps, 6000kbps, H.264_MAIN / OPUS
173  PORTRAIT_H264_720P_30 = 4;  //  720x1280, 30fps, 3000kpbs, H.264_MAIN / OPUS
174  PORTRAIT_H264_720P_60 = 5;  //  720x1280, 60fps, 4500kbps, H.264_MAIN / OPUS
175  PORTRAIT_H264_1080P_30 = 6; // 1080x1920, 30fps, 4500kbps, H.264_MAIN / OPUS
176  PORTRAIT_H264_1080P_60 = 7; // 1080x1920, 60fps, 6000kbps, H.264_MAIN / OPUS
177}
178
179message UpdateLayoutRequest {
180  string egress_id = 1;
181  string layout = 2;
182}
183
184message UpdateStreamRequest {
185  string egress_id = 1;
186  repeated string add_output_urls = 2;
187  repeated string remove_output_urls = 3;
188}
189
190message ListEgressRequest {
191  string room_name = 1; // (optional, used to filter results)
192}
193
194message ListEgressResponse {
195  repeated EgressInfo items = 1;
196}
197
198message StopEgressRequest {
199  string egress_id = 1;
200}
201
202enum EgressStatus {
203  EGRESS_STARTING = 0;
204  EGRESS_ACTIVE = 1;
205  EGRESS_ENDING = 2;
206  EGRESS_COMPLETE = 3;
207  EGRESS_FAILED = 4;
208  EGRESS_ABORTED = 5;
209  EGRESS_LIMIT_REACHED = 6;
210}
211
212message EgressInfo {
213  string egress_id = 1;
214  string room_id = 2;
215  string room_name = 13;
216  EgressStatus status = 3;
217  int64 started_at = 10;
218  int64 ended_at = 11;
219  string error = 9;
220  oneof request {
221    RoomCompositeEgressRequest room_composite = 4;
222    TrackCompositeEgressRequest track_composite = 5;
223    TrackEgressRequest track = 6;
224  }
225  oneof result {
226    StreamInfoList stream = 7;
227    FileInfo file = 8;
228    SegmentsInfo segments = 12;
229  }
230}
231
232message StreamInfoList {
233  repeated StreamInfo info = 1;
234}
235
236message StreamInfo {
237  enum Status {
238    ACTIVE = 0;
239    FINISHED = 1;
240    FAILED = 2;
241  }
242
243  string url = 1;
244  int64 started_at = 2;
245  int64 ended_at = 3;
246  int64 duration = 4;
247  Status status = 5;
248}
249
250message FileInfo {
251  string filename = 1;
252  int64 duration = 6;
253  int64 size = 4;
254  string location = 5;
255}
256
257message SegmentsInfo {
258  string playlist_name = 1;
259  int64 duration = 2;
260  int64 size = 3;
261  string playlist_location = 4;
262  int64 segment_count = 5;
263}
264
Served at tenant.openagents/omega Member data and write actions are omitted.