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

Swa*_*han 5 stream rtp pcap rtcp

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

con*_*sqa 10

如果我理解正确,你有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
Run Code Online (Sandbox Code Playgroud)

以上记录了数据包捕获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}')
Run Code Online (Sandbox Code Playgroud)

我将变量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
Run Code Online (Sandbox Code Playgroud)

在我的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
Run Code Online (Sandbox Code Playgroud)

现在脚本将这些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
Run Code Online (Sandbox Code Playgroud)

我在自动化框架中做了更多的事情(比如将音频转录为文本并与已知字符串进行比较)......但这超出了你的问题的范围.

我希望有帮助......

有关SSRc的更多信息:http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

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


jes*_*sup 1

进行 pcap 并(我认为)重放它是一件不简单的事情;据我所知,没有任何软件包可以做到这一点。这是可以做到的,但需要对 SIP(​​我假设您正在使用 SIP)和 RTP 有很好的了解。您还必须小心地在正确的时间重播数据包,而不是尽可能快。

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