rtsp协议

所有代码实例可能使用go c c++ java nodejs 等任何一种语言 协议捕获使用wireshark

Real Time Streaming Protocol 实时流协议。这个协议是大街小巷的人都知道的,谈熟悉他不容易,必须要懂RTP和RTCP协议:
RTP 实时传输协议 Real-time Transport Protocol,
RTCP 实时传输控制协议 Real-time ControlProto
rtsp的传输层是可以使用udp 和 tcp 的,所以可以说RTP是一种半传输层和半应用层协议,他是这么定义的,所以一定要分开。

打开wireshark

在wireshark里面选择网卡接口,在filter 里面 输入 port 554 ,意味着我们在rtsp协议默认端口554 端口监听所有数据

再打开一个wireshark,输入

udp and host 192.168.0.102 and not host 239.255.255.250 and not host 224.0.0.251
表示我们抓去一个ip地址的包,但是去除ssdp协议的包和mdns协议的包,其中239.255.255.250 是upnp ssdp协议组播地址,224.0.0.251 是mdns协议组播地址,显然是给苹果的投屏协议所用。这并不会去除其他的包,网络中还有更厉害的广播包,也就是255.255.255.255,如果想去除,也可以把这个选项加上。

接下来我们启动一个rtsp的server,最简单的莫过于live555

打开后,我们再使用一个工具vlc, 去打开一个rtsp 的文件 2.264,地址为rtsp://

1、tcp交互

我们知道rtsp协议是可以使用tcp也可以使用udp来传输,但是信令这一段都是tcp,保证信令完整传输之后,其他如音视频等传输就可以使用面向无连接的udp,这是使用了RTP实时传输协议和RTCP 实时传输控制协议。

OPTIONS rtsp://192.168.0.129:554/2.264 RTSP/1.0
CSeq: 1
User-Agent: Lavf57.71.100RTSP/1.0 200 OK
CSeq: 1
Date: Tue, Jun 29 2021 00:50:12 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETERDESCRIBE rtsp://192.168.0.129:554/2.264 RTSP/1.0
Accept: application/sdp
CSeq: 2
User-Agent: Lavf57.71.100RTSP/1.0 200 OK
CSeq: 2
Date: Tue, Jun 29 2021 00:50:12 GMT
Content-Base: rtsp://192.168.0.129/2.264/
Content-Type: application/sdp
Content-Length: 515v=0
o=- 1624927812345800 1 IN IP4 192.168.0.129
s=H.264 Video, streamed by the LIVE555 Media Server
i=2.264
t=0 0
a=tool:LIVE555 Streaming Media v2017.07.18
a=type:broadcast
a=control:*
a=range:npt=0-
a=x-qt-text-nam:H.264 Video, streamed by the LIVE555 Media Server
a=x-qt-text-inf:2.264
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001E;sprop-parameter-sets=Z2QAHqzZQKAv+WbIAAADAAgAAAMBkHixbLA=,aOvjyyLA
a=control:track1
SETUP rtsp://192.168.0.129/2.264/track1 RTSP/1.0
Transport: RTP/AVP/UDP;unicast;client_port=26818-26819
CSeq: 3
User-Agent: Lavf57.71.100RTSP/1.0 200 OK
CSeq: 3
Date: Tue, Jun 29 2021 00:50:12 GMT
Transport: RTP/AVP;unicast;destination=192.168.0.102;source=192.168.0.129;client_port=26818-26819;server_port=6970-6971
Session: 552C06BF;timeout=65PLAY rtsp://192.168.0.129/2.264/ RTSP/1.0
Range: npt=end-
CSeq: 4
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 4
Date: Tue, Jun 29 2021 00:50:12 GMT
Range: npt=0.000-
Session: 552C06BF
RTP-Info: url=rtsp://192.168.0.129/2.264/track1;seq=64552;rtptime=4216659733GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 5
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 5
Date: Tue, Jun 29 2021 00:50:44 GMT
Session: 552C06BF
Content-Length: 102017.07.18GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 6
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 6
Date: Tue, Jun 29 2021 00:51:16 GMT
Session: 552C06BF
Content-Length: 102017.07.18GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 7
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 7
Date: Tue, Jun 29 2021 00:51:48 GMT
Session: 552C06BF
Content-Length: 102017.07.18GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 8
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 8
Date: Tue, Jun 29 2021 00:52:20 GMT
Session: 552C06BF
Content-Length: 102017.07.18GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 9
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 9
Date: Tue, Jun 29 2021 00:52:52 GMT
Session: 552C06BF
Content-Length: 102017.07.18GET_PARAMETER rtsp://192.168.0.129/2.264/ RTSP/1.0
CSeq: 10
User-Agent: Lavf57.71.100
Session: 552C06BFRTSP/1.0 200 OK
CSeq: 10
Date: Tue, Jun 29 2021 00:53:24 GMT
Session: 552C06BF
Content-Length: 102017.07.18

