我正在开发一个应用程序,该应用程序在管道一端和 udpsink 位置使用 wave文件 。
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++
程序应用程序捕获这些数据包,并 depayload 到无标题音频文件(例如Tornado。原始)
我为此创建的管道基本上是
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作为输出。如何在管道中进行设置?
您可以将其与my earlier question之一相关。
答案 0 :(得分:2)
首先,您的管道中有一些怪异的上限-宽度和高度用于此处的视频。他们可能会被忽略..但仍然..也不确定其他人,但是..
对于实际问题。只需使用Gstreamer的audioresample
和audioconvert
元素以所需的格式进行传输即可。
例如
[..] ! rtpL16depay ! audioresample ! audioconvert ! \
audio/x-raw, rate=8000, format=S16LE ! filesink location=Tornado.raw