对于 VoIP 语音质量监控应用程序,我需要将传入的 RTP 音频流与参考信号进行比较。对于信号比较本身,我使用预先存在的专用工具。对于其他部分(数据包捕获除外),Gstreamer 库似乎是一个不错的选择。我使用以下管道来模拟一个简单的 VoIP 客户端:
filesrc location=foobar.pcap ! pcapparse ! "application/x-rtp, payload=0, clock-rate=8000"
! gstrtpjitterbuffer ! rtppcmudepay ! mulawdec ! audioconvert
! audioresample ! wavenc ! filesink location=foobar.wav
pcap 文件包含单个 RTP 媒体流。我制作了一个丢失原始 400 个 UDP 数据报中的 50 个的捕获文件。对于给定的音频样本(我的示例长 8 秒):
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
随着一定数量的连续丢包,我希望输出这样的音频信号(' -
'表示静音):
[XXXXXXXXXXXXXXXXXXXXXXXX-----XXXXXXXXXXX]
但是实际保存在音频文件中的是这个(我的例子短了 1 秒):
[XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]
似乎抖动缓冲区(此应用程序的关键部分)无法正常工作。pcapparse
这可能是与元素的不兼容/缺点吗?我是否错过了确保时间同步的管道中的关键部分?还有什么可能导致这种情况?