以上为包的整个追踪,客户端options,服务端回复200 OK,和http协议及其类似,同时带回能力:

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER

这个交互过程非常简单明了,所以写一段rtsp程序的信令并不复杂,整个过程中只有一段比较复杂,分析以下这一段是什么?

a=fmtp:96 packetization-mode=1;profile-level-id=64001E;sprop-parameter-sets=Z2QAHqzZQKAv+WbIAAADAAgAAAMBkHixbLA=,aOvjyyLA

实际上,他的意思是映射哪位96的包使用的profile level 和sps信息的base64编码,因为rtsp协议和http协议一样为文本协议,所以这里把二进制的sps编码成了base64.信令过程结束以后,如果不使用tcp来传输,就开始了udp传输协议。而上面有一段指明了udp传输的端口,就是以下这一段:

Transport: RTP/AVP/UDP;unicast;client_port=26818-26819

以上表明接收端在26818端口接收RTP数据,在26819接收RTCP数据,抓包的过程也可以看出,源地址将数据送往了26818端口

2、udp

看到我们的udp捕获里面有RDT 和 RTCP,设定的内部发包MTU大小约为1450字节左右,去除14byte 以太网头部,20byte IP头部,8 byte UDP 头部,剩下的是UDP 数据 部分。

一看到以80 16进制数据开头,基本就知道是RTP包了,可以看出,除了RDT以外,RDT实际上意思就是real data trasnport的意思,还有RTCP的RR包,也就是收到包以后,目的地址给源发包地址返回收包统计。

rtsp协议的信令和http协议是极其类似的,超文本传输协议http的好处就是简单明了,我们来看一下http协议的一段描述
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
上面一段说明了http协议是面向链接的,也就是说http协议在传输层是使用tcp的,那么是否http协议就没有改进呢,答案是否,一切定义皆人为,http协议3 使用quic协议,这是建立在udp基础之上的,http协议我们后面再讲,而rtsp协议也是类似的,他的传输层使用tcp还是udp,一切都是依靠编程人员。

code

我们会在下一章开始写rtsp服务器和rtsp客户端。

