gpt4 book ai didi

c# - 如何确定数据包是否为 RTP/RTCP?

转载 作者:可可西里 更新时间:2023-11-01 08:47:00 24 4
gpt4 key购买 nike

我正在使用基于 WinPCap 构建的 SharpPCap 来捕获 UDP 流量。我的最终目标是从 H.323 捕获音频数据并将这些电话对话保存为 WAV 文件。但首先是第一件事——我需要弄清楚我的 UDP 数据包是通过 NIC 传输的。

SharpPCap 提供了一个 UdpPacket 类,使我能够访问消息的 PayloadData。但我不确定如何处理这些数据。它是一个 Byte[] 数组,我不知道如何确定它是 RTP 还是 RTCP 数据包。

我用 Google 搜索了这个主题,但没有太多内容。任何帮助表示赞赏。

最佳答案

查看 RFC 3550 中 RTP 和 RTCP 数据包的定义:

 0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| contributing source (CSRC) identifiers |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

我不会重现以上所有的图例 - 它很长 - 但请看一下 Section 5.1 .

有了它,您会发现要确定 a 数据包是否包含 RTP/RTCP,您无能为力。正如其他发帖人所建议的那样,最好的办法是嗅探媒体流协商。第二好的是对一系列数据包进行某种模式匹配:前两位为 10,接下来的两位为常量,然后是第 9 到 15 位为常量,然后 16 -> 31 递增,并且等等。

关于c# - 如何确定数据包是否为 RTP/RTCP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2916177/

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