1

我有一个 PCAPNG 文件,我需要从中获取 RTP 数据包。具体来说,我的一个 RTP 数据包看起来像......

帧 N:线上 X 字节...

  • 以太网 II,源:...
  • IPv4,源:...
  • TCP,源端口:rstp ...
  • RTSP 交错帧,通道:0x02,163 字节
  • 实时传输协议

...而我从每个数据包中需要的是...

  1. 来自 RTSP 交错帧的通道
  2. RTSP 交错帧的长度
  3. 来自 RTP 的有效负载

...使用这些数据,我将重新创建一个音频和视频文件,以从本地有效负载重新构建完整的视频(播放不是流式传输)。

我可以使用任何一种方法成功获取 RTP 数据包...

tshark -r my.pcap -R -T fields -e rtp.payload -w rtp.out

或者...

tshark -r my.pcap -R -T fields -e rtp.payload > rtp.out

...但我遇到的问题是第一种方法将保存我需要的所有内容,但由于某种原因,它会在奇怪的地方添加额外的数据(即不仅仅是 RTP 有效负载和 RTSP 交错帧内容)......阻止我编写程序来生成我需要测试的数据。我尝试使用几个正则表达式删除所有额外的数据,但是有太多不同的场景与其他有效场景重叠。

第二种方法将仅提供 RTP 有效负载,而没有我需要的交错属性(它将生成每个字节之间带有冒号的十六进制,但这很容易处理)。即使我可以再次调用以获取所有 RTSP 交错帧属性,我也需要通过使用分隔符/定界符识别每个数据包来组合 2 个输出,我想避免这种情况(我无法获得 tshark要么这样做......)。

我查看了 tshark 读取过滤器,它似乎应该能够做我需要的,但到目前为止我还没有弄清楚。请注意,我这样做只是为了创建示例数据并编写格式化播放所需数据的逻辑。最终,我的一位同事将修改流式客户端以以适当的格式捕获数据(因此我可以简单地通过 ffmpeg 运行数据而无需修改它)。关于如何创建所需格式的任何想法?

4

2 回答 2

2

我遇到的问题是第一种方法会保存我需要的一切,但由于某种原因,它会在奇怪的地方添加额外的数据(即不仅仅是 RTP 有效负载和 RTSP 交错帧内容)

第一种方法:

tshark -r my.pcap -R -T fields -e rtp.payload -w rtp.out

应该打印一个错误,因为-R标志指定了一个“读取过滤器”,并且读取过滤器必须在-R标志之后并且不能以 a 开头-(如果后面的内容-R以 a 开头-,它被解释为另一个标志),因此该命令确实不指定“读取过滤器”。

例如,如果您的意思是,

tshark -r my.pcap -R rtp -T fields -e rtp.payload -w rtp.out

该命令使用-w标志,该标志指定包含来自 的原始数据包数据的二进制文件可能由读取过滤器过滤)应写入名称为标志参数的文件,因此该命令表示“写入,到文件名为, 中的所有 RTP 数据包,并将每个数据包的字段写入标准输出”。不幸的是,TShark 中存在一个错误,该错误会抑制字段输出到标准输出;我刚刚签入了一个错误修复。my.pcap-wrtp.outmy.pcaprtp.payloadrtp.payload

因此,如果您希望将字段写入文件,则必须重定向标准输出,因此您的第二种方法是正确的。

我查看了 tshark 读取过滤器,它似乎应该能够做我需要的

不会。读取过滤器仅控制 TShark 在读取捕获文件时需要处理哪些数据包,而不是在剖析它们后丢弃。

你想要的是旗帜

-e rtsp.channel -e rtsp.length

但不幸的是,这些仅受 Wireshark 的当前 1.11.x 开发版本支持,1.10.x 或更早版本不支持。我不知道哪些 1.11.x 版本支持它们;每晚构建将支持他们。

于 2014-02-21T02:45:12.737 回答
0

安装 rtp 工具http://www.cs.columbia.edu/irt/software/rtptools后,您可以尝试使用wireshark 将RTP 有效负载保存为rtpdump 格式

这是通过在选定的流上按“另存为”按钮从“RTP 流”(电话->RTP->显示所有流)对话框中完成的。

有关更多信息,您可以查看http://wiki.wireshark.org/rtpdump

于 2014-11-05T14:02:14.067 回答