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

问题描述 投票:0回答:1

我正在设置一种媒体播放器。我想在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],我应该删除4字节(1 + 1 + 2),但方式[2],我应该只删除2字节。

实际上,我实现了我的程序[1],但在gst-plugins-good中,rtpstreamdepay插件按照方式[2]和Android实现它。

那么删除2个字节是对的吗?还是旧的和新的标准?

tcp udp gstreamer rtp
1个回答
0
投票

如果我没记错的话,你在这里看两件不同的事情。

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

方式2:简单地就是UDP数据的TCP成帧。由于TCP是连续流,因此您缺少UDP数据报提供的隐式长度信息。由于协议本身本身不具有这样的信息,因此在实际有效载荷之前由16比特长度字段提供。

© www.soinside.com 2019 - 2024. All rights reserved.