流媒体协议RTSP末篇之RTP(三)

RTP: 俺只是个小工,俺在这干,俺还可以跟着别人干~

一、RTP报文基础
实时传输协议(Real-time Transport Protocol)是一种网络传输协议。为IETF提出的一个标志,对应的RFC文档为RFC3550(RFC1889为过期版本)。RFC3550不仅定义了RTP,而且定义了配套的相关协议RTCP(Real-time Transport Control Protocol,实时传输控制协议)。RTP用来为IP网络上的语音、图像、传真等多种需要实时传输的多媒体数据提供端到端的实时传输服务。RTP为Internet上端到端的实时传输提供时间信息和流同步,但并不保证服务质量,服务质量由RTCP来提供。

RFC3550中RTP的报文格式如下图:
RFC
其中个字段的含义如下:
在这里插入图片描述
在C语言中定义一个rtp头:

 typedef struct _rtp_header_t
{
    
    
	uint32_t v:2; /* protocol version */ 
	uint32_t p:1; /* padding flag */
	uint32_t x:1; /* header extension flag */
	uint32_t cc:4; /* CSRC count */
	uint32_t m:1; /* marker bit */
	uint32_t pt:7; /* payload type */
	uint32_t seq:16; /* sequence number */
	uint32_t timestamp; /* timestamp */
	uint32_t ssrc; /* synchronization source */
} rtp_header_t;

二、TCP和UDP下的RTP
RTSP是基于TCP传输的,但RTP协议既可以通过TCP传输,又可以通过UDP传输,所以导致不同的传输方式,RTP走的socket通道是不一样的。
1、TCP方式
使用TCP方式进行传输,好处就是稳定,有丢包重传机制,且不会出现乱序的情况。此时RTP与RTSP共用一个通道,且会携带RTSP的包头。
此时RTSP的包头占4个字节:
magic字段固定为0x24,
channel用来区分音视频等多路流媒体的通道,其中偶数通道为RTP,奇数通道为RTCP
len表示数据包的长度减去开始的4个字节,即len字段后的数据长度
在这里插入图片描述

2、UDP方式
使用UDP方式进行传输,好处快,因为互联网环境的复杂,UDP传输效率是比TCP高的。但此时通信两端都需要打开多个端口,一个端口用于RTSP通信,n个端口用于RTP,n个端口用于RTCP(n取决于有几路视频流)。
RTP基于UDP传输的情况下,RTSP的setup包会携带RTP和RTCP会话建立的端口,规定偶数为RTP,奇数为RTCP。
在这里插入图片描述
可以看到此时UDP和RTP协议之间不存在RTSP的包头。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42764231/article/details/127997680