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

时间:2011-05-20 15:06:58

标签: stream rtp pcap rtcp

我已经捕获了三个不同的流作为带有元数据的pcap文件。如何流回RTP / RTCP流?

7 个答案:

答案 0 :(得分:9)

如果我理解正确,你有pcaps,但你想从他们那里获得RTP?

Wireshark UI

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

但是,如果你想自动化这个,并避免使用UI ......你可以使用tshark。我在网上发现了几个教程并用它们构建了一个测试工具,可以自动重建pcap上的audio / 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拉出rtp ssrc值的操作。 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值并说“将所有这些都视为'有效载荷'”

for payload in `cat payloads`; do IFS=:; for byte in $payload; do printf "\\x$byte" >> /jenkins/userContent/sip_1call.raw; done; done

现在脚本正在将那些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的更多信息:http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

有关我正在使用的完整shell脚本的更多详细信息: http://www.continuous-qa.com/2013/04/automated-verification-of-voip-audio.html

答案 1 :(得分:1)

拿一个pcap和(我假设)重播它是一件非常重要的事情;我知道没有包可以做到这一点。它可以完成,但需要非常好的知识SIP(我假设您正在使用SIP)和RTP。您还必须小心在正确的时间重播数据包,而不是尽可能快。

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

答案 2 :(得分:1)

作为SIPp sip测试包的一部分,有一个专门用于此目的的工具。 http://sipp.sourceforge.net/doc/reference.html#PCAP+Play

(免责声明:我自己从未使用过它,虽然我确实使用过SIPp,并且非常喜欢它)

答案 3 :(得分:1)

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

PlayCap - Playback for Wireshark Captures

PlayCap Screenshot

答案 4 :(得分:0)

如果您只想重播/收听音频,可以使用wireshark将RTP有效负载保存在原始音频文件中,然后您可以重新发送(或使用音频编辑器收听),但如果您想重现确切的RTP / RTCP流更复杂

答案 5 :(得分:0)

  

如何流回RTP / RTCP流。

要实现目标,有一个名为rtpplay的特定工具(免费):http://www.cs.columbia.edu/irt/software/rtptools/

答案 6 :(得分:0)

我把头撞在墙上已经有一段时间了......但是,我得到了一个解决方案。首先,请确保您可以正确地拨打软电话/电话...如果您可以将该连接设置得很好,那么剩下的就不那么糟了。

这是我的命令行:

sudo sipp -s [我的电话号码] [ip of my proxy / softswitch] -sf /home/sipp-3.3/uac_pcap_g711.xml -m 2000 -mi [ip of my computer send the load] - d 1200 -trace_rtt -trace_err -stat_delimiter,

所以我使用自己的方案文件,但上面的参数应该可以正常使用。这就是我正在用SIPP做的事情:

sudo:为什么是sudo?如果你不这样做,它就无法创建发送音频/媒体所需的套接字。

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

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

trace_rtt和trace_err:我输出日志文件和性能报告

stat_delimiter:我改变默认值;到,

无论如何这对我有用。

编辑:

另外,请注意我有2000个调用,默认速率(10CPS)...您可能想要现在制作-m 1,以便您可以验证它是否有效。它应播放pcap音频,然后发送DTMF。

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