livekit_analytics.proto

  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}