如何获取使用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有效负载(关于删除标头)的主要内容,如果未能解决你的问题,请参考以下文章