2
* Copyright (C) <2007> Wim Taymans <wim@fluendo.com>
4
* This library is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Library General Public
6
* License as published by the Free Software Foundation; either
7
* version 2 of the License, or (at your option) any later version.
9
* This library is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Library General Public License for more details.
14
* You should have received a copy of the GNU Library General Public
15
* License along with this library; if not, write to the
16
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
* Boston, MA 02111-1307, USA.
20
#ifndef __RTP_STATS_H__
21
#define __RTP_STATS_H__
24
#include <gst/netbuffer/gstnetbuffer.h>
29
* A sender report structure.
43
* A receiver report structure.
47
guint32 ssrc; /* who the report is from */
50
guint32 exthighestseq;
58
* @time: arrival time of a packet
59
* @address: address of the sender of the packet
60
* @bytes: bytes of the packet including lowlevel overhead
61
* @payload_len: bytes of the RTP payload
63
* Structure holding information about the arrival stats of a packet.
67
gboolean have_address;
68
GstNetAddress address;
75
* @packetsreceived: number of received packets in total
76
* @prevpacketsreceived: number of packets received in previous reporting
78
* @octetsreceived: number of payload bytes received
79
* @bytesreceived: number of total bytes received including headers and lower
80
* protocol level overhead
81
* @max_seqnr: highest sequence number received
82
* @transit: previous transit time used for calculating @jitter
83
* @jitter: current jitter
84
* @prev_rtptime: previous time when an RTP packet was received
85
* @prev_rtcptime: previous time when an RTCP packet was received
86
* @last_rtptime: time when last RTP packet received
87
* @last_rtcptime: time when last RTCP packet received
88
* @curr_rr: index of current @rr block
89
* @rr: previous and current receiver report block
90
* @curr_sr: index of current @sr block
91
* @sr: previous and current sender report block
93
* Stats about a source.
96
guint64 packets_received;
97
guint64 octets_received;
98
guint64 bytes_received;
100
guint32 prev_expected;
101
guint32 prev_received;
110
guint64 packets_sent;
113
/* when we received stuff */
114
GstClockTime prev_rtptime;
115
GstClockTime prev_rtcptime;
116
GstClockTime last_rtptime;
117
GstClockTime last_rtcptime;
119
/* sender and receiver reports */
121
RTPReceiverReport rr[2];
123
RTPSenderReport sr[2];
126
#define RTP_STATS_BANDWIDTH 64000.0
127
#define RTP_STATS_RTCP_BANDWIDTH 3000.0
129
* Minimum average time between RTCP packets from this site (in
130
* seconds). This time prevents the reports from `clumping' when
131
* sessions are small and the law of large numbers isn't helping
132
* to smooth out the traffic. It also keeps the report interval
133
* from becoming ridiculously small during transient outages like
134
* a network partition.
136
#define RTP_STATS_MIN_INTERVAL 5.0
138
* Fraction of the RTCP bandwidth to be shared among active
139
* senders. (This fraction was chosen so that in a typical
140
* session with one or two active senders, the computed report
141
* time would be roughly equal to the minimum report time so that
142
* we don't unnecessarily slow down receiver reports.) The
143
* receiver fraction must be 1 - the sender fraction.
145
#define RTP_STATS_SENDER_FRACTION (0.25)
146
#define RTP_STATS_RECEIVER_FRACTION (1.0 - RTP_STATS_SENDER_FRACTION)
149
* When receiving a BYE from a source, remove the source fomr the database
150
* after this timeout.
152
#define RTP_STATS_BYE_TIMEOUT (2 * GST_SECOND)
157
* Stats kept for a session and used to produce RTCP packet timeouts.
161
gdouble sender_fraction;
162
gdouble receiver_fraction;
163
gdouble rtcp_bandwidth;
164
gdouble min_interval;
165
GstClockTime bye_timeout;
166
guint sender_sources;
167
guint active_sources;
168
guint avg_rtcp_packet_size;
172
void rtp_stats_init_defaults (RTPSessionStats *stats);
174
GstClockTime rtp_stats_calculate_rtcp_interval (RTPSessionStats *stats, gboolean sender, gboolean first);
175
GstClockTime rtp_stats_add_rtcp_jitter (RTPSessionStats *stats, GstClockTime interval);
176
GstClockTime rtp_stats_calculate_bye_interval (RTPSessionStats *stats);
178
#endif /* __RTP_STATS_H__ */