专栏首页用户1692782的专栏手撕RTSP协议系列(12)——RTP包格式

手撕RTSP协议系列(12)——RTP包格式

前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其他的控制。而实际涉及媒体数据传输使用的是RTP协议,本节我们来介绍一下RTP协议。

RTP概览

RTP是一种应用层协议,传输层协议可以是TCP或者UDP(UDP多一些)!

RTP数据包由两部分组成,一部分是RTP Heaeder,一部分是RTP body,RTP Header占用最少12个字节,最多72个字节;另一部分是RTP Payload,用来封装实际的数据负载,如封装h264编码的视频数据!下面我们来仔细看下RTP Header和RTP Body的组织形式!

RTP包格式示意图

RTP Header格式

   0               1                 2               3             4
    
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |V=2|P|X|  CC |M|     PT          | sequence number             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | timestamp                                                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | synchronization source (SSRC) identifier                      |
   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
   | contributing source (CSRC) identifiers                        |
   | ....                                                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

V: 2bits,表示版本号,

P: 1bit,表示是否支持填充,置为1的时候,表示在packet的末尾进行填充,方便一些针对固定长度算法的封装

X: 1bit, 表示是否支持Rtp头扩展,置为1的时候,RtpHeader之后会跟1个header extension

CC(CSRC count): 4bits,表示头部之后contributing sources identifiers的个数

M: 1bit;对于视频,标记一帧的结束;对于音频,标记会话的开始

PT: 7bits,表示传输的多媒体类型,(https://tools.ietf.org/html/rfc3551)

sequence number:16bits(2字节),表示RTP包序号

timestamp:32bits(4字节),表示时间戳, 必须使用90 kHz 时钟频率

SSRC:32bits(4字节),用于标识同步信源,参加同一视频会议的两个同步信源不能有相同的SSRC

CSRC:特约信源标识符,每个CSRC占用4个字节,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源

PT(多媒体类型)

音频多媒体类型

视频多媒体类型

说明:

GB28181中对PT的定义

负载类型

编码名称

时钟频率

通道数

SDD描述中m字段的media项

4

G.723

8k HZ

1

audio

8

PCMA(G.711 A)

8k HZ

1

audio

9

G722

8k HZ

1

audio

18

G.729

8k HZ

1

audio

20

SVACA(SVAC音频)

8k HZ

1

audio

96

PS

90k HZ

video

97

MPEG-4

video

98

H.264

99

SAVC(SVAC视频)

Rtp 数据包拆解

根据PT类型的不同,Payload有不同的组织方式。

让我们来看一个实际的RTP数据包的抓包

红色框中的部分为RTP Header;绿色框中的部分为RTP Payload! 我们来详细来看下:

该数据包中RtpHeader的16进制表示为:

将其用二进制表示如下:

Version

值为10,版本号为2,我们与wireshark的抓包解析对比一下:

Padding

值为0,表示不填充。wireshark的抓包如下:

X(扩展)

值为0。表示不支持扩展RTP头!wireshark的抓包如下

CC(CSRC计数)

CSRC计数器,值为09,表示没有RTP头信息中没有CSRC!wireshark的解析:

M(marker)

值为0,表示该数据包非一帧数据的最后一帧!wireshark的解析:

ps:当该值为1时,表示该数据包是一帧数据的最后一个数据包!

PT(payload type)

PT值为96,根据payload type,得知该rtp数据包的负载数据为自定义的数据类型!而抓包是一个从摄像头拉取视频数据,所以遵循GB28181标准,所以是一个ps类型的数据包。wireshark的解如下:

sequence number

值为0x 12 ed,十进制为4845,表示rtp包的序列号为4845。

wireshark的解析如下:

timestamp

值为0x4b cf fa 46, 表示时间戳,wireshark解析为:

SSRC

同步信源标识符,此数据包的值为0x6b 2f dd 87,wireshark的解析为:

CSRC

由于RTP Header中CC的值为0,所以表示CSRC在本数据包中的个数为0,在此处没有,RTP HEADER中允许有0-15个CSRC。

RTP Payload

蓝色阴影部分为Rtp Payload,我们可以看到第一个字节为0x67,比较容易想到该数据为视频帧的SPS,也说明了RTP Payload中的数据就是传输的媒体数据,至于SPS的细节,在这里就不详细展开了!

好了,RTP数据包的格式被我们经过肢解,图解后,我们对其也有了比较详尽的了解,本篇的介绍也就到这里了!我们下一讲再见吧!

本文分享自微信公众号 - 视界音你而不同(WorldOfVideoAndAudio),作者:马龙飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手撕RTSP协议系列(6)——SETUP

    SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数...

    视界音你而不同
  • 手撕RTSP协议系列(1)——Rtsp基本流程

    哈喽,久违的小伙伴们!之前开了一个专辑手撕了rtmp协议!对于流媒体协议,rtsp协议也是很常见的,接下来我们继续手撕,手撕rtsp协议!本篇我们首先来简单了解...

    视界音你而不同
  • 手撕RTSP协议系列(2)——Rtsp消息格式

    RTSP消息分为两大类,一类是请求消息(request),一类是回应消息(ressponse)!

    视界音你而不同
  • 手撕RTSP协议系列(3)——sdp格式详解

    上一篇我们介绍了RTSP数据包的格式,在整个rtsp的交互过程,sdp也是很重要不可获取的一环,本篇我们来详细介绍一下sdp的格式!

    视界音你而不同
  • 音视频传输:RTP协议详解和H.264打包方案

    前面讲解了PS、TS、FLV这三种媒体封装格式,现在新开一个系列讲解下传输协议,这里面会包含RTP、RTSP、HLS、RTMP等。当然最复杂的封装格式MP4在准...

    用户5796036
  • 手撕RTSP协议系列(13)——RTCP协议

    之前的文章,介绍了RTSP和RTP协议,RTSP用于建立连接及发送请求等,RTP用于实际的媒体数据传输。整个RTSP的流程中,还有一种不可或缺的协议, 那就是R...

    视界音你而不同
  • (零)音视频技术基础知识

    耽误了很久,一直想写音视频开发的教程,一方面,音视频的发展正在向各个行业扩展,从教育的远程授课,交通的人脸识别,医疗的远程就医等,音视频方向已经占据一个相当重要...

    sweet说好的幸福
  • 直播系统搭建:常见的直播相关协议有哪些?

    1、RTMP(Real Time Messaging Protocol,实时消息传送协议)

    山东布谷鸟
  • 手撕RTSP协议系列(7)——PLAY

    上一篇我们熟悉了RTSP_SETUP消息,SETUP可以说是PLAY的准备流程,只有SETUP请求被成功回复之后,客户端才可以发起PLAY请求。本篇我们就来看一...

    视界音你而不同

扫码关注云+社区

领取腾讯云代金券