Initial commit
This commit is contained in:
81
README.md
Normal file
81
README.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# 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
|
||||
```
|
Reference in New Issue
Block a user