探索 Mediastreamer2 VoIP 引擎。 第 8 部分

文章素材取自我 禅频道.

探索 Mediastreamer2 VoIP 引擎。 第 8 部分

RTP包结构

在最后 文章 我们正在使用 鲨鱼 执行了在我们的接收器和发送器之间交换的 RTP 数据包的捕获。 好吧,在这一篇中,我们将用不同的颜色绘制包的元素并讨论它们的用途。

让我们看一下同一个包装,但带有彩色边距和解释性标签:
探索 Mediastreamer2 VoIP 引擎。 第 8 部分

在清单的底部,构成 RTP 数据包的字节被着色,而这又是 UDP 数据包的有效负载(其标头用黑色圆圈)。 彩色背景表示 RTP 标头的字节,包含 RTP 数据包有效负载的数据块以绿色突出显示。 数据以十六进制格式显示。 在我们的例子中,这是根据 u-law (mu-law) 压缩的音频信号,即一个样本的大小为 1 个字节。 由于我们使用默认采样率 (8000 Hz),在 50 Hz 的数据包速率下,每个 RTP 数据包应包含 160 字节的有效负载。 我们将通过计算绿色区域中的字节数来看到这一点,它们应该有 10 行。

根据标准,有效负载中的数据量必须是四的倍数,或者换句话说,它必须包含整数个四字节字。 如果恰好你的payload不匹配这个规则,那么你需要在payload的末尾添加零值字节并设置Padding位。 该位位于 RTP 标头的第一个字节中,呈绿松石色。 请注意,所有有效负载字节都是 0xFF,这就是 u-law 静默的样子。

RTP 数据包头由 12 个强制字节组成,但在两种情况下它可能更长:

  • 当数据包携带通过混合来自多个源(RTP 流)的信号获得的音频信号时,在标头的前 12 个字节之后有一个表,其中包含源标识符列表,其有效负载用于创建此数据包的有效负载。 在这种情况下,在头部第一个字节的低四位(字段 贡献源标识符计数) 表示源数。 字段大小为 4 位,因此该表最多可包含 15 个源标识符。 其中每一个占用4个字节。 在建立电话会议时使用此表。

  • 当标题有扩展名时。 在这种情况下,该位设置在标头的第一个字节中 X. 在扩展标题中,在参与者表(如果有的话)之后,有一个单字扩展标题,后面是扩展词。 扩展是字节的集合,可用于传输附加数据。 该标准没有规定此数据的格式 - 它可以是任何格式。 例如,可能是接收RTP包的设备的一些额外设置。 然而,对于某些应用程序,已经开发了扩展报头标准。 例如,这样做是为了标准中的通信 ED-137(VoIP ATM 组件的互操作性标准).

现在让我们更详细地看一下标题字段。 下面是一张带有 RTP 标头结构的规范图片,我也无法抗拒并涂上了相同的颜色。

探索 Mediastreamer2 VoIP 引擎。 第 8 部分
VER — 协议版本号(当前版本 2);

P - 在 RTP 数据包末尾补充空字节的情况下设置的标志;

X - 标头已扩展的标志;

CC — constant header后面(words 1..3之后)包含证监会标识符的个数,该表未在图中显示;

M — 帧开始或通道中存在语音的标记(如果使用语音暂停检测器)。 如果接收器不包含语音暂停检测器,则该位应永久设置;

P型 - 指定有效载荷的格式;

序列号 - 数据包编号,用于恢复数据包播放的顺序,因为实际情况是数据包到达接收方时的顺序与发送顺序错误。 初始值必须是随机的,这样做是为了如果 RTP 流被加密,将很难破解它。 此外,该字段允许您检测丢失的数据包;

时间戳 - 时间戳。 时间以信号样本测量,即如果一个burst包含160个样本,那么下一个burst的时间戳会多160个。时间戳的初始值必须是随机的;

SSRC — 包源的标识符,它必须是唯一的。 最好在开始 RTP 流之前随机生成它。

如果你开发自己的 RTP 数据包发送器或接收器,你将不得不多次查看你的数据包以提高生产率,我建议你学习如何在 TShark 中使用数据包过滤,它允许你只捕获那些数据包你感兴趣。 在网络上有数十个 RTP 设备运行的环境中,这是非常有价值的。 在 TShark 命令行中,过滤选项是用“-f”选项指定的。 当我们想从端口 8010 捕获数据包时,我们使用了这个选项:
-f "udp port 8010"
过滤参数本质上是一组“捕获”数据包必须满足的标准。 条件可以检查数据包中某个字节的地址、端口、值。 条件可以与逻辑运算“AND”、“OR”等组合。 一个非常强大的工具。

如果要批量查看字段变化的动态,则需要复制输出 鲨鱼 如上一篇文章所示,通过将输出传递到文件 鲨鱼 在入口 开球. 接下来,打开日志文件 更少,vim 或者其他可以快速处理大型文本文件并搜索字符串的工具,您可以找出 RTP 流中数据包字段行为的所有细微差别。

如果需要监听RTP流传输的信号,那么需要使用版本 鲨鱼 带可视化界面 Wireshark的. 通过简单的鼠标操作,您可以收听和查看信号的波形。 但在一种情况下 - 如果它以 u-law 或 a-low 格式编码。

下一个 文章 我们将与您进行双工对讲。 准备一副耳机和一个对话者。

来源: habr.com

添加评论