• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// THIS FILE IS EXPERIMENTAL. BREAKING CHANGES MAY BE MADE AT ANY TIME
2// WITHOUT PRIOR WARNING. THIS FILE SHOULD NOT BE USED IN PRODUCTION CODE.
3
4syntax = "proto2";
5option optimize_for = LITE_RUNTIME;
6package webrtc.rtclog2;
7
8// At the top level, a WebRTC event log is just an EventStream object. Note that
9// concatenating multiple EventStreams in the same file is equivalent to a
10// single EventStream object containing the same events. Hence, it is not
11// necessary to wait for the entire log to be complete before beginning to
12// write it to a file.
13// Note: For all X_deltas fields, we rely on the default value being an
14// empty string.
15message EventStream {
16  // Deprecated - Maintained for compatibility with the old event log.
17  repeated Event stream = 1 [deprecated = true];
18  repeated IncomingRtpPackets incoming_rtp_packets = 2;
19  repeated OutgoingRtpPackets outgoing_rtp_packets = 3;
20  repeated IncomingRtcpPackets incoming_rtcp_packets = 4;
21  repeated OutgoingRtcpPackets outgoing_rtcp_packets = 5;
22  repeated AudioPlayoutEvents audio_playout_events = 6;
23  repeated FrameDecodedEvents frame_decoded_events = 7;
24  // The field tags 8-15 are reserved for the most common events.
25  repeated BeginLogEvent begin_log_events = 16;
26  repeated EndLogEvent end_log_events = 17;
27  repeated LossBasedBweUpdates loss_based_bwe_updates = 18;
28  repeated DelayBasedBweUpdates delay_based_bwe_updates = 19;
29  repeated AudioNetworkAdaptations audio_network_adaptations = 20;
30  repeated BweProbeCluster probe_clusters = 21;
31  repeated BweProbeResultSuccess probe_success = 22;
32  repeated BweProbeResultFailure probe_failure = 23;
33  repeated AlrState alr_states = 24;
34  repeated IceCandidatePairConfig ice_candidate_configs = 25;
35  repeated IceCandidatePairEvent ice_candidate_events = 26;
36  repeated DtlsTransportStateEvent dtls_transport_state_events = 27;
37  repeated DtlsWritableState dtls_writable_states = 28;
38  repeated GenericPacketSent generic_packets_sent = 29;
39  repeated GenericPacketReceived generic_packets_received = 30;
40  repeated GenericAckReceived generic_acks_received = 31;
41  repeated RouteChange route_changes = 32;
42  repeated RemoteEstimates remote_estimates = 33;
43
44  repeated AudioRecvStreamConfig audio_recv_stream_configs = 101;
45  repeated AudioSendStreamConfig audio_send_stream_configs = 102;
46  repeated VideoRecvStreamConfig video_recv_stream_configs = 103;
47  repeated VideoSendStreamConfig video_send_stream_configs = 104;
48}
49
50// DEPRECATED.
51message Event {
52  // TODO(terelius): Do we want to preserve the old Event definition here?
53}
54
55message GenericPacketReceived {
56  // All fields are required.
57  optional int64 timestamp_ms = 1;
58  optional int64 packet_number = 2;
59  // Length of the packet in bytes.
60  optional int32 packet_length = 3;
61
62  // Provided if there are deltas in the batch.
63  optional uint32 number_of_deltas = 16;
64  optional bytes timestamp_ms_deltas = 17;
65  optional bytes packet_number_deltas = 18;
66  optional bytes packet_length_deltas = 19;
67}
68
69message GenericPacketSent {
70  // All fields are required. All lengths in bytes.
71  optional int64 timestamp_ms = 1;
72  optional int64 packet_number = 2;
73  // overhead+payload+padding length = packet_length in bytes.
74  optional int32 overhead_length = 3;
75  optional int32 payload_length = 4;
76  optional int32 padding_length = 5;
77
78  optional uint32 number_of_deltas = 16;
79  optional bytes timestamp_ms_deltas = 17;
80  optional bytes packet_number_deltas = 18;
81  optional bytes overhead_length_deltas = 19;
82  optional bytes payload_length_deltas = 20;
83  optional bytes padding_length_deltas = 21;
84}
85
86message GenericAckReceived {
87  optional int64 timestamp_ms = 1;
88
89  // ID of the received packet.
90  optional int64 packet_number = 2;
91
92  // ID of the packet that was acked.
93  optional int64 acked_packet_number = 3;
94
95  // Timestamp in ms when the packet was received by the other side.
96  optional int64 receive_acked_packet_time_ms = 4;
97
98  optional uint32 number_of_deltas = 16;
99  optional bytes timestamp_ms_deltas = 17;
100  optional bytes packet_number_deltas = 18;
101  optional bytes acked_packet_number_deltas = 19;
102  optional bytes receive_acked_packet_time_ms_deltas = 20;
103}
104
105message IncomingRtpPackets {
106  // required
107  optional int64 timestamp_ms = 1;
108
109  // required - RTP marker bit, used to label boundaries between video frames.
110  optional bool marker = 2;
111
112  // required - RTP payload type.
113  optional uint32 payload_type = 3;
114
115  // required - RTP sequence number.
116  optional uint32 sequence_number = 4;
117
118  // required - RTP monotonic clock timestamp (not actual time).
119  optional fixed32 rtp_timestamp = 5;
120
121  // required - Synchronization source of this packet's RTP stream.
122  optional fixed32 ssrc = 6;
123
124  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.
125
126  // required - The size (in bytes) of the media payload, not including
127  // RTP header or padding. The packet size is the sum of payload, header and
128  // padding.
129  optional uint32 payload_size = 8;
130
131  // required - The size (in bytes) of the RTP header.
132  optional uint32 header_size = 9;
133
134  // required - The size (in bytes) of the padding.
135  optional uint32 padding_size = 10;
136
137  // optional - required if the batch contains delta encoded events.
138  optional uint32 number_of_deltas = 11;
139
140  // Field numbers 12-14 reserved for future use.
141
142  // Optional header extensions.
143  optional uint32 transport_sequence_number = 15;
144  optional int32 transmission_time_offset = 16;
145  optional uint32 absolute_send_time = 17;
146  optional uint32 video_rotation = 18;
147  // `audio_level` and `voice_activity` are always used in conjunction.
148  optional uint32 audio_level = 19;
149  optional bool voice_activity = 20;
150  // TODO(terelius): Add other header extensions like playout delay?
151
152  // Delta encodings.
153  optional bytes timestamp_ms_deltas = 101;
154  optional bytes marker_deltas = 102;
155  optional bytes payload_type_deltas = 103;
156  optional bytes sequence_number_deltas = 104;
157  optional bytes rtp_timestamp_deltas = 105;
158  // Field number 107 reserved for CSRC.
159  optional bytes ssrc_deltas = 106;
160  optional bytes payload_size_deltas = 108;
161  optional bytes header_size_deltas = 109;
162  optional bytes padding_size_deltas = 110;
163  // Field number 111-114 reserved for future use.
164  optional bytes transport_sequence_number_deltas = 115;
165  optional bytes transmission_time_offset_deltas = 116;
166  optional bytes absolute_send_time_deltas = 117;
167  optional bytes video_rotation_deltas = 118;
168  // `audio_level` and `voice_activity` are always used in conjunction.
169  optional bytes audio_level_deltas = 119;
170  optional bytes voice_activity_deltas = 120;
171}
172
173message OutgoingRtpPackets {
174  // required
175  optional int64 timestamp_ms = 1;
176
177  // required - RTP marker bit, used to label boundaries between video frames.
178  optional bool marker = 2;
179
180  // required - RTP payload type.
181  optional uint32 payload_type = 3;
182
183  // required - RTP sequence number.
184  optional uint32 sequence_number = 4;
185
186  // required - RTP monotonic clock timestamp (not actual time).
187  optional fixed32 rtp_timestamp = 5;
188
189  // required - Synchronization source of this packet's RTP stream.
190  optional fixed32 ssrc = 6;
191
192  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.
193
194  // required - The size (in bytes) of the media payload, not including
195  // RTP header or padding. The packet size is the sum of payload, header and
196  // padding.
197  optional uint32 payload_size = 8;
198
199  // required - The size (in bytes) of the RTP header.
200  optional uint32 header_size = 9;
201
202  // required - The size (in bytes) of the padding.
203  optional uint32 padding_size = 10;
204
205  // optional - required if the batch contains delta encoded events.
206  optional uint32 number_of_deltas = 11;
207
208  // Field numbers 12-14 reserved for future use.
209
210  // Optional header extensions.
211  optional uint32 transport_sequence_number = 15;
212  optional int32 transmission_time_offset = 16;
213  optional uint32 absolute_send_time = 17;
214  optional uint32 video_rotation = 18;
215  // `audio_level` and `voice_activity` are always used in conjunction.
216  optional uint32 audio_level = 19;
217  optional bool voice_activity = 20;
218  // TODO(terelius): Add other header extensions like playout delay?
219
220  // Delta encodings.
221  optional bytes timestamp_ms_deltas = 101;
222  optional bytes marker_deltas = 102;
223  optional bytes payload_type_deltas = 103;
224  optional bytes sequence_number_deltas = 104;
225  optional bytes rtp_timestamp_deltas = 105;
226  optional bytes ssrc_deltas = 106;
227  // Field number 107 reserved for CSRC.
228  optional bytes payload_size_deltas = 108;
229  optional bytes header_size_deltas = 109;
230  optional bytes padding_size_deltas = 110;
231  // Field number 111-114 reserved for future use.
232  optional bytes transport_sequence_number_deltas = 115;
233  optional bytes transmission_time_offset_deltas = 116;
234  optional bytes absolute_send_time_deltas = 117;
235  optional bytes video_rotation_deltas = 118;
236  // `audio_level` and `voice_activity` are always used in conjunction.
237  optional bytes audio_level_deltas = 119;
238  optional bytes voice_activity_deltas = 120;
239}
240
241message IncomingRtcpPackets {
242  // required
243  optional int64 timestamp_ms = 1;
244
245  // required - The whole packet including both payload and header.
246  optional bytes raw_packet = 2;
247  // TODO(terelius): Feasible to log parsed RTCP instead?
248
249  // optional - required if the batch contains delta encoded events.
250  optional uint32 number_of_deltas = 3;
251
252  // Delta/blob encodings.
253  optional bytes timestamp_ms_deltas = 101;
254  optional bytes raw_packet_blobs = 102;
255}
256
257message OutgoingRtcpPackets {
258  // required
259  optional int64 timestamp_ms = 1;
260
261  // required - The whole packet including both payload and header.
262  optional bytes raw_packet = 2;
263  // TODO(terelius): Feasible to log parsed RTCP instead?
264
265  // optional - required if the batch contains delta encoded events.
266  optional uint32 number_of_deltas = 3;
267
268  // Delta/blob encodings.
269  optional bytes timestamp_ms_deltas = 101;
270  optional bytes raw_packet_blobs = 102;
271}
272
273message AudioPlayoutEvents {
274  // required
275  optional int64 timestamp_ms = 1;
276
277  // required - The SSRC of the audio stream associated with the playout event.
278  optional uint32 local_ssrc = 2;
279
280  // optional - required if the batch contains delta encoded events.
281  optional uint32 number_of_deltas = 3;
282
283  // Delta encodings.
284  optional bytes timestamp_ms_deltas = 101;
285  optional bytes local_ssrc_deltas = 102;
286}
287
288message FrameDecodedEvents {
289  enum Codec {
290    CODEC_UNKNOWN = 0;
291    CODEC_GENERIC = 1;
292    CODEC_VP8 = 2;
293    CODEC_VP9 = 3;
294    CODEC_AV1 = 4;
295    CODEC_H264 = 5;
296  }
297
298  // required
299  optional int64 timestamp_ms = 1;
300
301  // required - The SSRC of the video stream that the frame belongs to.
302  optional fixed32 ssrc = 2;
303
304  // required - The predicted render time of the frame.
305  optional int64 render_time_ms = 3;
306
307  // required - The width (in pixels) of the frame.
308  optional int32 width = 4;
309
310  // required - The height (in pixels) of the frame.
311  optional int32 height = 5;
312
313  // required - The codec type of the frame.
314  optional Codec codec = 6;
315
316  // required - The QP (quantization parameter) of the frame. Range [0,255].
317  optional uint32 qp = 7;
318
319  // optional - required if the batch contains delta encoded events.
320  optional uint32 number_of_deltas = 15;
321
322  // Delta encodings.
323  optional bytes timestamp_ms_deltas = 101;
324  optional bytes ssrc_deltas = 102;
325  optional bytes render_time_ms_deltas = 103;
326  optional bytes width_deltas = 104;
327  optional bytes height_deltas = 105;
328  optional bytes codec_deltas = 106;
329  optional bytes qp_deltas = 107;
330}
331
332message BeginLogEvent {
333  // required
334  optional int64 timestamp_ms = 1;
335
336  // required
337  optional uint32 version = 2;
338
339  // required
340  optional int64 utc_time_ms = 3;
341}
342
343message EndLogEvent {
344  // required
345  optional int64 timestamp_ms = 1;
346}
347
348message LossBasedBweUpdates {
349  // required
350  optional int64 timestamp_ms = 1;
351
352  // TODO(terelius): Update log interface to unsigned.
353  // required - Bandwidth estimate (in bps) after the update.
354  optional uint32 bitrate_bps = 2;
355
356  // required - Fraction of lost packets since last receiver report
357  // computed as floor( 256 * (#lost_packets / #total_packets) ).
358  // The possible values range from 0 to 255.
359  optional uint32 fraction_loss = 3;
360
361  // TODO(terelius): Is this really needed? Remove or make optional?
362  // TODO(terelius): Update log interface to unsigned.
363  // required - Total number of packets that the BWE update is based on.
364  optional uint32 total_packets = 4;
365
366  // optional - required if the batch contains delta encoded events.
367  optional uint32 number_of_deltas = 5;
368
369  // Delta encodings.
370  optional bytes timestamp_ms_deltas = 101;
371  optional bytes bitrate_bps_deltas = 102;
372  optional bytes fraction_loss_deltas = 103;
373  optional bytes total_packets_deltas = 104;
374}
375
376message DelayBasedBweUpdates {
377  // required
378  optional int64 timestamp_ms = 1;
379
380  // required - Bandwidth estimate (in bps) after the update.
381  optional uint32 bitrate_bps = 2;
382
383  enum DetectorState {
384    BWE_UNKNOWN_STATE = 0;
385    BWE_NORMAL = 1;
386    BWE_UNDERUSING = 2;
387    BWE_OVERUSING = 3;
388  }
389  optional DetectorState detector_state = 3;
390
391  // optional - required if the batch contains delta encoded events.
392  optional uint32 number_of_deltas = 4;
393
394  // Delta encodings.
395  optional bytes timestamp_ms_deltas = 101;
396  optional bytes bitrate_bps_deltas = 102;
397  optional bytes detector_state_deltas = 103;
398}
399
400// Maps RTP header extension names to numerical IDs.
401message RtpHeaderExtensionConfig {
402  // Optional IDs for the header extensions. Each ID is a 4-bit number that is
403  // only set if that extension is configured.
404  // TODO: Can we skip audio level?
405  optional int32 transmission_time_offset_id = 1;
406  optional int32 absolute_send_time_id = 2;
407  optional int32 transport_sequence_number_id = 3;
408  optional int32 video_rotation_id = 4;
409  optional int32 audio_level_id = 5;
410  // TODO(terelius): Add other header extensions like playout delay?
411}
412
413message VideoRecvStreamConfig {
414  // required
415  optional int64 timestamp_ms = 1;
416
417  // required - Synchronization source (stream identifier) to be received.
418  optional uint32 remote_ssrc = 2;
419
420  // required - Sender SSRC used for sending RTCP (such as receiver reports).
421  optional uint32 local_ssrc = 3;
422
423  // optional - required if RTX is configured. SSRC for the RTX stream.
424  optional uint32 rtx_ssrc = 4;
425
426  // IDs for the header extension we care about. Only required if there are
427  // header extensions configured.
428  optional RtpHeaderExtensionConfig header_extensions = 5;
429
430  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
431  // used, we also need a map between RTP payload type and RTX payload type.
432}
433
434message VideoSendStreamConfig {
435  // required
436  optional int64 timestamp_ms = 1;
437
438  // required - Synchronization source (stream identifier) for outgoing stream.
439  // When using simulcast, a separate config should be logged for each stream.
440  optional uint32 ssrc = 2;
441
442  // optional - required if RTX is configured. SSRC for the RTX stream.
443  optional uint32 rtx_ssrc = 3;
444
445  // IDs for the header extension we care about. Only required if there are
446  // header extensions configured.
447  optional RtpHeaderExtensionConfig header_extensions = 4;
448
449  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
450  // used, we also need a map between RTP payload type and RTX payload type.
451}
452
453message AudioRecvStreamConfig {
454  // required
455  optional int64 timestamp_ms = 1;
456
457  // required - Synchronization source (stream identifier) to be received.
458  optional uint32 remote_ssrc = 2;
459
460  // required - Sender SSRC used for sending RTCP (such as receiver reports).
461  optional uint32 local_ssrc = 3;
462
463  // Field number 4 reserved for RTX SSRC.
464
465  // IDs for the header extension we care about. Only required if there are
466  // header extensions configured.
467  optional RtpHeaderExtensionConfig header_extensions = 5;
468
469  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
470  // used, we also need a map between RTP payload type and RTX payload type.
471}
472
473message AudioSendStreamConfig {
474  // required
475  optional int64 timestamp_ms = 1;
476
477  // required - Synchronization source (stream identifier) for outgoing stream.
478  optional uint32 ssrc = 2;
479
480  // Field number 3 reserved for RTX SSRC.
481
482  // IDs for the header extension we care about. Only required if there are
483  // header extensions configured.
484  optional RtpHeaderExtensionConfig header_extensions = 4;
485
486  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
487  // used, we also need a map between RTP payload type and RTX payload type.
488}
489
490message AudioNetworkAdaptations {
491  // required
492  optional int64 timestamp_ms = 1;
493
494  // Bit rate that the audio encoder is operating at.
495  // TODO(terelius): Signed vs unsigned?
496  optional int32 bitrate_bps = 2;
497
498  // Frame length that each encoded audio packet consists of.
499  // TODO(terelius): Signed vs unsigned?
500  optional int32 frame_length_ms = 3;
501
502  // Packet loss fraction that the encoder's forward error correction (FEC) is
503  // optimized for.
504  // Instead of encoding a float, we encode a value between 0 and 16383, which
505  // if divided by 16383, will give a value close to the original float.
506  // The value 16383 (2^14 - 1) was chosen so that it would give good precision
507  // on the one hand, and would be encodable with two bytes in varint form
508  // on the other hand.
509  optional uint32 uplink_packet_loss_fraction = 4;
510
511  // Whether forward error correction (FEC) is turned on or off.
512  optional bool enable_fec = 5;
513
514  // Whether discontinuous transmission (DTX) is turned on or off.
515  optional bool enable_dtx = 6;
516
517  // Number of audio channels that each encoded packet consists of.
518  optional uint32 num_channels = 7;
519
520  // optional - required if the batch contains delta encoded events.
521  optional uint32 number_of_deltas = 8;
522
523  // Delta encodings.
524  optional bytes timestamp_ms_deltas = 101;
525  optional bytes bitrate_bps_deltas = 102;
526  optional bytes frame_length_ms_deltas = 103;
527  optional bytes uplink_packet_loss_fraction_deltas = 104;
528  optional bytes enable_fec_deltas = 105;
529  optional bytes enable_dtx_deltas = 106;
530  optional bytes num_channels_deltas = 107;
531}
532
533message BweProbeCluster {
534  // required
535  optional int64 timestamp_ms = 1;
536
537  // required - The id of this probe cluster.
538  optional uint32 id = 2;
539
540  // required - The bitrate in bps that this probe cluster is meant to probe.
541  optional uint32 bitrate_bps = 3;
542
543  // required - The minimum number of packets used to probe the given bitrate.
544  optional uint32 min_packets = 4;
545
546  // required - The minimum number of bytes used to probe the given bitrate.
547  optional uint32 min_bytes = 5;
548}
549
550message BweProbeResultSuccess {
551  // required
552  optional int64 timestamp_ms = 1;
553
554  // required - The id of this probe cluster.
555  optional uint32 id = 2;
556
557  // required - The resulting bitrate in bps.
558  optional uint32 bitrate_bps = 3;
559}
560
561message BweProbeResultFailure {
562  // required
563  optional int64 timestamp_ms = 1;
564
565  // required - The id of this probe cluster.
566  optional uint32 id = 2;
567
568  enum FailureReason {
569    UNKNOWN = 0;
570    INVALID_SEND_RECEIVE_INTERVAL = 1;
571    INVALID_SEND_RECEIVE_RATIO = 2;
572    TIMEOUT = 3;
573  }
574
575  // required
576  optional FailureReason failure = 3;
577}
578
579message AlrState {
580  // required
581  optional int64 timestamp_ms = 1;
582
583  // required - True if the send rate is application limited.
584  optional bool in_alr = 2;
585}
586
587message IceCandidatePairConfig {
588  enum IceCandidatePairConfigType {
589    UNKNOWN_CONFIG_TYPE = 0;
590    ADDED = 1;
591    UPDATED = 2;
592    DESTROYED = 3;
593    SELECTED = 4;
594  }
595
596  enum IceCandidateType {
597    UNKNOWN_CANDIDATE_TYPE = 0;
598    LOCAL = 1;
599    STUN = 2;
600    PRFLX = 3;
601    RELAY = 4;
602  }
603
604  enum Protocol {
605    UNKNOWN_PROTOCOL = 0;
606    UDP = 1;
607    TCP = 2;
608    SSLTCP = 3;
609    TLS = 4;
610  }
611
612  enum AddressFamily {
613    UNKNOWN_ADDRESS_FAMILY = 0;
614    IPV4 = 1;
615    IPV6 = 2;
616  }
617
618  enum NetworkType {
619    UNKNOWN_NETWORK_TYPE = 0;
620    ETHERNET = 1;
621    WIFI = 2;
622    CELLULAR = 3;
623    VPN = 4;
624    LOOPBACK = 5;
625  }
626
627  // required
628  optional int64 timestamp_ms = 1;
629
630  // required
631  optional IceCandidatePairConfigType config_type = 2;
632
633  // required
634  optional uint32 candidate_pair_id = 3;
635
636  // required
637  optional IceCandidateType local_candidate_type = 4;
638
639  // required
640  optional Protocol local_relay_protocol = 5;
641
642  // required
643  optional NetworkType local_network_type = 6;
644
645  // required
646  optional AddressFamily local_address_family = 7;
647
648  // required
649  optional IceCandidateType remote_candidate_type = 8;
650
651  // required
652  optional AddressFamily remote_address_family = 9;
653
654  // required
655  optional Protocol candidate_pair_protocol = 10;
656}
657
658message IceCandidatePairEvent {
659  enum IceCandidatePairEventType {
660    UNKNOWN_CHECK_TYPE = 0;
661    CHECK_SENT = 1;
662    CHECK_RECEIVED = 2;
663    CHECK_RESPONSE_SENT = 3;
664    CHECK_RESPONSE_RECEIVED = 4;
665  }
666
667  // required
668  optional int64 timestamp_ms = 1;
669
670  // required
671  optional IceCandidatePairEventType event_type = 2;
672
673  // required
674  optional uint32 candidate_pair_id = 3;
675
676  // required
677  optional uint32 transaction_id = 4;
678}
679
680message DtlsTransportStateEvent {
681  enum DtlsTransportState {
682    UNKNOWN_DTLS_TRANSPORT_STATE = 0;
683    DTLS_TRANSPORT_NEW = 1;
684    DTLS_TRANSPORT_CONNECTING = 2;
685    DTLS_TRANSPORT_CONNECTED = 3;
686    DTLS_TRANSPORT_CLOSED = 4;
687    DTLS_TRANSPORT_FAILED = 5;
688  }
689
690  // required
691  optional int64 timestamp_ms = 1;
692
693  // required
694  optional DtlsTransportState dtls_transport_state = 2;
695}
696
697message DtlsWritableState {
698  // required
699  optional int64 timestamp_ms = 1;
700
701  // required
702  optional bool writable = 2;
703}
704
705message RouteChange {
706  // required
707  optional int64 timestamp_ms = 1;
708  // required - True if the route is ready for sending packets.
709  optional bool connected = 2;
710  // required - The per packet data overhead for this route.
711  optional uint32 overhead = 3;
712}
713
714message RemoteEstimates {
715  // required
716  optional int64 timestamp_ms = 1;
717  // optional - value used as a safe measure of available capacity.
718  optional uint32 link_capacity_lower_kbps = 2;
719  // optional - value used as limit for increasing bitrate.
720  optional uint32 link_capacity_upper_kbps = 3;
721
722  // optional - required if the batch contains delta encoded events.
723  optional uint32 number_of_deltas = 4;
724
725  // Delta encodings.
726  optional bytes timestamp_ms_deltas = 101;
727  optional bytes link_capacity_lower_kbps_deltas = 102;
728  optional bytes link_capacity_upper_kbps_deltas = 103;
729}
730