gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:56:21 25 4
gpt4 key购买 nike

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

帧 N:线上 X 字节...

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

  • ...而我从每个数据包中需要的是...
  • 来自 RTSP 交错帧的 channel
  • 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 运行数据而无需修改它)。关于如何创建所需格式的任何想法?

    最佳答案

    the problem I am having is that the first method will save everything I need, but for some reason it will add extra data (i.e. more than just the RTP payload and RTSP interleaved frame contents) in strange places



    第一种方法:
    tshark -r my.pcap -R -T fields -e rtp.payload -w rtp.out

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

    例如,如果您的意思是,
    tshark -r my.pcap -R rtp -T fields -e rtp.payload -w rtp.out

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

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

    I looked into the tshark read filters, which seems like it should be able to do what I need



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

    你想要的是旗帜
    -e rtsp.channel -e rtsp.length

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

    关于ffmpeg - 如何从 Wireshark Capture 中提取 RTP 数据包特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21923188/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com