【问题标题】:How to stream pcap file to RTP/RTCP stream?如何将 pcap 文件流式传输到 RTP/RTCP 流?
【发布时间】:2011-08-29 18:05:35
【问题描述】:

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

【问题讨论】:

    标签: stream rtp pcap rtcp


    【解决方案1】:

    如果我理解正确,你有 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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        PlayCap - Playback for Wireshark Captures

        【讨论】:

          【解决方案4】:

          获取一个 pcap 并(我假设)重放它是一件非常重要的事情;我知道没有任何软件包可以做到这一点。它可以完成,但需要非常了解 SIP(​​我假设您正在使用 SIP)和 RTP。您还必须小心在正确的时间重放数据包,不要尽可能快。

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 流媒体有点难,所有人都这么说。无论如何谢谢迈克
            【解决方案6】:

            如何流回 RTP/RTCP 流。

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

            【讨论】:

              【解决方案7】:

              我也为此在墙上撞了一段时间......但是,我找到了解决方案。因此,首先,请确保您可以正确拨打软电话/电话...如果您可以正常连接,那么其余的都还不错。

              这是我的命令行:

              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……如果您有兴趣,请查看我的博客(在我的个人资料中提到),了解如何设置这些内容的详细信息。

              【讨论】:

                猜你喜欢
                • 2019-01-20
                • 2020-01-17
                • 2017-08-11
                • 1970-01-01
                • 1970-01-01
                • 2013-04-13
                • 1970-01-01
                • 1970-01-01
                • 2015-08-01
                相关资源
                最近更新 更多