您是否尝试过使用 Wireshark 的“分析 ->专家信息”?(您也可以通过单击状态栏左下角的红色小圆圈来查看它,尽管圆圈的颜色会根据捕获文件中存在的最高错误级别而有所不同。)
编辑:用下面的更多信息扩展了我的原始答案......
您还可以在"Telephony -> RTP -> RTP Streams"下查看 RTP 统计信息,其中列出了 23 个丢失的数据包。 “电话 -> RTP -> 流分析”也提供了潜在有用的信息。
查看数据的另一种可能有用的方法是使用 I/O 图表。例如,“统计信息 -> I/O 图表”。禁用任何正在绘制的内容并添加一个新的,如下所示:
Enabled Graph Name Display Filter Color Style Y Axis Y Field SMA Period
X RTP Seq rtp.seq X Line MIN(Y Field) rtp.seq None
您应该看到一条相当直的对角线,从左下角开始,到右上角结束。现在将间隔更改为 10 毫秒,您会看到一些序列号间隙 - 对我来说,很容易观察到 3 个间隙,这可能是发生丢包的良好指标。例如,在 12:16:38 左右,有一个间隙,可以看出缺少 11634 的 RTP 序列号,它应该在帧 10271 和 10272 之间。
但是,如果您想更轻松地查看所有序列号间隙的位置,那么您可能希望将 Wireshark 数据导出到电子表格程序中,例如 Excel。例如:
- 右键单击任何数据包的 RTP 序列号字段并选择“应用为列”
- 将文件导出为 CSV:文件 -> 导出数据包剖析 -> 作为 CSV...
- 使用电子表格程序打开 .csv 文件
- 添加一列,其内容为上一行的RTP序号与当前行的RTP序号之差。例如,如果 RTP 序列号在 G 列中,则单元格将包含
=G2-G1-1
. 如果您先选择整列并在添加公式时使用“Ctrl-Enter”而不是“Enter”,则公式将快速应用于所有行。(您可能必须清理最后一个有效行之后的一些无关数据。)
- 通过用标题替换未定义的值来修复新列的第一行,例如“RTP Seq # diff”。
- 除 0 以外的任何值都表示 RTP 序列号中的间隙。
- 要更轻松地找到所有间隙,请选择整个表并在此新列上过滤除 0 以外的所有值。您最终应该得到一个相对较小的表,如下所示:
No. AbsTime Time DeltaT Proto Length RTP Seq # RTP Seq # Diff
3405 16:33.7 2.199559 0.001005 MPEG TS 1370 4748 3
6505 16:35.7 4.203210 0.000139 MPEG TS 1370 7851 1
6631 16:35.8 4.287576 0.001001 MPEG TS 1370 7978 1
8781 16:37.2 5.728671 0.000102 MPEG TS 1370 10129 1
8855 16:37.3 5.781427 0.000254 MPEG TS 1370 10204 1
9476 16:37.7 6.213582 0.000816 MPEG TS 1370 10826 1
9728 16:37.9 6.389564 0.000634 MPEG TS 1370 11079 10
9981 16:38.1 6.572582 0.000978 MPEG TS 1370 11342 1
10271 16:38.3 6.774569 0.000796 MPEG TS 1370 11633 1
10311 16:38.3 6.803568 0.000995 MPEG TS 1370 11674 1
10979 16:38.8 7.268695 0.000068 MPEG TS 1370 12343 1
12361 16:39.7 8.186596 0.000177 MPEG TS 1370 13726 1
这应该告诉您所有间隙在哪里以及丢失了多少数据包,这只是最后一列或 23 的总和,这与 Wireshark 在 RTP 分析中报告的丢失数据包完全匹配。
注意:对于不熟悉在非标准端口上解码流量的任何人,为了让 Wireshark 将 UDP 有效负载解码为 RPT,您必须使用上面提到的 @nnovich-OK的“解码为”功能。为此,可以选择一个 UDP 数据包并右键单击“解码为”,或者选择“分析 -> 解码为... -> + -> ”,然后通过选择下面的 RTP 将 UDP 端口 4000 设置为解码为 RTP当前列。