Index | Thread | Search

From:
Alexandre Ratchov <alex@caoua.org>
Subject:
net/dino: Lower audio device latency
To:
kirill@korins.ky, ports@openbsd.org
Date:
Mon, 14 Jul 2025 12:45:35 +0200

Download raw body.

Thread
net/dino uses the default gstreamer audio device latency of 200ms. It
is huge for this purpose and makes phone calls unpleasant. This diff
is to set it to 20ms.

Long version:

Audio packets are received into a network buffer (aka a jitter buffer,
of around 50ms-100ms) to accomodate with the network jitter and the
difference in sample rate between the two peers. Then, small chunks of
data are retrieved periodically from the jitter buffer and sent to the
audio device, which queues them in its own audio buffer.

Unlike the jitter buffer, the audio buffer doesn't need to be
large. It needs to be just large enough to leave the program the time
to copy an audio block from the jitter buffer to the device, which is
very fast. 10ms-20ms would be enough.

OK?

Index: Makefile
===================================================================
RCS file: /cvs/ports/net/dino/Makefile,v
diff -u -p -r1.38 Makefile
--- Makefile	19 Apr 2025 17:07:52 -0000	1.38
+++ Makefile	14 Jul 2025 10:19:20 -0000
@@ -1,5 +1,6 @@
 COMMENT=	XMPP desktop client
 VERSION=	0.5.0
+REVISION=	0
 DISTNAME=	dino-${VERSION}
 CATEGORIES=	net x11
 
Index: patches/patch-plugins_rtp_src_device_vala
===================================================================
RCS file: patches/patch-plugins_rtp_src_device_vala
diff -N patches/patch-plugins_rtp_src_device_vala
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-plugins_rtp_src_device_vala	14 Jul 2025 10:19:20 -0000
@@ -0,0 +1,14 @@
+Index: plugins/rtp/src/device.vala
+--- plugins/rtp/src/device.vala.orig
++++ plugins/rtp/src/device.vala
+@@ -440,6 +440,10 @@ public class Dino.Plugins.Rtp.Device : MediaDevice, Ob
+         debug("Creating device %s", id);
+         plugin.pause();
+         element = device.create_element(id);
++        if (media == "audio" && is_sink) {
++            // lower the audio device latency from 200ms (the default) to 20ms.
++            element.@set("buffer-time", 20000);
++        }
+         if (is_sink) {
+             element.@set("async", false);
+             element.@set("sync", false);