我有一个 PCAPNG 文件,我需要从中获取 RTP 数据包。具体来说,我的一个 RTP 数据包看起来像......
帧 N:线上 X 字节...
- 以太网 II,源:...
- IPv4,源:...
- TCP,源端口:rstp ...
- RTSP 交错帧,通道:0x02,163 字节
- 实时传输协议
...而我从每个数据包中需要的是...
- 来自 RTSP 交错帧的通道
- RTSP 交错帧的长度
- 来自 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 运行数据而无需修改它)。关于如何创建所需格式的任何想法?