如何获取通过 TCP 传输的 RTP 负载(关于删除 header)
how to get RTP payload which is transported with TCP (about removing header)
我正在设置一种媒体播放器。我想在 TCP 数据包中获取 RTP 数据以进行媒体播放。
为了获取数据,我应该删除 header 部分。我找到了两种方法。
方式[1]
TCP数据包
[$ - 1byte][Transport Channel - 1byte][RTP data length - 2bytes][RTP data]
方式[2] TCP数据包
在 rfc4571 标准中 (https://www.rfc-editor.org/rfc/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],我应该删除 4 个字节(1+1+2),但是方式 [2],我应该只删除 2 个字节。
实际上,我按照 [1] 的方式实现我的程序,但是在 gst-plugins-good 中,rtpstreamdepay 插件实现它也遵循 [2] 和 Android 的方式。
那么删除2bytes是否正确?
还是新旧标准?
如果我没记错的话,您在这里看到的是两种不同的东西。
方式一:表示RTSP交织。所以所有 RTP/RTCP 通道都通过 RTSP 控制连接传输。由于在这种情况下您处理的是单个连接,因此您需要额外的信息,您发送的数据属于哪个通信通道。
方式二: 简单来说就是TCP对UDP数据的分帧。由于 TCP 是一个连续的流,您会错过 UDP 数据报提供的隐式长度信息。由于协议本身没有此类信息,因此在实际有效载荷之前由 16 位长度的字段提供。
我正在设置一种媒体播放器。我想在 TCP 数据包中获取 RTP 数据以进行媒体播放。
为了获取数据,我应该删除 header 部分。我找到了两种方法。
方式[1] TCP数据包
[$ - 1byte][Transport Channel - 1byte][RTP data length - 2bytes][RTP data]
方式[2] TCP数据包
在 rfc4571 标准中 (https://www.rfc-editor.org/rfc/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],我应该删除 4 个字节(1+1+2),但是方式 [2],我应该只删除 2 个字节。
实际上,我按照 [1] 的方式实现我的程序,但是在 gst-plugins-good 中,rtpstreamdepay 插件实现它也遵循 [2] 和 Android 的方式。
那么删除2bytes是否正确? 还是新旧标准?
如果我没记错的话,您在这里看到的是两种不同的东西。
方式一:表示RTSP交织。所以所有 RTP/RTCP 通道都通过 RTSP 控制连接传输。由于在这种情况下您处理的是单个连接,因此您需要额外的信息,您发送的数据属于哪个通信通道。
方式二: 简单来说就是TCP对UDP数据的分帧。由于 TCP 是一个连续的流,您会错过 UDP 数据报提供的隐式长度信息。由于协议本身没有此类信息,因此在实际有效载荷之前由 16 位长度的字段提供。