OLD | NEW |
---|---|
(Empty) | |
1 # Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | |
2 # | |
3 # Use of this source code is governed by a BSD-style license | |
4 # that can be found in the LICENSE file in the root of the source | |
5 # tree. An additional intellectual property rights grant can be found | |
6 # in the file PATENTS. All contributing project authors may | |
7 # be found in the AUTHORS file in the root of the source tree. | |
8 | |
9 """Parses protobuf RTC dumps. | |
10 """ | |
phoglund
2016/05/31 13:47:43
Nit: pull up line #10 to #9.
| |
11 | |
12 from __future__ import division | |
13 | |
14 import os | |
15 import struct | |
16 import sys | |
17 | |
18 | |
19 # makes sure to import correct protobuf | |
phoglund
2016/05/31 13:47:43
Nit: uppercase M, end with .
| |
20 sys.path += [os.path.join("../../", path) for path in | |
21 ["out/Debug/pyproto/webrtc/call/", | |
phoglund
2016/05/31 13:47:43
We should not do import hacks, and especially not
aleloi
2016/06/02 14:01:56
I added the changes to /webrtc/webrtc.gyp and /web
| |
22 "out/Release/pyproto/webrtc/call/", | |
23 "third_party/protobuf/python/"]] | |
24 import rtc_event_log_pb2 as rtc_pb | |
25 | |
26 | |
27 class DataPoint(object): | |
28 """Simple container class for RTP events. | |
29 """ | |
30 | |
31 def __init__(self, rtp_header_str, packet_size, | |
32 arrival_timestamp_us): | |
33 """Builds a data point by parsing an RTP header, and extra information | |
34 about packet size and arrival time. | |
35 | |
36 RTP header structure is defined in RFC 3550 section 5.1. | |
37 | |
38 """ | |
39 self.size = packet_size | |
40 self.arrival_timestamp_ms = arrival_timestamp_us / 1000 | |
41 (first2header_bytes, self.sequence_number, | |
42 self.timestamp, self.ssrc | |
43 ) = struct.unpack_from("!HHII", rtp_header_str, 0) | |
44 self.payload_type = first2header_bytes & 0b01111111 | |
45 | |
46 | |
47 def parse_protobuf(file_path): | |
48 """Parses RTC event log from protobuf file. | |
49 | |
50 Args: | |
51 file_path: path to protobuf file of RTC event stream | |
52 | |
53 Returns: | |
54 all RTP packet events from the event stream as a list of DataPoints | |
55 """ | |
56 event_stream = rtc_pb.EventStream() | |
57 with open(file_path, "rb") as f: | |
58 event_stream.ParseFromString(f.read()) | |
59 | |
60 return [DataPoint(event.rtp_packet.header, | |
61 event.rtp_packet.packet_length, | |
62 event.timestamp_us) | |
63 for event in event_stream.stream | |
64 if event.HasField("rtp_packet")] | |
OLD | NEW |