【发布时间】:2011-08-29 18:05:35
【问题描述】:
我已经捕获了三个不同的流作为带有元数据的 pcap 文件。如何流回 RTP/RTCP 流?
【问题讨论】:
我已经捕获了三个不同的流作为带有元数据的 pcap 文件。如何流回 RTP/RTCP 流?
【问题讨论】:
如果我理解正确,你有 pcaps,但你想从他们那里得到 RTP?
Wireshark 用户界面
您可以使用 Wireshark 的 UI 轻松地通过菜单从 pcap 获取 RTP:电话/RTP/ 然后显示所有流...单击它列出的流,然后“分析”。
但是,如果您想自动执行此操作并避免使用 UI……您可以使用 tshark。我在网上找到了几个教程,并使用它们构建了一个测试工具,该工具可以自动重建 pcap 上的音频/rtp,然后制作一个 wav 并将该 wav 上的音频转录为文本。
使用 Tshark 自动化
我正在打一个测试电话,想将录制的 pcap 转换为音频。为此,我从 pcap 中剥离了 RTP,然后将 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 值并说“将它们全部查找为 'payload'”
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
【讨论】:
有一个专门用于此目的的工具,作为 SIPp sip 测试包的一部分。 http://sipp.sourceforge.net/doc/reference.html#PCAP+Play
(免责声明:我自己从未使用过它,虽然我确实使用过 SIPp,并且非常喜欢它)
【讨论】:
您可以使用这个简单的免费工具重放所有捕获的数据包(包括 RTP)。
【讨论】:
获取一个 pcap 并(我假设)重放它是一件非常重要的事情;我知道没有任何软件包可以做到这一点。它可以完成,但需要非常了解 SIP(我假设您正在使用 SIP)和 RTP。您还必须小心在正确的时间重放数据包,不要尽可能快。
真正了解自己在做什么的人可以在 3-5 天内编写出这样的工具。
【讨论】:
如果您只想重播/收听音频,您可以使用 wireshark 将 RTP 有效负载保存在原始音频文件中,然后您可以重新发送(或使用音频编辑器收听),但如果您想重现确切的 RTP/RTCP 流更复杂
【讨论】:
如何流回 RTP/RTCP 流。
为了实现您的目标,有一个名为 rtpplay 的特定工具(免费):http://www.cs.columbia.edu/irt/software/rtptools/
【讨论】:
我也为此在墙上撞了一段时间......但是,我找到了解决方案。因此,首先,请确保您可以正确拨打软电话/电话...如果您可以正常连接,那么其余的都还不错。
这是我的命令行:
sudo sipp -s [我的电话号码] [我的代理/软交换机的 ip] -sf /home/sipp-3.3/uac_pcap_g711.xml -m 2000 -mi [我的计算机发送负载的 ip] - d 1200 -trace_rtt -trace_err -stat_delimiter,
所以我使用的是我自己的场景文件,但是上面的参数应该适合你。这就是我对 SIPP 所做的事情:
sudo:为什么是 sudo?如果你不 sudo 这个,它就不能创建发送音频/媒体所需的套接字。
mi: mi 指定了您发送媒体的 IP... 我不需要指定端口。
d:我在暂停中增加了 1200 毫秒
trace_rtt和trace_err:我输出日志文件和性能报告
stat_delimiter:我更改默认值;到,
无论如何,这对我有用。
编辑:
另外,请注意,我以默认速率 (10CPS) 进行了 2000 次呼叫...您现在可能希望将其设置为 -m 1 以便您可以验证它是否有效。它应该播放 pcap 音频,然后发送 DTMF。
完成这项工作后,我将这一切导入 Jenkins CI 并通过 Jenkins 作业调用 sipp,并将 csv 输出转换为可视图形,并在加载过程中进行一些 tshark 捕获……全部通过 Jenkins……如果您有兴趣,请查看我的博客(在我的个人资料中提到),了解如何设置这些内容的详细信息。
【讨论】: