stream_peeker


Dump frames in console output

stream_peeker is commandline utility to:

  • Apply a load on a camera but not on the receiving system
  • Assess how a videostream arrives on a system.

It doesn't decode and render video, by default doesn't do anything with the data it receives.  That doesn't sound very useful...  It's original purpose was to just apply a (potentially large) load on the network and device(s), without loading the receiver PC.

Set some parameters to make it print basic frame information on the terminal output. This way one can conveniently peek into a stream and use it for troubleshooting. The tool is made for Axis cameras, it knows the URL to use while you only specify the IP address. For other brands, the -u parameter allows specifying the full URL. But this has only seen limited testing, the RTSP receiver inside stream_peeker may not be able to deal with the "dialect" of other camera brands.

When you don't supply parameters at all, it prints an overview of the supported options, including examples. See below.



Usage: stream_peeker [options] host [[options] host ...]

Connect to one or more Axis RTP streams and dump RTP/H.264 analysis information
until a key is pressed.

Examples:

- Don't dump anything, just put a load on the camera
stream_peeker 192.168.0.90

- Put a load on four cameras, three having similar addresses
stream_peeker 192.168.0.90 91 92 172.20.15.80

- Print timing information about entire videoframes as they are received
(this is the most usefull option)

stream_peeker -M 192.168.0.90

- Like above, but use UDP instead of TCP streaming (sometimes even more usefull)

stream_peeker -s udp -M 192.168.0.90

- Dump frames and packet loss
stream_peeker -s udp -a rtpseqalarm -M 192.168.0.90

- Dump RTP info to stdout of default stream from 192.168.0.90, 91 and 92:
stream_peeker -a dumprtp -F - 192.168.0.90 91 92

- Dump RTP info of 640x480 stream from two cameras, each to it's own file:
stream_peeker -a dumprtp -r 640x480 -F file1.txt 192.168.0.90 -F file2.txt 91

Options (default value):
-a analysers     Comma-separated list of analysers (none).
Supported analysers:
dumprtp:     Dump RTP header info
dumpnal:     Dump NAL header info
rtpseqalarm: Print warning on missed RTP sequence numbers
bitrate:     Print bitrate statistics every minute
-M               Print videoframe info (none)
-s streaming     udp, tcp (tcp)
-e encoding      jpeg, h264 (h264)
-f fps           Framerate (camera-default)
-r XxY           Image resolution (camera-default)
-c compression   Compression value to use 0..100 (camera-default)
-t Kbps          Target bitrate (camera-default)
-m Kbps          Max bitrate (camera-default)
-o bitrate_priority    none, framerate, quality (camera-default)
-g gop           GOP length (camera-default)
-n X             Quit after X frames (run endless)
-F name          Write to filename 'Name' (stdout)
-p path          Write to path 'path' (current directory)
-U username      (root)
-P password      (pass)
-S recv_bufsize  Socket receive buffer size (OS default)
-E seconds       End after specified time (run endless)
-u url           User-specified URL. Overrules e,f,r,c,t,m,o,g (none)
-T medianame     Track. Use in conjuction with -u (first server supplied media)
-x port          Alternative RTSP port (554)

Build: Apr 28 2020

Commandline switches are applied to all IP addresses "to the right" and overwrite commandline switches to the left. For example, below will request two streams of resolution 640x480 because both IP addresses are to the right of this setting. The first one will be a TCP stream because that's the default streaming method, the second one will use UDP streaming because the streaming setting was redefined. Both streams will be printed on frame level (which makes a messy output)

stream_peeker -r 640x480 -M 192.168.0.90 -s udp 91

Known issues

  • Handling events in Windows console not optimal: program quits after few keypresses outside window


Release notes

Version 1.0.4, oct 31, 2023

Fixed:

  • Sourcecode and toolchain in sync with llv
  • Compatibility issue with Windows 11, relevant for TCP streaming

version 1.0.3, aug 5, 2020

Changed:

  • Changed time column into stream duration in milliseconds

Fixed:

  • Frames actually got decoded, this is now removed
  • Corrected packet counters in summary line

version 1.0.2, july 6, 2020

Fixed:

  • -n option working
  • capture delta-time column shows correct value again

version 1.0.1, april 28, 2020

Changed:

  • Updated C++ compiler
  • Source code in sync with llv
  • Small textual improvements

version 1.0.0, feb 2018

Initial release