# GStreamer Microsecond Timestamp Overlay This is an adaptation of the `clockoverlay` and `timeoverlay` plugins from gstreamer-base. Stripped bare and just overlaying the Linux epoch time, with a microsecond resolution. ## Use-case Examples A single stream solution can be tested like this: ```bash gst-launch-1.0 \ videotestsrc is-live=true do-timestamp=true \ ! msoverlay halignment=left valignment=top \ ! video/x-raw,format=RGB,framerate=30/1,width=640,height=480 \ ! videoconvert \ ! video/x-raw,format=NV12 \ ! nvautogpuh264enc tune=3 \ ! rtph264pay config-interval=0 pt=96 \ ! rtph264depay \ ! h264parse \ ! nvh264dec \ ! msoverlay halignment=left valignment=bottom \ ! autovideosink ``` Take a screenshot of the output above and subtract the top-left number from the bottom-left to see the total pipeline latency. For a more comprehensive solution we can also make the stream traverse the network stack: Server: ```bash gst-launch-1.0 videotestsrc is-live=true do-timestamp=true ! msoverlay halignment=left valignment=top ! video/x-raw,format=RGB,framerate=60/1,width=1920,height=1080 ! videoconvert ! video/x-raw,format=NV12 ! nvautogpuh264enc tune=3 ! rtph264pay config-interval=1 pt=96 ! rtpsink uri=rtp://127.0.0.1:5000 ``` Live client: ```bash gst-launch-1.0 rtpsrc uri=rtp://127.0.0.1:5000?encoding-name=H264 ! rtph264depay ! h264parse ! nvh264dec ! msoverlay halignment=left valignment=bottom ! autovideosink ``` PNG sampling client outputting 5 frames, one per second: ```bash gst-launch-1.0 rtpsrc uri=rtp://127.0.0.1:5000?encoding-name=H264 ! rtph264depay ! h264parse ! nvh264dec ! msoverlay halignment=left valignment=bottom ! videorate drop-only=true ! video/x-raw,framerate=1/1 ! pngenc ! multifilesink num-buffers=10 location="latency_%02d.png" ``` It is essential both the client and server run on the same machine, unless you _really_ trust your system clock accuracy. ## Dependencies TODO. Basically the same dependencies as for building the gstreamer-plugins-base packages. ## Building ```bash # Assuming you're in the project root # Option A is to use the submodule to fetch the GStreamer sources: git submodule update --init --recursive # Older versions require deleting the builddir and omitting the '--reconfigure' option meson setup --reconfigure builddir # Option B is to use an existing GStreamer source by specifying the 'gst_root' (the GStreamer mono-repo root) # meson setup --reconfigure builddir -Dgst_root=${WHERE_I_CLONED_GSTREAMER}/gstreamer meson compile -C builddir # This will install the built plugin file meson install -C builddir # Confirm installation gst-inspect-1.0 | grep msoverlay ``` ## Verification This should show you a fairly extensive list of options and details: ```bash gst-inspect-1.0 msoverlay ``` ## Author & License LGPL-2.1 or whatever newer license GStreamer uses. Please see the LICENSE file for the full text. Please see the upstream project for a full list of authors, at: https://gitlab.freedesktop.org/gstreamer/gstreamer Modifications done specific to this plugin by Stefan Hamminga / [rbts.co](https://rbts.co). ## Repository The project can be found here: https://git.rbts.co/rbts.co/gstreamer-ms-overlay