I have this pipeline that listens for signals from four different callers, a sender (srt in caller mode) and a receiver (srt in caller mode) at each location. The four devices are all raspberry pi’s with debian lite os.
My goal is to implement echo cancellation because the senders are recording audio in a room where the received signal is being played on loudspeakers. It took me a while to work out that my pipeline was failing because rtpL16pay only can handle Big Endian while webrtcechoprobe only works with Little Endian. I finally got the pipeline running without errors, which is great, but I am still in doubt the echo cancellation will actually work. My theory is that it will work with the extended-filter turned on to make up for jitter and delay introduced by the network conditions. My connection is stable and fast, but are there issues with this implementation that I haven’t thought of?
From what I understand echoprobe and dsp would normally be implemented in a single sender receiver pipeline where the actual recording and playing of audio is happening, so i feel like this may be a slightly experimental use of the plugin. Does anyone have any experience or thoughts to share on whether this should work or not or if anything can be improved?
I have not tested it in the actual setup yet.
srtsrc uri=srt://:{audio_send_tn}?mode=listener&latency=100 !
queue !
application/x-rtp,media=audio,clock-rate={clock_rate},encoding-name={encoding_name},channels={channels} !
rtpL16depay !
audioconvert !
audioresample !
audio/x-raw,format=S16LE,channels={channels},rate={clock_rate} !
tee name=tee_tn
srtsrc uri=srt://:{audio_send_dk}?mode=listener&latency=100 !
queue !
application/x-rtp,media=audio,clock-rate={clock_rate},encoding-name={encoding_name},channels={channels} !
rtpL16depay !
audioconvert !
audioresample !
audio/x-raw,format=S16LE,channels={channels},rate={clock_rate} !
tee name=tee_dk
tee_tn. ! queue !
webrtcechoprobe name=probe_dk
tee_dk. ! queue !
webrtcechoprobe name=probe_tn
tee_tn. ! queue !
webrtcdsp probe=probe_tn !
audioconvert ! audioresample !
audio/x-raw,format={audio_format},channels={channels},rate={clock_rate} !
rtpL16pay !
srtsink uri=srt://:{audio_receive_dk}?mode=listener wait-for-connection=false
tee_dk. ! queue !
webrtcdsp probe=probe_dk !
audioconvert ! audioresample !
audio/x-raw,format={audio_format},channels={channels},rate={clock_rate} !
rtpL16pay !
srtsink uri=srt://:{audio_receive_tn}?mode=listener wait-for-connection=false