使用 gstreamer 进行低延迟音频捕获

ger*_*tom 5 audio gstreamer low-latency

我需要在 Linux 上使用gstreamer. 我的问题是我无法将延迟降低到约 210 毫秒以下。我尝试了从麦克风到耳机的简单环回:

gst-launch-1.0 pulsesrc ! alsasink
gst-launch-1.0 alsasrc ! alsasink
Run Code Online (Sandbox Code Playgroud)

两者都产生相同的延迟。latency-time的属性没有alsasrc帮助(它确实增加了给定的延迟)。我可以产生我需要的效果

pactl load-module module-loopback latency_msec=1
Run Code Online (Sandbox Code Playgroud)

但我不知道是否可以pulsesrcgstreamer. 我想,如果可能的话,我应该添加一些东西stream-properties,但无法弄清楚什么(我在这里搜索)以及如何添加。

是否可以为任何源设置此设备延迟?gstreamer如果可以,如何设置?

Jos*_*itt 0

网络上最接近零延迟的时间约为 20 毫秒。此示例生成的 RTP 流与您从会话描述协议中最大 ptime 为 20 的 VoIP 呼叫中获得的 RTP 流相同。第一个管道是扬声器,第二个管道是听者。我还没有以较低的延迟或本地水槽垫对此进行测试,但该设置确实适合您的目的。

扬声器

gst-launch alsasrc name=mic provide-clock=true actual-buffer-time=20000 do-timestamp=true buffer-time=20000 \
mic. \
! alawenc \
! rtppcmapay max-ptime=20000000 \
! udpsink host=192.168.1.2 port=5000
Run Code Online (Sandbox Code Playgroud)

听众

gst-launch udpsrc port=5000 caps="application/x-rtp, media=(string)audio, clock-rate=(int)8000, encoding-name=(string)PCMA" \
! rtppcmadepay \
! audio/x-alaw, rate=8000, channels=1 \
! alawdec \
! alsasink buffer-time=80000
Run Code Online (Sandbox Code Playgroud)