open source software for IPTV streams monitoring 
License: GPL (GPLv2, GPLv3)

Source code - iptvprobe_v0.6.tbz2

Questions concerning IPTVProbe can be discussed at NetUP's IPTV Forum


Version 0.6

  • MySQL default hostname is and default login is root
  • iptvprobe_server build fixed on some platforms
  • D-Link DIB-120 IP STB binary builds added

Version 0.4

    • Periodic database cleanup.
    • Multiple multicast streams monitoring per probe.
    • Memory leak in iptvprobe_server fixed.


     The database must be fully recreated when upgrading from previous versions.

Version 0.3

  • IGMP requests processing and display of temporal IGMP parameters added.
  • Code cleanup, minor bug fixes.
  • Protocol of data exchange with the probes updated to the new version.

Version 0.2

  • Aminet 110 (ppc) support added.

Version 0.1 ( 08/08/2008)

  • Primary release.
  • Lost packets control added.
  • Display of UDP packets reception speed added.

Network Scheme

Network scheme

Probe (iptvprobe) and Collector Operation Layout

Network scheme

Building and Installing the Software

The software consists of the following parts:

  • Collector - collects statistics from probes. Collected statistics is stored into the database (mysql).
  • Probe - is an application working remotely. Statistics on received IP packets is collected by the probe and sent to the collector. The probe consists of a Linux kernel module (netup_netprobe.ko) and a user level software (iptvprobe).
  • Reports subsystem - is a set of web scripts to visualize collected statistics.

Building and Starting the Collector

Building the collector:

cd iptvprobe/userver/
cmake --debug-output . -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON

Creating the database:

mysqladmin create iptvprobe
mysql iptvprobe < db.sql

Starting the collector:

./iptvprobe_server -l root -s

in this example the collector writes statistics into 'iptvprobe' database on localhost (

Building iptvprobe

Building the application for x86 platform:

cd iptvprobe/udaemon/
cmake --debug-output . -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON

Building the Linux kernel module for x86 platform:

cd iptvprobe/kmodule/

Building the Linux kernel module for sh4 platform (IP STB AmiNET 130):

cd iptvprobe/kmodule/
export CROSS_COMPILE=sh4-unknown-linux-gnu-
make ARCH=sh amino130

The aminet130_bin/ directory contains an already-built Linux kernel module and a user level application for AmiNET 130 IP STB.

Starting the Probe

Loading the Linux kernel module:

cd iptvprobe/kmodule/
insmod netup_netprobe.ko hook_position=0

The hook_position parameter specifies IP packets hook position of netfilter:

0 - process all incoming IP packets (PREROUTING policy) 1 - process all outgoing IP packets (POSTROUTING policy)

Value "0" must be set when running the module on a client's device (for example, IP STB AmiNET 130). In case of running the module on a server sending multicast traffic, value "1" must be set.

It is required to make a node in /dev filesystem and to start the iptvpobe application when netup_netprobe.ko module is successfully loaded:

mknod /dev/iptvprobe c 61 0
cd iptvprobe/udaemon/
./iptvprobe -i -s -r 5 -p 7700

Command line options:

-i Sets the multicast address for monitoring
-s Specifies the IP address of the collector
-p Specifies the port for the collector to accept connections from probes
-r Specifies a run identifier

Fully assembled command can be found in the reports subsystem.

Reports Subsystem

In order to run the reports subsystem it is required to copy all the web scripts from iptvprobe/report_sys/ to cgi-bin folder of your web server:

cd iptvprobe/report_sys/
cp *.pl /var/www/localhost/cgi-bin/

perl and GD must be installed on the system for proper operation.

Point the web browser to the following URL:


where "address" is an address of your web server.

Start page contains the list of probe runs:

Table of iptvprobe runs

"Command to run on probe" column contains fully assembled command which should be run on the probe.

Graphic representation of multicast flow can be viewed using "UDP timeline diagram" or "PCR Arrival Interval" links. Approximately last 30 seconds are shown on the diagram.

Two example runs were done. The first was done on AmiNET 130 IP STB connected via a simple SOHO switch without IGMP snooping support. The second run was done on AmiNET 130 IP STB connected via a Cisco catalyst switch with IGMP snooping. In the first case there is a lot of IP packet losses. The following diagrams visualize these two cases:

Measurement results on IP set-top box AmiNET 130
Measurement results on IP set-top box AmiNET 130

Diagram Explanation

Approximately last 15-30 seconds are shown on the x axis.

The following parameters are shown on the y axis:

  • Count of IP packets grouped within 100 msec.
  • Number of bytes grouped within 100 msec.
  • Red line indicates lost IP packets. A peak is shown on the diagram if discontinuity in "IP packet ID" has been detected. Value 0 means that no packet loss has been detected.

Database Description

SQL tableDescription
runsRuns list. Every run is identified by a unique number
data_ipIP packets detected by the probe. IP packet arrival time (timestamp) is stored in nanoseconds. Also packet ID (header_id) is stored
data_tsMPEG Transport Stream (TS) packets detected by the probe. The following values are stored: PID, PTS/DTS/PCR, counter values (cont_counter)
stat_bandwidthGrouped statistics

IGMP monitoring

Since iptvprobe v0.3, the IGMP requests sent and received by an IP STB may be tracked by the probe. The timestamps of the last group packet before leaving a group and the first packet after joining one are also recorded. These data may be used to evaluate the performance of networking equipment that processes the IGMP requests and IGMP snooping.

Below is an example of this functionality with Aminet 130 IP STB for probe and NetUP Middleware for collector. Cisco Catalyst 3560 was used as a commutator with IGMP Snooping support, and Cisco Catalyst C3550-12T served as an IGMP querier.

TV channels were switched on the IP STB. At that moment the STB sends an IGMP request to leave the multicast group and then another one to join the group at These requests are recorded by the probe and displayed in the web interface together with the timestamps:

NetUP's IPTVProbe, IGMP timings

The items of our interest are embraced in blue frame. It is clear that after the IGMP leave request to the multicast group at, the STB continued to receive packets sent to the said group for another 4996.2 ms. Time delay between the IGMP join request to the group and the first received packet for that group amounted to 80 ms. The delay between the IGMP requests (mainly determined by the STB software) was 12.0 ms.

Altogether, the total time of TV channel switching on the level of IGMP requests sums up to 92 milliseconds. The actual delay until the newly selected channel appears on the TV screen depends on many parameters, including MPEG buffering, audio/video sync, etc., and may comprise up to 1 second or even more.

Besides that, the STB has received the packets from both multicast groups for roughly 5 seconds, thus wasting extra bandwidth. To avoid such a loss, the commutator must be configured to instantaneous leave. This is done as follows:

c3560(config)#ip igmp snooping vlan 1 immediate-leave

When configured in this way, the commutator will switch off the data stream for the abandoned group in an instant. The results are shown in the red frame. It may be seen that after the leave request "IGMPv2: Leave Group" the STB has received no packets for the group. Therefore, at any given moment the STB receives packets of only one channel.

For correct recording of temporal parameters of IGMP requests, the network interface must be set to promisc regime before starting the probe on the STB:

# ifconfig eth0 promisc


  • Diagram improvements (scale, shifting, etc.)
  • "PCR jitter" diagram, other diagrams
  • Probe binary builds for various types of IP STB's
  • Probe availability monitor for network management