#!/usr/bin/env python3 import sys import gi gi.require_version('Gst', '1.0') from gi.repository import Gst, GLib from datetime import datetime Gst.init(None) device = sys.argv[1] if len(sys.argv) > 1 else "/dev/video0" port = sys.argv[2] if len(sys.argv) > 2 else "5000" pipeline = Gst.parse_launch(f""" v4l2src device={device} io-mode=2 ! videoconvert ! textoverlay name=overlay halignment=left valignment=top font-desc="Monospace 36" ! x265enc tune=zerolatency speed-preset=ultrafast option-string="bframes=0:keyint=30:scenecut=0" ! h265parse config-interval=1 ! rtph265pay config-interval=1 mtu=1400 ! udpsink host=127.0.0.1 port={port} sync=false async=false """) overlay = pipeline.get_by_name("overlay") def update_text(): overlay.set_property("text", datetime.now().strftime("%H:%M:%S.%f")[:-3]) return True GLib.timeout_add(5, update_text) pipeline.set_state(Gst.State.PLAYING) loop = GLib.MainLoop() try: loop.run() except KeyboardInterrupt: pipeline.set_state(Gst.State.NULL)