如何将缓冲区数据传递到Gstreamer中的管道

时间:2019-03-19 13:33:05

标签: gstreamer

我是Gstreamer的新手,正在开发呼叫记录器应用程序。我这样使用gstreamer管道:

udpsrc port=5815 caps="application/x-rtp,channels=(int)1,media=(string)audio,payload=(int)18,clock-rate=(int)8000,encoding-name=(string)G729" ! rtpg729depay ! filesink location=audio.g729

对于编解码器G.729附件B,在通话期间出现静默期的情况下,我收到的CNG有效载荷是不连续的(dtx),即rtp数据不会在整个静默期间连续发送。因此,每当有一个静默期时,我需要手动将静默数据插入管道或正在生成的音频文件中。我有两个问题要解决:

  1. 如何知道什么时候沉默。
  2. 如何将一些静默数据手动传递到管道。

我尝试使用探针为管道中的数据传输添加回调,但是无法使用gst_element_get_static_pad()获取填充。

我能够操纵gstbuffer数据,并用rtpg729depay代码(在良好的插件中)的一些无声音频字节替换无声有效载荷,但是它仅在我们收到无声rtp时才起作用。当没有rtp数据包传输到接收到下一个数据包(无声或正常)之前,我们还需要继续在无用数据或文件中插入无声数据。

任何帮助表示赞赏。预先感谢!

0 个答案:

没有答案