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

时间:2017-02-03 11:57:50

标签: audio gstreamer low-latency

我需要(几乎)使用gstreamer在Linux上进行实时音频捕获。我的问题是我无法将延迟降低到〜210ms以下。我尝试了从麦克风到耳机的简单环回:

gst-launch-1.0 pulsesrc ! alsasink
gst-launch-1.0 alsasrc ! alsasink

两者都产生了相同的延迟。 latency-time的{​​{1}}属性没有帮助(它确实添加了给定的延迟)。

我可以产生我需要的效果
alsasrc

但我无法弄清楚是否可以为pactl load-module module-loopback latency_msec=1 的{​​{1}}插件设置设备延迟。我想,如果有可能的话,我应该向pulsesrc添加一些内容,但无法弄清楚(I searched for it here)及其内容。

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

2 个答案:

答案 0 :(得分:1)

使用pulseink而不是alsasink可以解决问题。试试这个:

gst-launch-1.0 -v alsasrc buffer-time=35000 !  pulsesink

答案 1 :(得分:0)

尽可能接近网络上的零延迟约为20毫秒。此示例生成与在会话描述协议中最大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

听者

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
相关问题