Stream 如何将pcap文件流式传输到RTP/RTCP流?

Stream 如何将pcap文件流式传输到RTP/RTCP流?,stream,rtp,pcap,rtcp,Stream,Rtp,Pcap,Rtcp,我用元数据捕获了三个不同的流作为pcap文件。如何将数据流返回到RTP/RTCP流?获取pcap并(我假设)重放它是一件非常重要的事情;据我所知,没有软件包可以这样做。这是可以做到的,但需要对SIP(我假设您正在使用SIP)和RTP有很好的了解。您还必须注意在正确的时间重播数据包,而不是尽可能快 真正知道自己在做什么的人可以在3-5天内编写这样一个工具。如果您只想重放/收听音频,可以使用wireshark将RTP负载保存在原始音频文件中,然后您可以重新发送(或使用音频编辑器收听),但是,如果您想

我用元数据捕获了三个不同的流作为pcap文件。如何将数据流返回到RTP/RTCP流?

获取pcap并(我假设)重放它是一件非常重要的事情;据我所知,没有软件包可以这样做。这是可以做到的,但需要对SIP(我假设您正在使用SIP)和RTP有很好的了解。您还必须注意在正确的时间重播数据包,而不是尽可能快


真正知道自己在做什么的人可以在3-5天内编写这样一个工具。

如果您只想重放/收听音频,可以使用wireshark将RTP负载保存在原始音频文件中,然后您可以重新发送(或使用音频编辑器收听),但是,如果您想要复制准确的RTP/RTCP流,则更为复杂。

有一个工具专门用于此目的,作为SIPp测试包的一部分。

(免责声明:我本人从未使用过它,尽管我确实使用过SIPp本身,并且非常喜欢它)

如何将流返回到RTP/RTCP流


为了实现您的目标,有一个名为rtpplay的特定工具(免费):

我也用它把头撞在墙上一段时间。。。但是,我有一个解决办法。因此,首先,请确保您可以正确地拨打软电话/电话。。。如果你能使这种联系很好,其余的就没那么糟糕了

这是我的命令行:

sudo sipp-s[我的电话号码][我的代理/软交换的ip]-sf/home/sipp-3.3/uac\u pcap\u g711.xml-m 2000-mi[我的计算机发送负载的ip]-d 1200-跟踪\u rtt-跟踪错误-统计分隔符,

所以我使用我自己的场景文件,但是上面的参数应该可以很好地为您服务。以下是我对SIPP所做的:

苏多:为什么是苏多?如果您不这样做,它将无法创建发送音频/媒体所需的套接字

mi:mi指定用于发送媒体的IP。。。我不需要指定端口

d:我在暂停时加了1200毫秒

trace\u rtt和trace\u err:我输出日志文件和性能报告

stat_分隔符:我更改默认值;对,

不管怎么说,这对我很有效

编辑:

另外,请注意,我有2000个电话,在默认速率(10CPS)。。。您现在可能希望将其设置为-m1,以便验证它是否有效。它应该播放pcap音频,然后发送DTMF


在我完成这项工作后,我在Jenkins CI中导入了这一切,并通过Jenkins jobs调用sipp,将csv输出转换为可视图形,并在加载期间执行一些tshark捕获。。。都是通过詹金斯。。。如果您感兴趣,请查看我的博客(在我的个人资料中提到),了解如何设置这些内容的详细信息。

如果我理解正确,您有PCAP,但您想从他们那里获得RTP吗

Wireshark用户界面

您可以使用Wireshark的UI通过以下菜单轻松地从pcap获取RTP:Telephony/RTP/然后显示所有流。。。单击它列出的流,然后“分析”

但是,如果您想自动执行此操作,并避免使用UI。。。你可以用tshark。我在网上找到了一些教程,并用它们构建了一个测试工具,可以自动在pcap上重建音频/rtp,然后生成wav并将该wav上的音频转录为文本

通过Tshark自动化

我正在打一个测试电话,想把录制的pcap转换成音频。为此,我将RTP从pcap中剥离出来,然后将RTP文件转换为原始音频,然后转换为wav

我通过命令行来完成这一切,这样就可以实现自动化。因此,我有一个shell脚本可以实现以下功能:

tshark -a duration:20 -w /jenkins/userContent/sip_1call.pcap
上面记录了20秒的数据包捕获(同时进行呼叫的持续时间),并将数据包输出为sip_1call.pcap

ssrc=$(tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -T fields -e rtp.ssrc -Eseparator=, | sort -u | awk 'FNR ==1 {print}')
我将变量ssrc设置为使用tshark提取rtpsrc值的操作。ssrc是RTP流的标识符。如果您有一个流,那么您将有一个RTP ssrc值。您需要捕获所有的RTP.ssrc并将它们输出到一个文件中,这样可以很容易地再次成为原始音频

sudo tshark -n -r /jenkins/userContent/sip_1call.pcap -R rtp -R "rtp.ssrc == $ssrc" -T fields -e rtp.payload | tee payloads
在我的shell脚本的这一点上,我正在记录的pcap上再次运行tshark,并获取ssrc值并说“将所有这些都作为‘有效负载’查找”

现在脚本将这些RTP.ssrc设置为输出文件,我调用sip_1call.raw

出于我的目的,我还想将原始文件转换为wav,因此我使用了sox:

sox -t raw -r 8000 -v 4 -c 1 -U /jenkins/userContent/sip_1call.raw /jenkins/userContent/sip_1call.wav
我在自动化框架中做了更多的工作(比如将音频转录成文本,并与已知字符串进行比较)。。。但这超出了你的问题范围

我希望这有助于

有关SSRc的更多信息:

有关我正在使用的完整shell脚本的更多详细信息:

您可以使用这个简单、免费的工具重播所有捕获的数据包(包括RTP)


流媒体有点难,所有人都这么说。。不管怎样谢谢迈克
sox -t raw -r 8000 -v 4 -c 1 -U /jenkins/userContent/sip_1call.raw /jenkins/userContent/sip_1call.wav