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 "google/protobuf/empty.proto";
9import "google/protobuf/timestamp.proto";
10import "livekit_models.proto";
11import "livekit_egress.proto";
12import "livekit_ingress.proto";
13
14service AnalyticsRecorderService {
15 rpc IngestStats(stream AnalyticsStats) returns (google.protobuf.Empty){};
16 rpc IngestEvents(stream AnalyticsEvents) returns (google.protobuf.Empty){};
17}
18
19enum StreamType {
20 UPSTREAM = 0;
21 DOWNSTREAM = 1;
22}
23
24message AnalyticsVideoLayer {
25 int32 layer = 1;
26 uint32 packets = 2;
27 uint64 bytes = 3;
28 uint32 frames = 4;
29}
30
31message AnalyticsStream {
32 uint32 ssrc = 1;
33 uint32 primary_packets = 2;
34 uint64 primary_bytes = 3;
35 uint32 retransmit_packets = 4;
36 uint64 retransmit_bytes = 5;
37 uint32 padding_packets = 6;
38 uint64 padding_bytes = 7;
39 uint32 packets_lost = 8;
40 uint32 frames = 9;
41 uint32 rtt = 10;
42 uint32 jitter = 11;
43 uint32 nacks = 12;
44 uint32 plis = 13;
45 uint32 firs = 14;
46 repeated AnalyticsVideoLayer video_layers = 15;
47}
48
49message AnalyticsStat {
50 string analytics_key = 1;
51 StreamType kind = 2;
52 google.protobuf.Timestamp time_stamp = 3;
53 string node = 4;
54 string room_id = 5;
55 string room_name = 6;
56 string participant_id = 7;
57 string track_id = 8;
58 float score = 9;
59 repeated AnalyticsStream streams = 10;
60 string mime = 11;
61}
62
63message AnalyticsStats {
64 repeated AnalyticsStat stats = 1;
65}
66
67enum AnalyticsEventType {
68 ROOM_CREATED = 0;
69 ROOM_ENDED = 1;
70 PARTICIPANT_JOINED = 2;
71 PARTICIPANT_LEFT = 3;
72 TRACK_PUBLISHED = 4;
73 TRACK_UNPUBLISHED = 5;
74 TRACK_SUBSCRIBED = 6;
75 TRACK_UNSUBSCRIBED = 7;
76 TRACK_PUBLISHED_UPDATE = 10;
77 PARTICIPANT_ACTIVE = 11;
78 EGRESS_STARTED = 12;
79 EGRESS_ENDED = 13;
80 TRACK_MAX_SUBSCRIBED_VIDEO_QUALITY = 14;
81 RECONNECTED = 15;
82 INGRESS_STARTED = 16;
83 INGRESS_ENDED = 17;
84}
85
86message AnalyticsClientMeta {
87 string region = 1;
88 string node = 2;
89 string client_addr = 3;
90 uint32 client_connect_time = 4;
91 // udp, tcp, turn
92 string connection_type = 5;
93}
94
95message AnalyticsEvent {
96 AnalyticsEventType type = 1;
97 google.protobuf.Timestamp timestamp = 2;
98 string room_id = 3;
99 Room room = 4;
100 string participant_id = 5;
101 ParticipantInfo participant = 6;
102 string track_id = 7;
103 TrackInfo track = 8;
104 string analytics_key = 10;
105 ClientInfo client_info = 11;
106 AnalyticsClientMeta client_meta = 12;
107 string egress_id = 13;
108 VideoQuality max_subscribed_video_quality = 14;
109 ParticipantInfo publisher = 15;
110 string mime = 16;
111 EgressInfo egress = 17;
112 IngressInfo ingress = 18;
113
114}
115
116message AnalyticsEvents {
117 repeated AnalyticsEvent events = 1;
118}