拉流与推流的区别_RTSP协议交互流程之推流分析
0.引言
为了更好理解本篇文章,可以先阅读前面几篇文章,文章列表如下:
RTSP协议交互流程之拉流分析
详解RTP打包AAC实战分析(1)
详解RTP协议之H264封包和解包实战
详解RTP协议之H264封包细节(1)
详细解析RTSP框架和数据包分析(1)
手把手搭建RTSP流媒体服务器
RTP协议
HLS实战之Wireshark抓包分析
HTTP实战之Wireshark抓包分析
本篇文章主要是讲解RTSP协议交互流程的推流流程分析,与上篇文章RTSP协议交互流程之拉流分析结合起来进行分析和对比。以下c代表客户端,s代表服务端。
这里继续推荐一篇非常好的RTSP协议的英文文档,如下链接:
https://blog.csdn.net/u012519333/article/details/52746375
如下界面:
1.详细推流步骤
整体流程大致如下:
1.1 查询服务器端可⽤⽅法之OPTIONS
(1)C->S:客户端向服务端发送OPTION request,目的是查询服务端有哪些可用的方法。如下方法:
注意:在拉流时,实时流不一定支持pause方法,需要看看服务器是否支持。
(2)S->C:服务端向客户端回应OPTION response,目的是服务端回应信息的public头字段中,包括提供的所有可用方法,如OPTIONS,DESCRIBE,SETUP等。如下图:
1.2 发送ANNOUNCE
(3)C->S:客户端向服务端发送ANNOUNCE request,目的是客户端发送媒体描述信息给服务器,r如视频的SPS、PPS和音频的profile-level等。如下图:
stream id 表示不同的流通道。
目前传输的是什么数据。可以从content-type得知,实际就是给服务器发送sdp,通过sdp描述音视频的一些基本格式信息。如下图:
如这里的Media Attribute(a)表示音频和视频的属性。告诉服务器视频类型和格式,如Media Attribute(a):rtpmap:96 H264/90000等信息。
客户端发送服务端,如下一些音频相关的信息,如下图:
注意:客户端每次给服务端发送数据,都会把url绝对地址带上,这与http就不一样。如下图:
(4)S->C:服务端向客户端回应ANNOUNCE response,目的是服务端回应媒体描述信息是否能够成功接收,并返回Session ID。到这一步就相当于为建立对话做准备。如下图:
1.3 建⽴RTSP会话
(5)C->S:客户端向服务端发送SETUP request,目的是通过Transport头字段列出可接受的传输选项,客户端请求与服务端建立会话。如下图:
(6)S->C:服务端向客户端回应SETUP response,目的是客户端与服务端建立会话,通过Transport头字段返回选择的具体转输选项,并返回建⽴的Session ID。如下图:
(7)C->S:客户端向服务端再次发送SETUP request,目的是通过Transport头字段列出可接受的传输选项,请求S建⽴会话。注意,到这里就发送了2次SETUP request,一次是视频,一次是音频。如下图:
(8)S->C:服务端向客户端回应SETUP response,目的是通过Transport头字段再次返回选择的具体转输选项。如下图:
运行到这步,会话建立好了,客户端RTP使用的端口号是31590,服务端RTP使用的端口号是59472。客户端RTCP使用的端口号是31591,服务端RTCP使用的端口号是59473。
1.4 请求传送数据
(9)C->S:客户端向服务端发送RECORD request,目的是客户端向服务端请求发送数据。如下图:
(10)S->C:服务端向客户端发送RECORD response,目的是服务端回应客户端允许的信息。如下图:
注意:如果服务端允许客户端推流,就会回应视频和音频的stream id。推流的时候,SSRC由推流端定义,拉流的时候由服务端发送给客户端。
1.5 RTP数据推送
(11)C->S:客户端向服务端发送流媒体数据,注意,流媒体数据是通过RTP协议(这里以基于UDP为基础来举例说明)发送,这个观点,前面已经反复强调过了。视频通道传送,如下图:
⾳频通道传送,如下图:
RTP协议传输数据。
RTCP控制命令传送,如下图:
如在音视频传输中间穿插发送些SSRC,NTP等相关信息。
1.6 关闭会话
(12)C->S:客户端向服务端发送TEARDOWN request,目的是客户端向服务端请求关闭会话。如下图:
(13)S->C:服务端向客户端回应TEARDOWN response,目的是服务端回应客户端该请求。如下图:
2.推流流程和拉流流程的区别
结合前面一篇文章对比,拉流流程和推流流程,有以下一些区别,如下:
(1)上文中描述的1.1步是一样的。
(2)1.2步是有区别,推流的时候发送ANNOUNCE,拉流的时候发送:DESCRIBE。
(3)推流和拉流在1.3步都是发送SETUP。
(4)1.4步骤,推流发送的是RECORD,拉流发送的是PLAY。
(5)1.5步骤,RTP传输,只是方向刚好向反。
(6)1.6步骤,关闭会话TEARDOWN是一样。
3.总结
上述的过程只是标准的的rtsp流程,不同的项目需求和环境中,并不⼀定按此过程。其中第1.3步和1.4步,是必需的。在1.1步过程中,只要服务断与客户端约定好,有哪些⽅法可⽤,则optionS请求可以不要。在1.2步过程中,如果有其它途径得到媒体初始化描述信息(⽐如http请求等等),则拉流的时候也不需要通过rtsp中的describe请求来完成。当然,各个复杂的需求不一样,这里说明的是一种通用的流程。
RTSP服务器默认端⼝是554,在客户端SETUP的时候,会把⾃身的RTP和RTCP端⼝号,告知服务端。在RTSP的session建⽴后,会使⽤RTP/RTCP在约定好的端⼝上传输数据。欢迎关注,收藏,转发,分享。
后期关于项目知识,也会更新在微信公众号“记录世界 from antonio”,欢迎关注
拉流与推流的区别_RTSP协议交互流程之推流分析相关推荐
- SSL/TLS协议交互流程分析
本文参考 SSL/TLS协议运行机制的概述 tls运行机制,这里不细说,建议细看 HTTPS与TLS The Transport Layer Security (TLS) Protocol v1.2 ...
- pppoe协议交互流程以及报文结构
文章目录 pppoe出现的原因: pppoe的交互流程 Discovery阶段: session阶段: Terminate阶段: pppoe报文结构: pppoe出现的原因: PPP (Point-t ...
- SRS4.0源代码分析之RTMP拉流处理
目标: 上一节分析了SRS针对推流客户端的处理逻辑,这里接下来分析针对拉流客户端的处理逻辑. SRS拉流端处理逻辑简单说就是SrsRtmpConn::do_playing()协程从SrsLiveCon ...
- 5、SRS4.0源代码分析之RTMP拉流处理
目标: 上一节分析了SRS针对推流客户端的处理逻辑,这里接下来分析针对拉流客户端的处理逻辑. SRS拉流端处理逻辑简单说就是SrsRtmpConn::do_playing()协程从SrsLiveCon ...
- 搭建流媒体推流/拉流服务(RTMP/RTSP/HLS/HTTP-FLV)
一.什么是流媒体 流媒体(streaming media)是指将一连串的媒体数据压缩后,经过网上分段发送数据,在网上即时传输影音以供观赏的一种技术与过程,此技术使得数据包得以像流水一样发送:如果不使用 ...
- 直播系统(推流拉流) nginx+JavaCV+springboot
nginx安装配置 1) 下载安装nginx,我下载的版本是nginx-1.7.11.3-Gryphon(提取码:xj6f),下载完成后解压 2) 下载服务器状态检查程序(提取码:i6hw),下载完成 ...
- 直播推流 ffmpeg 拉流二次转发 记录
因 前两天老大给我发了个任务,说让我做一个flask 服务器接口,接收请求,在请求参数中获取 直播拉流地址和 推流地址,然后调用 ffmpeg 到拉流地址上进行拉流 将拉到的流媒体数据推到另一个直播服 ...
- 开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享
开源流媒体解决方案,流媒体服务器,推拉流,直播平台,SRS,WebRTC,移动端流媒体,网络会议,优秀博客资源等分享 一.优秀的流媒体博客资源 1.1 EasyNVR:专注于安防视频互联网化的技术 1 ...
- Golang流媒体实战之六:lal拉流服务源码阅读
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos <Golang流媒体实战>系列的链接 体验 ...
最新文章
- 1.编译cartographer ROS
- Windows Server 2008网络基础结构的实现与管理
- Oracle 原理:用户和权限,Profile,系统权限,对象权限,角色
- 为什么defineProperty不能检测到数组长度的“变化”
- LeetCode Convert Sorted List to Binary Search Tree 解题报告
- html如何写微信弹窗,微信小程序 自定义弹窗实现过程(附代码)_而已_前端开发者...
- pid调节软件_三面大疆惨败,因为不懂PID的积分抗饱和
- Python 第六节课
- 未雨绸缪——理解软件配置管理(第2版)
- 激光打标程序 c语言,激光打标机 - 20160516labview - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
- 将pandas中object类型转换为int类型
- 使用php生成条形码
- 大数据下的用户画像标签去重
- AMiner订阅小程序上线,随时随地掌握最新科研成果
- 快速上手MATLAB
- android 防止反编译的若干方法
- 用个人博客打造一个酷酷的工作流
- 最新、最全和最广泛的人类心脏细胞图谱
- ACM简单计算题-装箱问题
- 找不到msvcp140.dll无法继续执行代码,要怎么去解决?