2017-02-03 17 views
2

Мне нужно (почти) захват аудио в реальном времени в Linux с помощью gstreamer. Моя проблема заключается в том, что я не могу уменьшить задержку ниже ~ 210 мс. Я пробовал простую петлю от микрофона до наушников:Запись с низким латентным звуком с gstreamer

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

Обе производили ту же задержку. Свойство latency-timealsasrc не помогло (оно добавило заданную задержку). Я мог бы произвести эффект, мне нужно с

pactl load-module module-loopback latency_msec=1 

Но я не мог понять, можно ли установить задержку устройства для pulsesrc плагина из gstreamer. Думаю, если это возможно, я должен добавить что-то к stream-properties, но не мог понять, что (I searched for it here) и как.

Можно ли установить задержку устройства для любых gstreamer источников, и если да, то как?

+0

некоторые из этих аудио-библиотек (гнездо) предлагают возможность в режиме реального времени во время установки ... вы видели такой вариант? ... это не значение по умолчанию, поскольку оно передает приоритет на обработку звука в ущерб не-аудио-процессам. –

+0

Возможно, вы хотите протестировать задержку на уровне ALSA и посмотреть, может ли это быть скорее вопросом ALSA, чем GStreamer one ? http://www.alsa-project.org/main/index.php/Test_latency.c – mpr

+0

Я также вижу, что в alsasrc есть свойство 'buffer-time', которое вы можете попробовать. Значение по умолчанию - 200000 микросекунд, которое выглядит подозрительно подобно задержке, которую вы видите. – mpr

ответ

0

примерно так же, как вы можете добраться до нулевой задержки по сети около 20 мс. В этом примере создается тот же RTP-поток, который вы получите от VoIP-звонка с максимальным временем ptime 20 в протоколе описания сеанса. Первый трубопровод - это динамик, а второй трубопровод - слушатель. Я не тестировал это с более низкими задержками или на локальную подставку, но настройка существует для вашей цели.

динамик

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 

 Смежные вопросы

  • Нет связанных вопросов^_^