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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取使用TCP传输的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],我应该删除4字节(1 + 1 + 2),但方式[2],我应该只删除2字节。

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

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

答案

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

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

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

以上是关于如何获取使用TCP传输的RTP有效负载(关于删除标头)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用vlc通过tcp协议强制流RTP视频?

如何实现H.264的RTP封装及传输?

流媒体传输协议

转:关于H264通过RTP传输的打包方式

从 RTP 数据包中获取 IP 地址和端口

如何指定VLC的RTSP拉流方式(RTP over UDP/TCP)