98 lines
3.2 KiB
Markdown
98 lines
3.2 KiB
Markdown
# 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 <stefan@rbts.co> / [rbts.co](https://rbts.co).
|
|
|
|
## Repository
|
|
|
|
The project can be found here:
|
|
|
|
https://git.rbts.co/rbts.co/gstreamer-ms-overlay
|