我有一个PCAPNG文件,我需要从中获取RTP数据包。具体来说,我的一个RTP数据包看起来像......
帧N:线路上的X字节......
......我需要的每个数据包都是......
...使用这些数据,我将重新创建一个音频和视频文件,以便从本地有效载荷重新构建完整的视频(播放不是流式播放)。
我能够使用...
成功获取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简单地运行数据而无需修改它)。关于如何创建我需要的格式的任何想法?
答案 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