当前位置: 首页 > news >正文

RTSP协议

参考

本人也是初学,主要是为了初步了解该协议,便于后续开发中使用。

RTSP
RTSP服务端源码
B站新手向

函数

strdup()

概念

RTSP

RTSP协议以客户服务器方式工作,,如:暂停/继续、后退、前进等。它是一个多媒体播放控制协议,用来使用户在播放从因特网下载的实时数据时能够进行控制, 因此 RTSP 又称为“因特网录像机遥控协议”。

	应用层协议,体系结构位于RTP/RTCP之上,本身不是用于传输流媒体数
据,其本身是一个实时控制交互协议(负责服务端和客户端的交互请求)。

RTP

负责对流媒体数据进行封包并实现媒体流的实时传输,即它按照RPT数据包格式来封装流媒体数据,并利用与它绑定的协议进行数据包的传输。

RTP在端口号1025到65535之间选择一个未使用的偶数UDP端口号,而在同一次会话中的RTCP则使用下一个基数UDP端口号。RTP默认端口号5004,所以RTCP端口号默认为5005。

RTCP

RTCP也是用UDP来传送的,但RTCP封装的仅仅是一些控制信息,因而分组很短,所以可以将多个RTCP分组封装在一个UDP包中

工作原理

RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。RTSP媒体服务协议框架如下:
在这里插入图片描述

一次基本的RTSP操作过程:

  • 首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。
  • 流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。
  • 客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,
  • 客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。
  • 最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话

RTSP客户都请求格式

method url vesion\r\n
CSeq: x\r\n
xxx\r\n

\r\n

  • method:方法,表明这次请求的方法,rtsp定义了很多方法,稍后介绍
  • url:格式一般为rtsp://ip:port/session,ip表主机ip,port表端口好,如果不写那么就是默认端口,rtsp的默认端口为554,session表明请求哪一个会话
  • version:表示rtsp的版本,现在为RTSP/1.0
  • CSeq:序列号,每个RTSP请求和响应都对应一个序列号,序列号是递增的

RTSP服务端响应格式

RTSP服务端的响应格式
vesion 200 OK\r\n
CSeq: x\r\n
xxx\r\n

\r\n

  • version:表示rtsp的版本,现在为RTSP/1.0
  • CSeq:序列号,这个必须与对应请求的序列号相同

RTSP方法

在这里插入图片描述

RTSP重要头参数

RTSP重要头字段参数
Accept: 用于指定客户端可以接受的媒体描述信息类型。比如: Accept: application/rtsl, application/sdp;level=2
Bandwidth: 用于描述客户端可用的带宽值。
CSeq:指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。
Rang:用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。
Session: Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.
Transport: Transport头字段包含客户端可以接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如: Transport: RTP/AVP;multicast;ttl=127;mode=“PLAY”, RTP/AVP;unicast;client_port=3456-3457;mode=“PLAY”

RTSP请求过程

在这里插入图片描述

源码分析

还在看,持续更新

相关文章:

  • 【矩阵】托普利茨矩阵
  • 关于在分布式环境中RVN和使用场景的介绍4
  • 【Git】:远程仓库操作
  • 祝贺!湖南天府生态农业有限公司喜获“湖南省生猪核心育种场”授牌
  • 使用傅里叶实现100倍的压缩效果(附Python源码)
  • 【TCP/IP】组播
  • WPF 控件禁用时,显示悬浮提示
  • http协议工具:apache详解
  • 数学建模:BP神经网络(含python实现)
  • geoserver 热力图样式
  • 从kafka如何保证数据一致性看通常数据一致性设计
  • 利用LaTex批量将eps转pdf、png转eps、eps转png、eps转svg
  • 这才开工没几天收到Offer了,简历改的好,找工作没烦恼。
  • 基于ant的图片上传组件封装(复制即可使用)
  • 2个wordpress优化SEO主题模板
  • [PHP内核探索]PHP中的哈希表
  • [nginx文档翻译系列] 控制nginx
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angular 4.x 动态创建组件
  • AngularJS指令开发(1)——参数详解
  • classpath对获取配置文件的影响
  • CSS居中完全指南——构建CSS居中决策树
  • IDEA 插件开发入门教程
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java 网络编程(2):UDP 的使用
  • Markdown 语法简单说明
  • Median of Two Sorted Arrays
  • 大型网站性能监测、分析与优化常见问题QA
  • 电商搜索引擎的架构设计和性能优化
  • 搞机器学习要哪些技能
  • 设计模式走一遍---观察者模式
  • 深度学习中的信息论知识详解
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • (14)Hive调优——合并小文件
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (九)c52学习之旅-定时器
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET 材料检测系统崩溃分析
  • .NET 分布式技术比较
  • .NET/C# 的字符串暂存池
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • ?php echo ?,?php echo Hello world!;?
  • [ linux ] linux 命令英文全称及解释
  • []sim300 GPRS数据收发程序
  • [Android]通过PhoneLookup读取所有电话号码
  • [C++] 统计程序耗时
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [Java]快速入门优先队列(堆)手撕相关面试题