协议圣经 RTSP(三)相关推荐

  1. 【视频】视频传输协议:RTSP、RTP、RTCP、RTMP、HTTP

    一.RTSP.RTP.RTCP RTSP.RTP.RTCP是一组协议,其中RTSP在应用层.RTP和RTCP在传输层.RTP用于传输流媒体数据,而RTCP对RTP进行控制.同步. 二.RTSP.RTM ...

  2. 流媒体服务器之rtp协议,rtcp协议,rtsp协议,sdp协议,sip协议简析

    0.前言 流媒体服务器做音视频媒体传输主要就两件事:媒体回话协商,媒体数据传输:下面这几种协议就围绕着这两个需求而产生. 1.rtp协议 rtp的全称是实时传输协议RTP(Real-time Tran ...

  3. 视频播放压缩的相关知识点:I帧、P帧、B帧、RTMP协议、RTSP协议、GB28181协议等学习记录

    I帧.P帧.B帧.RTMP协议.RTSP协议.GB28181协议等学习记录 引言 1. I帧.P帧.B帧 1.1 P帧 1.2 B帧 1.3 I帧 2.ONVIF协议与GB28181协议,RTMP与R ...

  4. 一文读懂RTSP协议-【RTSP协议详解】

    RTSP简介 RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流 ...

  5. Atitit onvif协议获取rtsp地址播放java语言 attilx总结

    Atitit onvif协议获取rtsp地址播放java语言 attilx总结 1.1. 获取rtsp地址的算法与流程1 1.2. Onvif摄像头的发现,ws的发现机制,使用xcf类库1 2. 调用 ...

  6. 协议开发 中移动CMPP2.0协议API(三)

    协议开发 中移动CMPP2.0协议API(三) 云网(jimzj@21cn.com) 接上篇... 五.发送接口 对于API来说,最重要的一部分就是去做发送数据了.通过SOCKET套接字与网关相连接后 ...

  7. Python常见面试题:TCP 协议中的三次握手与四次挥手相关概念详解

    今天来聊聊Python常见面试题中面试频率特别高的一个题目:TCP 协议中的三次握手与四次挥手. 涉及到的知识点有: 1.TCP.UDP 协议的区别 2.TCP 头部结构 3.三次握手与四次挥手过程详 ...

  8. 协议圣经(二) RTP组播音视频技巧

    协议圣经 协议圣经一是基础,还没有写,先出2 RTP组播 RTP为半应用层,半传输层协议,可以使用tcp,也可以使用udp,组播为D类地址,为何要使用组播,组播对什么有效,如224.3.4.5,端口选 ...

  9. RTP/RTCP协议与RTSP协议

    基本概念 流式传输 包括顺序流式传输(Progressive Streaming)和实时流式传输(Real-time Streaming).直播场景中使用progressive streaming和r ...

最新文章

  1. 汇编语言随笔(10)-内中断及实验12(返回到dos的中断处理程序)
  2. Java 12正式发布,新特性解读!
  3. ZJOI2012网络 题解报告【LCT】
  4. Android项目笔记整理(1)
  5. 快手于冰:跟最优秀的人一起追求极致
  6. JDK14的新特性:JFR,JMC和JFR事件流
  7. 升级MAC OX上的Python到3.4
  8. Mac系统安装nginx+rtmp模块
  9. 使用gdb调试多进程程序、同时调试父进程和子进程
  10. 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms”
  11. mysql不能删除外键吗,为什么mysql不允许删除外键?
  12. 计算机跨专业考经济学,21考研报名人数377万!这八大专业报名人数最多~
  13. L1-026 I Love GPLT (5 分)—团体程序设计天梯赛
  14. 转载:技术大停滞——范式春梦中的地球工业文明3:范式春梦外的阴影
  15. android 开机直接运行app并当做手机桌面
  16. Linux内核源码高速下载地址
  17. 与MP3相关的技术总结
  18. 【历史上的今天】6 月 8 日:万维网之父诞生;PHP 公开发布;iPhone 4 问世
  19. 中芯微和高通410的随身WiFi哪种好,随身WiFi怎么刷机
  20. sqli-labs通关攻略23-37[Advanced Injections]

热门文章

  1. springboot- jsp访问404的问题解决
  2. linux关闭cups命令,使用linux的cupsenable命令启动指定的打印机
  3. 一年超20万人次在抖音志愿登记器官捐献
  4. 特斯拉部分车型将逐渐搭载磷酸铁锂电池,比亚迪有望成为其电池供应商
  5. 华为:预计6G将于2030年左右投向市场
  6. 滴滴更新招股书:预计定价13.5美元 最多筹集约46亿美元
  7. iPhone 13 Pro“终极”渲染图曝光:后置镜头模组将有大幅升级
  8. 特斯拉回应海南碰撞事故:地面湿滑 车主踩制动踏板幅度较轻
  9. 蚂蚁之江要退地?官方回应:假的
  10. 消息称蚂蚁集团提前至11月5日挂牌,估值达3.6万亿港元