如何获取随TCP传输的RTP有效负载(关于删除标头)

时间:2018-12-28 04:36:29

标签: tcp udp gstreamer rtp

我正在设置一种媒体播放器。我想在TCP数据包中获取RTP数据以进行媒体播放。

要获取数据,我应该删除标题部分。我找到了两种方法。

方法[1] TCP数据包

[$ - 1byte][Transport Channel - 1byte][RTP data length - 2bytes][RTP data]

方法[2] TCP数据包

以rfc4571标准(https://tools.ietf.org/html/rfc4571#page-3

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
---------------------------------------------------------------
|             LENGTH            |  RTP or RTCP packet ...     |
---------------------------------------------------------------

我发现了两个tcp数据包结构。 因此,如果我遵循方法[1],则应该删除4bytes(1 + 1 + 2),但是如果方法[2],则应该仅删除2bytes。

实际上,我像[1]一样实现我的程序,但是在gst-plugins-good中,rtpstreamdepay插件按照[2]和Android来实现。

那么删除2个字节是否严格? 还是新旧标准?

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,您正在看的是两种不同的东西。

方法1:表示RTSP交错。因此,所有RTP / RTCP通道都是通过RTSP控制连接传输的。在这种情况下,由于您正在处理单个连接,因此您需要其他信息,您要发送的数据属于哪个通信通道。

方法2:是用于UDP数据的简单TCP框架。由于TCP是连续流,因此您会丢失UDP数据报提供的隐式长度信息。由于协议本身不具有此类信息,因此在实际有效负载之前由16位长度的字段提供。