<div dir="ltr"><div><div><div><div>It is very simple. Initialize a static counter to 0. For each packet received, increment that counter by the size in bytes. Record the time for the first and last packets. There are several time functions available. When you have reached your target number of packets, calculate the bitrate (bytes * 8 / seconds).<br><br></div><div>This is in file gstudpsrc.c, good plug-ins/udp.<br><br></div><div>Line 155 in my version:<br>#define UDP_DEFAULT_BR_PACKET_COUNT    200<br><br></div><div>LIne 176: (part of the property enumeration)<br>  PROP_TGT_PKT_CNT,<br><br></div><div>LIne 215 - define the signals<br>enum<br>{<br>  /* methods */<br>  /* signals */<br>  SIGNAL_BITRATE_MEASURED,<br><br>  /* FILL ME */<br>  LAST_SIGNAL<br>};<br><br>static guint gst_udp_signals[LAST_SIGNAL] = { 0 };<br></div><div><br></div>Line 276 - Send the bitrate to the controlling application as a signal. Define the signal.<br>  /**<br>   * GstUDPSrc::bitrate-measured:<br>   * @gstudpsink: the source emitting the signal<br>   * @bitrate: the measured bitrate, in kbps<br>   *<br>   * Signal emited when the bitrate has been calculated from<br>   * the specified number of packets received.<br>   */<br>  gst_udp_signals[SIGNAL_BITRATE_MEASURED] =<br>      g_signal_new ("bitrate-measured", G_TYPE_FROM_CLASS (klass),<br>      G_SIGNAL_RUN_LAST, 0,<br>      NULL, NULL, gst_udp_marshal_VOID_INT, G_TYPE_NONE, 1,<br>      G_TYPE_INT);<br><br></div>LIne 342 - Define a property to allow the app to set the target number of packets.<br><br>  g_object_class_install_property (gobject_class, PROP_TGT_PKT_CNT,<br>      g_param_spec_int ("packet-count", "Input stream packet count",<br>          "Number of packets to receive to determine input bitrate",<br>          0, 5000, UDP_DEFAULT_BR_PACKET_COUNT, G_PARAM_READWRITE));<br><br></div>Line 384 - Initialize some parameters.<br><br>  udpsrc->target_pkt_cnt = UDP_DEFAULT_BR_PACKET_COUNT;<br>  udpsrc->pkt_rcv_cnt = 0;<br>  udpsrc->bytes_received = 0;<br><br></div>In function gst_udpsrc_create(), starting around line 618 in my version:<br><br>  GST_LOG_OBJECT (udpsrc, "read %d bytes", (int) readsize);<br><br>  if (udpsrc->pkt_rcv_cnt > -1) {<br>    if (G_UNLIKELY (0 == udpsrc->pkt_rcv_cnt))<br>    {<br>      g_get_current_time (&udpsrc->start_time);<br>    }<br>    // Increment the number of packets read.<br>    udpsrc->pkt_rcv_cnt++;<br>    udpsrc->bytes_received += ((int) readsize);<br>    // Check if we have reached the number to determine the incoming bitrate.<br>    if (G_UNLIKELY (udpsrc->pkt_rcv_cnt >= udpsrc->target_pkt_cnt)) {<br>      GTimeVal now;<br>      gint iBitRate;<br>      gint64 delta_time;<br>      // Target has been reached. Calculate the Rx bitrate.<br>      g_get_current_time(&now);<br>      delta_time = (now.tv_sec - udpsrc->start_time.tv_sec) * 1000000;  // Convert seconds to microseconds.<br>      if (now.tv_usec >= udpsrc->start_time.tv_usec) {<br>        delta_time += (now.tv_usec - udpsrc->start_time.tv_usec);<br>      }<br>      else {<br>        delta_time += (now.tv_usec - udpsrc->start_time.tv_usec);<br>      }<br>      // 7812.5 = 8000000 / 1024<br>      // It is used to convert from bytes measured in microseconds to kbits per second.<br>      iBitRate = (gint64)(udpsrc->bytes_received * 7812.5) / delta_time;<br>      GST_DEBUG_OBJECT (udpsrc, "PktsRcv: %d StartSec: %ld StartuSec: %ld RxBytes: %d", udpsrc->target_pkt_cnt,<br>    udpsrc->start_time.tv_sec, udpsrc->start_time.tv_usec, udpsrc->bytes_received);<br>      GST_DEBUG_OBJECT (udpsrc, "StopSec: %ld StopuSec: %ld dTime: %ld BR: %d",<br>        now.tv_sec, now.tv_usec, delta_time, iBitRate);<br>      if (iBitRate < 100)<br>        iBitRate = 512;<br>      // Emit the signal with the bitrate.<br>      g_signal_emit (G_OBJECT (udpsrc),<br>        gst_udp_signals[SIGNAL_BITRATE_MEASURED], 0, iBitRate);<br><br>      udpsrc->pkt_rcv_cnt = -1;  // Prevent ever triggering again.<br>    }<br>  }<br><br>  *buf = GST_BUFFER_CAST (outbuf);<br><br>  return GST_FLOW_OK;<br><br><div><div><div><div><div><div class="gmail_extra">Line 801, get the target packet count property.<br><br>    case PROP_TGT_PKT_CNT:<br>      udpsrc->target_pkt_cnt = g_value_get_int (value);<br>      break;<br><br></div><div class="gmail_extra">Line 851, set the target packet count property.<br><br>    case PROP_TGT_PKT_CNT:<br>      g_value_set_int (value, udpsrc->target_pkt_cnt);<br>      break;<br><br><br><br></div><div class="gmail_extra"><div class="gmail_quote">On Fri, Sep 11, 2015 at 4:05 PM, gstreader <span dir="ltr"><<a href="mailto:reachtoarpi@gmail.com" target="_blank">reachtoarpi@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thanks for your comment. How you calculated elapsed time?<br>
Could you please post that part of code for udpsrc how you calculated<br>
network bandwidth?<br>
<br>
Thanks in advance.<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/How-to-know-network-bandwidth-in-run-time-in-gstreamer-tp4673494p4673589.html" rel="noreferrer" target="_blank">http://gstreamer-devel.966125.n4.nabble.com/How-to-know-network-bandwidth-in-run-time-in-gstreamer-tp4673494p4673589.html</a><br>
Sent from the GStreamer-devel mailing list archive at Nabble.com.<br>
_______________________________________________<br>
gstreamer-devel mailing list<br>
<a href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a><br>
</blockquote></div><br><br>
</div></div></div></div></div></div></div>