2017-02-03 267 views
2

我需要(幾乎)在Linux上進行實時音頻捕獲,使用gstreamer。我的問題是,我不能減少〜210毫秒以下的延遲。我嘗試了從麥克風到耳機的簡單回送:使用gstreamer進行低延遲音頻捕獲

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

兩者都產生相同的延遲。 alsasrclatency-time屬性沒有幫助(它增加了給定的延遲)。我可能會產生我需要

pactl load-module module-loopback latency_msec=1 

的影響,但我無法弄清楚是否有可能設置的gstreamerpulsesrc插件的設備等待時間。我想,如果可能的話,我應該添加一些東西到stream-properties,但無法弄清楚什麼(I searched for it here)以及如何。

是否有可能爲任何gstreamer來源設置此設備延遲,如果是,如何?

+0

其中一些音頻庫(插孔)在安裝期間提供實時選項...您是否看到過這樣的選項? ...它不是默認設置,因爲它將優先級轉移到音頻處理,從而損害非音頻進程 –

+0

也許您想要測試ALSA級別的延遲並查看這可能是比GStreamer更多的ALSA問題? http://www.alsa-project.org/main/index.php/Test_latency.c – mpr

+0

我還看到在alsasrc上有一個'buffer-time'屬性,你可能想嘗試。默認值是200000微秒,看起來像你看到的延遲可疑。 – mpr

回答

0

關於儘可能接近網絡上的零延遲約爲20ms。這個例子產生與你在會話描述協議中的最大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 
1

使用pulsesink代替alsasink可以解決這個問題。試試這個:

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