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

2024-04-02

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


如果我理解正确的话,你有 pcap,但你想从他们那里得到 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 值并说“将它们全部查找为‘有效负载’”

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 http://en.wikipedia.org/wiki/Real-time_Transport_Protocol

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 pcap 文件流式传输到 RTP/RTCP 流? 的相关文章

  • Dart 产生来自另一个流监听器的流事件

    我有一个函数可以生成stream的具体事件 现在我有一个来自存储服务的流 它有自己的事件 寻找一种方法在发生变化时产生我的事件storage stream 这段代码片段并不能解决问题 Stream
  • 如何在 Bash 中添加到流之前?

    假设我在 bash 中有以下命令 one two one运行很长时间产生输出流并且two对该流的每一行执行快速操作 但是two除非它读取的第一个值告诉它每行要读取多少个值 否则根本不起作用 one不输出该值 但我提前知道它是什么 假设它是1
  • 如何从 Amazon Kinesis 流获取最新记录?

    我想从 Amazon Kinesis 流中获取最新记录 我打算从该记录中提取时间戳 并将其与消费者应用程序检查点的最后一个记录的时间戳进行比较 以检查消费者是否落后 我无法使用最新的分片迭代器类型 这是因为 LATEST 指向最近的记录之后
  • 从 http 服务流式传输大文件

    我正在编写一个组件来从 HTTP 服务传输大数据 4 GB 该组件采用 URL 和目标流 目标流可以是文件流 也可以是 POSTS 到不同 HTTP 服务的流 甚至两者都是 作为组件的作者 我需要执行以下步骤直到完成 从 HTTP 流中读取
  • WCF Web服务流响应的最佳实践

    我正在尝试从 WCF Web 服务中提取大量数据 请求相当小 而响应消息将非常大 目前 由于 IIS6 对其可分配的内存 1 4GB 有限制 Web 服务正在引发 SystemOutOfMemory 异常 我在一些博客中读到 实施流式传输可
  • 等待完成流的读取请求

    我在用着pngjs https github com niegowski node pngjs读取和写入一些 PNG 我定期收到此错误 Error There are some read requests waiting on finish
  • 基于流的应用程序中的受控/手动错误/恢复处理

    我正在开发一个基于的应用程序Apache Flink 它利用Apache Kafka用于输入和输出 该应用程序可能会被移植到Apache Spark 所以我也将其添加为标签 问题仍然相同 我要求通过 kafka 接收的所有传入消息必须按顺序
  • 使用 ostream 进行 C++ 日志记录

    我正在制作一个记录器 我想创建一个函数log 以流作为输入 例如 log hello lt lt lt lt world lt lt 10 lt lt n 我也希望它是线程安全的 我重新定义了 lt lt 运算符所以我可以这样做 log l
  • 如何通过管道将 OutputStream 传输到 StreamingDataHandler?

    我在 JAX WS 中有一个 Java Web 服务 它从另一个方法返回一个 OutputStream 我似乎无法弄清楚如何将 OutputStream 流式传输到返回的 DataHandler 中 除了创建一个临时文件 写入它 然后再次将
  • 为什么我们需要在重载 >> 和 << 运算符时返回对 istream/ostream 的引用?

    如果我不回来会怎样din or dout 实际上我正在读一本书 其中作者返回了返回流引用 istream operator gt gt istream din vector a for int i 0 i
  • 使用OLEDB从Stream读取AccessFile到DataSet

    我使用 Oledb 将 AccessFile accdb 读取到 DataSet 我不知道表名或列 常规实现是 public void GetAccessDB string filepath this ConnectionString Pr
  • 从流中读取多个 protobuf 消息的 python 示例

    我正在处理来自 spinn3r 的数据 它由序列化为字节流的多个不同的 protobuf 消息组成 http code google com p spinn3r client wiki Protostream http code googl
  • 使用标准 C++/C++11,14,17/C 检查文件是否存在的最快方法?

    我想找到最快的方法来检查标准 C 11 14 17 或 C 中是否存在文件 我有数千个文件 在对它们进行操作之前 我需要检查它们是否全部存在 我可以写什么来代替 SOMETHING 在下面的函数中 inline bool exist con
  • 创建流而无需从中创建物理文件

    我需要创建一个包含服务器上存在的文档的 zip 文件 我使用 Net Package 类来执行此操作 并创建一个新的 Package 即 zip 文件 我必须具有物理文件或流的路径 我试图不创建一个实际的 zip 文件 而是创建一个存在于内
  • 将 InputStream 转换为固定长度字符串的 Stream

    Like in 将 InputStream 转换为给定字符集的 Stream https stackoverflow com questions 30336257 convert inputstream into streamstring
  • ffmpeg创建RTP流

    我正在尝试使用 ffmpeg 进行编码和流式传输 libavcodec libavformat MSVC x64 with Zeranoe builds 这是我的代码 很大程度上改编自编码示例 删除了错误处理 include stdafx
  • 下面的代码是如何工作的?

    众所周知 cout 在 VS2010 中是无缓冲的 参见 Stephan Lavavej 的帖子 here http connect microsoft com VisualStudio feedback details 642876 st
  • 使用azure逻辑应用程序将消息作为字符串发送到azure服务总线

    我正在使用逻辑应用操作 发送消息 向服务总线主题发送消息 在控制台应用程序中读取它时 如果我这样做 SubscriptionClient subClient SubscriptionClient CreateFromConnectionSt
  • 使用 mkfifo 和传输流,这可能吗?

    我想执行一个 bash 脚本来执行以下操作 应用程序 ffmpeg 生成实时传输流 ts 文件 我需要处理这个实时流 执行解复用等 现在我知道这必须通过 FIFO 来完成 但这是我的任务 我需要重定向 ffmpeg 的输出以写入 fifo
  • Dart 流 .asBroadcastStream 内存泄漏

    在我们的 Flutter 应用程序中 我们存在内存泄漏和流未关闭的情况 我们追踪源代码如下 Rx combineLatest asBroadcastStream RxDart的结果 combineLatest 是单订阅流 添加 asBroa

随机推荐