rtp协议整理

作者: 大飞_2048 | 来源:发表于2019-06-03 18:18 被阅读0次

一、协议头


20140912153130104.png

V:RTP协议的版本号,占2位,当前协议版本号为2
P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头
CC:CSRC计数器,占4位,指示CSRC 标识符的个数
M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
PT: 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。

这里重点聊下X扩展字段,别的字段应用简单
贴一个简单例子:
90 60 1e e2 12 e9 c2 4d 0b a9 e9 05 be de 00 02 21 04 a1 30 31 00...
90 二进制 1001 0000 对应 V=2,P=0,X=1,CC=0
可以得出 M=1,PT=96(264)
1e e2 二进制 00011110 11100010 sequence number=7906
12 e9 c2 4d 二进制 00010010 11101001 11000010 01001101 timestamp=317309517
0b a9 e9 05 SSRC=0x0ba9e905
展开解释:X 扩展位
根据RFC5285的规定,RTP扩展头部有两种格式:one byte header和two byte header。
https://tools.ietf.org/html/rfc5285

(1)one byte header : 
   0 1 2 3 4 5 6 7
  +-+-+-+-+-+-+-+-+
  |  ID  |  len   |
  +-+-+-+-+-+-+-+-+

be de (the first version of this specification was written on the
feast day of the Venerable Bede) 定死的。没啥实际意思,协议写的时候是这个节日子
00 02 extension length 2 个扩展单元
21 04 a1 (Id=2 Len=2 extension data 04a1) 3031 (id =3 ;len =1 extend data 31)

image.png
这个长度 4-bit比较有意思,0表示1, 1表示2个字节有效位,绕吧!“程序员计量体系从0开始么” image.png

(2)Two-Byte Header

image.png

二、一些概念
VCL NALU Annex B MTU(1500?)=udp_header+rtp_header+data
具体分包大小:分包大小:<= 1500-20(IP头)-8(UDP)-12(rtp) 1460
extend(data) 可能还有拨号ppp协议头8字节
分析webrtc抓包分析:分析策略: 小于1460 基本每个nal发送大小相同。

image.png NALU类型: image.png

14、20类型

三、h264的rtp封装详细介绍
1、单一rtp包
单个NAL单元包(1-23)
对于 NALU 的长度小于MTU 大小的包,一般采用单个NAL 单元模式.一个原始的 H.264 NALU 单元常由 [Start Code] [NALU Header][NALU Payload]三部分组成, 其中 Start Code 用于标示这是一个 NALU 单元的开始, 必须是"00 00 00 01" 或 "00 00 01", NALU 头仅一个字节, 其后都是 NALU 单元内容.打包时去除 "00 00 01" 或 "00 00 00 01" 的开始码, 把其他数据封包的 RTP 包即可
如图:

image.png

2、分包
h264包在传输的时候,如果包太大,会被分成多个片。NALU头会被如下的2个自己代替。
Type=28 FU-A
+---------------+---------------+---------------
|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-++-+-+
|F|NRI| Type:28 |S|E|R| Type |
+---------------+---------------+-----------------

例:
0x7C85=01111100 10000101 (开始包)
0x7C05=01111100 00000101 (中间包)
0x7C45=01111100 01000101 (结束包)

3、组合rtp包
Type=24 STAP-A

image.png

STRP-A and FU-A 图解
https://www.jianshu.com/p/5aa012b76951

三、详细例子
详细见gitee分享
https://gitee.com/wuji0447/h264rtpFenBaoZuBaoLiuCheng.git
对264实现拆包和组包,vlc播放数据。

四、扩展
vp8 等协议rtp流程

rfc:https://tools.ietf.org/html/rfc6386#section-9.1

参考这个大牛的blog:https://blog.csdn.net/CrystalShaw/article/details/81289617

相关文章

  • rtp协议整理

    一、协议头 V:RTP协议的版本号,占2位,当前协议版本号为2P:填充标志,占1位,如果P=1,则在该报文的尾部填...

  • 初步了解RTP

    实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,RTP协议...

  • RTP 传输的核心思想

    1 RTP 的协议描述 实时传输协议RTP(Real-time Transport Protocol)是一个网络传...

  • 超越RFC3550 - RTP/RTCP协议族分析

    一 前言 RF3550定义实时传输协议RTP和它的控制协议RTCP。RTP协议是Internet上针对流媒体传输的...

  • iOS 直播专题5-推流

    常用的推流协议有: 协议内容RTP实时流传输协议,但不保证服务质量RTCPRTP数据流协议的一个姐妹协议,为RTP...

  • RTP协议

    参考:https://www.cnblogs.com/yoyotl/p/5650101.html

  • 协议

    rtp协议基于udp,视频数据流传输rtcp协议基于udp,在rtp基础上可控制码率、倍数等rtsp协议基于tcp...

  • RTP包的包类型

    RTP是实时传输协议,先来一张RTP协议的图: 具体各个字段的含义如下: sequence number:序号,用...

  • WebRTC源码分析之RTP/RTCP(一)

    首先学习一下RTP/RTCP的基础知识。 RTP/RTCP协议 RTP报头 当没有CSRC时RTP报头一共12个字...

  • 常见的流媒体传输协议

    RTP RTP(Real-time Transport Protocol)实时传输协议 是一个由IETF(The ...

网友评论

    本文标题:rtp协议整理

    本文链接:https://www.haomeiwen.com/subject/reomzqtx.html