如何从Wireshark Capture中提取RTP数据包特定字段?

时间:2014-02-21 01:08:43

标签: ffmpeg rtsp rtp tshark pcap-ng

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

帧N:线路上的X字节......

  • Ethernet II,Src:...
  • IPv4,Src:...
  • TCP,Src Port:rstp ...
  • RTSP交错帧,频道:0x02,163字节
  • 实时传输协议

......我需要的每个数据包都是......

  1. 来自RTSP交错帧的频道
  2. RTSP交错帧的长度
  3. 来自RTP的有效负载
  4. ...使用这些数据,我将重新创建一个音频和视频文件,以便从本地有效载荷重新构建完整的视频(播放不是流式播放)。

    我能够使用...

    成功获取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简单地运行数据而无需修改它)。关于如何创建我需要的格式的任何想法?

2 个答案:

答案 0 :(得分:1)

  

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

第一种方法:

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

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

如果您的意思是,例如,

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

该命令使用-w标志,该标志指定包含来自my.pcap原始数据包数据二进制文件,可能被过滤为应将读取过滤器写入名称为-w标志的参数的文件,以便该命令表示“将名为rtp.out的文件写入{{1}中的所有RTP数据包” },并将每个数据包的my.pcap字段写入标准输出“。不幸的是,TShark中存在一个错误,它将rtp.payload字段的输出抑制为标准输出;我刚刚检查了一个错误修复程序。

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

  

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

没有。读取过滤器只能控制哪些数据包TShark在读取捕获文件时难以处理,而不是在解析后丢弃。

你想要的是旗帜

rtp.payload

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

答案 1 :(得分:0)

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

这是通过" RTP Streams" (&Telephony-> RTP->显示所有流)对话框按"另存为"选定流上的按钮。

有关详细信息,请查看http://wiki.wireshark.org/rtpdump