繁体   English   中英

使用gstreamer对音频rtp进行重采样和取消负载

[英]Resample and depayload audio rtp using gstreamer

我正在开发一个应用程序,其中我在管道一端使用波形文件 ,而在管道另一端使用udpsink

gst-launch-1.0 filesrc location=/path/to/wave/file/Tornado.wav ! wavparse ! audioconvert ! audio/x-raw,channels=1,depth=16,width=16,rate=44100 ! rtpL16pay  ! udpsink host=xxx.xxx.xxx.xxx port=5000

上面的波形文件具有采样率= 44100 Hz和单通道(单声道)

在同一台PC上,我正在使用c++程序应用程序来捕获这些数据包,并将其卸载到无头文件的音频文件中(例如Tornado.raw)

我为此创建的管道基本上是

gst-launch-1.0 udpsrc port=5000 ! "application/x-rtp,media=(string)audio, clock-rate=(int)44100, width=16, height=16, encoding-name=(string)L16, encoding-params=(string)1, channels=(int)1, channel-positions=(int)1, payload=(int)96" ! rtpL16depay ! filesink location=Tornado.raw

现在,这工作正常。 我得到了无头数据,并且当我使用Audacity播放它时,它发挥的很好!

我正在尝试从44100 Hz到8000 Hz的管道中的音频文件重新采样

只是将clock-rate=(int)44100更改为clock-rate=(int)8000并没有帮助(逻辑上也是荒谬的),我正在寻找如何以8000 Hz采样在流水线输出处获取无头文件。

另外,我现在获取的数据是Big-endian,但我希望Little-endian作为输出。 如何在管道中进行设置?

您可能将此与我先前的问题之一相关

首先,您的管道中有一些奇怪的上限-宽度和高度用于此处的视频。 他们可能会被忽略..但仍然..也不确定其他人,但是..

对于实际的问题。 只需使用audioresampleaudioconvert了GStreamer元素在你想要的格式进行传输。

例如

[..] ! rtpL16depay ! audioresample ! audioconvert ! \
audio/x-raw, rate=8000, format=S16LE ! filesink location=Tornado.raw

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM