RTSP和RTP、RTCP协议介绍

2023-11-04

一、RTSP

1、简介

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,属于应用层。RTSP以客户端方式工作,对流媒体提供播放、暂停、后退、前进等操作。

它主要用来控制具有实时特性的数据的发送,但其本身并不用于传送流媒体数据,而必须依赖下层传输协议(如RTP/RTCP)所提供的服务来完成流媒体数据的传送。RTSP负责定义具体的控制信息、操作方法、状态码,以及描述与RTP之间的交互操作。

RTSP可以在TCP上传输也可以在UDP上传输,而RTP和RTCP是基于UDP协议的(TCP协议的重传机制可能会引起较大时延)。

2、RTSP的URL

客户端要播放RTSP媒体流,就需要知道媒体源的URL,RTSP的URL格式一般如下:

rtsp://host[:port]/[abs_path]/content_name

host: 有效的域名或IP地址;

port: 端口号,缺省为554,若为缺省可不填写,否则必须写明。

目前市面上常用的海康网络摄像头的RTSP地址格式为:

rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream

示例: rtsp://admin:12345@192.168.1.67:554/h264/ch1/main/av_stream

3、RTSP报文

RTSP是一种基于文本的协议,用CRLF(回车换行)作为每一行的结束符。

rtsp中定义的方法有:OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, GET_PARAMETER ,SET_PARAMETER 

1.OPTION 目的是得到服务器提供的可用方法

2.DESCRIBE C向S发起DESCRIBE请求,为了得到会话描述信息(SDP)

3.SETUP 客户端提醒服务器建立会话,并确定传输模式

uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端根据interleaved的值来区别是哪种数据包。

4.PLAY  客户端发送播放请求

5.TEARDOWN 客户端发起关闭请求

ps:

sdp的格式

v=<version>

o=<username> <session id> <version> <network type> <address type> <address>

s=<session name>

i=<session description>

u=<URI>

e=<email address>

p=<phone number>

c=<network type> <address type> <connection address>

b=<modifier>:<bandwidth-value>

t=<start time> <stop time>

r=<repeat interval> <active duration> <list of offsets from start-time>

z=<adjustment time> <offset> <adjustment time> <offset> ....

k=<method>

k=<method>:<encryption key>

a=<attribute>

a=<attribute>:<value>

m=<media> <port> <transport> <fmt list>

v = (协议版本)

o = (所有者/创建者和会话标识符)

s = (会话名称)

i = * (会话信息)

u = * (URI 描述)

e = * (Email 地址)

p = * (电话号码)

c = * (连接信息)

b = * (带宽信息)

z = * (时间区域调整)

k = * (加密密钥)

a = * (0 个或多个会话属性行)

时间描述:

t = (会话活动时间)

r = * (0或多次重复次数)

媒体描述:

m = (媒体名称和传输地址)

i = * (媒体标题)

c = * (连接信息 — 如果包含在会话层则该字段可选)

b = * (带宽信息)

k = * (加密密钥)

a = * (0 个或多个媒体属性行)

4、RTSP认证

rtsp认证分为2种:基本认证(basic authentication)、摘要认证(digest authentication)。基本认证是http1.0的认证方案,摘要认证是1.1针对1.0的改进版本,基本认证由于存在未加密直接传送有安全隐患,摘要认证经过MD5转换,具备更高的安全性。

认证过程:

客户端发送不带认证信息的DESCRIBE请求到服务端,RTSP服务端认为没有通过认证,返回401 Unauthorized携带WWW-Authenticate认证响应。

此时客户端程序应该弹出密码认证窗口 ,提示输入认证信息:用户名和密码

从响应消息中进行判断,如果发现是basic认证,通过对 username:password 进行base64编码得到Authorization,携带Authorization再次发起DESCRIBE请求。

如果是digest认证,还会返回一个nonce字段,客户端以用户名,密码,nonce,HTTP方法,请求的URI等信息为基础产生response信息进行反馈,其中response计算方法如下:

(1)当password为MD5编码,则

   response = md5( password:nonce:md5(public_method:url)  );

(2)当password为ANSI字符串,则

    response= md5( md5(username:realm:password):nonce:md5(public_method:url) );
客户端在每次发起不同的请求方法时都需要计算response字段,同样在服务器端校验时也默认采取同样的计算方法。

例如:

Authorization: Digest username="admin",realm="Hipcam RealServer", nonce="3b27a446bfa49b0c48c3edb83139543d",uri="rtsp://192.168.123.158:554/11", response="258af9d739589e615f711838a0ff8c58"
 

通过对海康摄像头取流播放抓包得到的rtsp报文内容:

 二、RTP和RTCP

数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。

控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。

RTP的工作机制为:
当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。

è¿éåå¾çæè¿°

版本号(V):2比特,用来标志使用的RTP版本。

填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。

扩展位(X): 1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。

CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。

标记位(M): 1比特,??
载荷类型(PayloadType): 7比特,标识了RTP载荷的类型。

序列号(SN):16比特,每发送一个 RTP 数据包,序列号增加1。接收端可以据此检测丢包和重建包序列。

时间戳(Timestamp): 2比特,记录了该包中数据的第一个字节的采样时刻。在一次会话开始时,时间戳初始化成一个初始值。即使在没有信号发送时,时间戳的数值也要随时间而不断地增加(时间在流逝嘛)。时钟频率依赖于负载数据格式,并在描述文件(profile)中进行描述。

同步源标识符(SSRC):32比特,同步源就是指RTP包流的来源。在同一个RTP会话中不能有两个相同的SSRC值。该标识符是随机选取的 RFC1889推荐了MD5随机算法。

贡献源列表(CSRC List):0~15项,每项32比特,用来标志对一个RTP混合器产生的新包有贡献的所有RTP包的源。由混合器将这些有贡献的SSRC标识符插入表中。SSRC标识符都被列出来,以便接收端能正确指出交谈双方的身份。
 

RTCP???

参考:

https://www.cnblogs.com/yuweifeng/p/7567846.html   流媒体协议之RTSP详解20170922

https://blog.csdn.net/deliapu/article/details/79199023  网络流媒体协议之——RTSP协议

https://blog.csdn.net/lanfengywf/article/details/80924275 流媒体协议之RTSP客户端的实现20171014

https://www.cnblogs.com/yuweifeng/p/7550737.html  流媒体协议之JRTPLIB的使用20170919

https://github.com/babosa/Course  GitHub课程

https://blog.csdn.net/machh/article/details/51868569  RTP/RTCP协议解析

https://blog.csdn.net/machh/article/details/52121648  流媒体传输协议详解之---RTSP认证

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTSP和RTP、RTCP协议介绍 的相关文章

  • Unity环境下RTMP推流+RTMP播放低延迟解决方案

    在本文之前 我们发布了Unity环境下的RTMP推流 Windows平台 Android平台 和RTMP RTSP拉流 Windows平台 Android平台 iOS平台 低延迟的解决方案 今天做个整体汇总 权当抛砖引玉 1 Unity环境
  • ffprobe -show_packets和-show_frames之间的区别

    一 show packets 我们只查看视频的packets ffprobe show packets rtmp jdpull jd com live 14042733 of xml grep video 结果如下
  • H.264(H264)视频文件的制作

    一 准备工作 1 下载并安装优酷客户端 2 下载ffmpeg可执行文件 解压可用 不需要下载源码自己编译 ffmpeg可执行文件下载链接 http download csdn net detail caoshangpa 9492758 二
  • FFmpeg入门详解之92:Live555学习之(一)-------Live555的基本介绍

    Live555学习之 一 Live555的基本介绍 前一阵子 因为项目需要 研究了一下Live555开源框架 研究的不是很深入 基本上把Live555当做API用了一下 但是毕竟也是本人看的第一个开源框架 在此记录总结一下 Live555是
  • 6款真正好用的播放器推荐

    GOM player GOM player 是一款本身装有视频播放所需的解码 及占用系统资源少 并且能以最优秀的画质来观看多种格式影片的播放程序 可以支持播放大多数当前流行的视频格式 如 MP4 AVI WMV MKV MOV FLV 等
  • GB28181媒体保活机制探究与实现

    规范解读 GB28181 2016和GB28181 2022关于媒体保活机制这块 并无调整 平台 设备媒体流保活机制规定如下 a 链路建立后 码流经过的各级平台应具备媒体流丢失监测能力 若监测到媒体流丢失 应释放该条媒体链路 并通过会话内B
  • RTP和RTCP详解

    1 RTP和RTCP详解 文章目录 1 RTP和RTCP详解 1 1 概述 1 2 RTP协议详解 1 3 RTCP协议详解 1 1 概述 在流媒体相关的领域 我们进场会看到RTP RTCP 其用于流式传输的最常见的码流传输协议 位于传输层
  • ffmpeg命令行map参数的使用

    介绍 理解 map参数的最好办法就是想像一下怎么去告诉ffmpeg你要从源文件中选择 拷贝哪个流到输出文件 输出文件的stream顺序取决于在命令行中 map的参数顺序 下面有一些例子 默认 默认操作 没有指定map参数 比如 ffmpeg
  • RTP时间戳概念

    RTP协议不依赖于底层协议 由于UDP包的快速 时实性高的特点 它通常和UDP结合在一起 作为UDP的上层载体数据的形式传播 typedef struct rtp header t uint32 t v 2 protocol version
  • GB/T28181-2022针对H.265、AAC的说明和技术实现

    GB T28181 2022规范说明 GB T28181 2022相对来GB T28181 2016针对H 265 AAC的更新如下 更改了 联网系统通信协议结构图 媒体流通道增加了 H 265 G 722 1 AAC 见 4 3 1 20
  • Red5应用开发(三) 点播

    Red5点播默认只支持RTMP协议的点播地址 RTSP和HLS需要使用插件的形式进行配置 插件需要自己编译 很多依赖有问题 后期有需求再更新 Github 仓库地址 利用Red5的Eclipse插件生成的默认Red5工程即可直接作为点播应用
  • GB/T28181-2016传输要求和Android平台设备接入技术实现

    相关协议规范 GB T28181 2016公共安全视频监控联网系统 信息传输 交换 控制技术要求相关的传输要求如下 5 1 网络传输协议要求 联网系统网络层应支持IP协议 传输层应支持 TCP和 UDP协议 5 2 媒体传输协议要求 视音频
  • 前端实现预览功能,播放rtsp视频流(node.js+ffmpeg+flv.js)

    实现思路 获取摄像头rtsp流 通过node js ffmpeg转码 通过哔哩哔哩flv js播放 1 获取摄像机RTSP流 之前文章有说明不多阐述 2 配置流媒体服务器 1 下载安装node js 运行node js 网上教程很多自行下载
  • GB/T28181-2022图像抓拍规范解读及技术实现

    规范解读 GB28181 2022相对2016 增加了设备软件升级 图像抓拍信令流程和协议接口 我们先回顾下规范说明 图像抓拍基本要求 源设备向目标设备发送图像抓拍配置命令 携带传输路径 会话ID等信息 目标设备完成图像传输后 发送图像抓拍
  • Android平台一对一音视频通话方案对比:WebRTC VS RTMP VS RTSP

    一对一音视频通话使用场景 一对一音视频通话都需要稳定 清晰和流畅 以确保良好的用户体验 常用的使用场景如下 社交应用 社交应用是一种常见的使用场景 用户可以通过音视频通话进行面对面的交流 在线教育 老师和学生可以通过音视频通话功能进行实时互
  • 深入理解Google Cast(三)探寻原理

    如何开发一个receiver application 先来简单说一下这个话题 Receiver本质就是一个网页 由html CSS和jacascript开发 如果要自定义receiver application 需要在 Google Cas
  • 视频编码格式发展史

    1 编码标准之战 想预测未来 就回顾历史 先来看看H 264这些编码的从标准化到现在普及的过程 人们一直在想尽办法提高视频编码的效率 让它在尽可能小的体积内提供最好的画面质量 从而满足人们对于视频传输 存储的需求 长期以来 视频编码标准主要
  • Android前端音视频数据接入GB28181平台意义

    技术背景 在我们研发Android平台GB28181前端音视频接入模块之前 业内听到最多的是 如何用Android或者Windows端 在没有国标IPC设备的前提下 模拟GB28181的信令和媒体流交互流程 实现GB28181整体方案的测试
  • 最新VLC命令行参数大全(一)

    用法 vlc 选项 流 您可以在命令行中指定多个流 它们将被加入播放列表队列 指定的首个项目将被首先播放 选项风格 选项 用于设置程序执行期间的全局选项 选项 单字母版本的全局 选项 选项 仅对此选项之前的单条流生效 且优先级高于先前的设置
  • GB28181状态信息报送解读及Android端国标设备接入技术实现

    今天主要聊聊GB T28181状态信息报送这块 先回顾下协议规范相关细节 然后再针对代码实现 做个简单的说明 状态消息报送基本要求 当源设备 包括网关 SIP设备 SIP客户端或联网系统 发现工作异常时 应立即向本 SIP监控域 的SIP服

随机推荐

  • Flutter的路由router-页面跳转

    文章目录 概念介绍 基本路由 Basic Routing 跳转到某个页面 弹出页面 命名路由 Named Routing 第三方路由管理库 Third Party Routing Libraries Android原生的路由 Intent
  • 两条线段是否相交原理及C++实现

    step 1 快速排斥 如上图1 2所示 AB的最大X坐标 如果小于PQ的最小X坐标 则不相交 CD和UV判断同理 换成 坐标即可 step 2 利用向量叉乘判断 亦称跨立方法 2D 叉乘可把 2D 点看作 3D 的点 z 轴的值为 0 套
  • Spring 如何使用注解实现事务管理呢?

    转自 Spring 如何使用注解实现事务管理呢 下文讲述Spring使用注解使用事务管理的方法分享 实现思路 使用 Annotation 需进行以下设置 1 在 Spring 容器中注册驱动
  • 正交矩阵

    正交矩阵是实数特殊化的酉矩阵 因此总是正规矩阵 尽管我们在这里只考虑实数矩阵 这个定义可用于其元素来自任何域的矩阵 正交矩阵毕竟是从内积自然引出的 对于复数的矩阵这导致了归一要求 定义 定义 1 如果 AA E E为单位矩阵 A 表示 矩阵
  • switch-case流程图

    第一种情况 每一个case后面都有break switch p case 1 process 1 break case 2 process 2 break case n process n break default process n 1
  • 02-蘑菇街爬虫mw-sign参数破解

    02 蘑菇街爬虫mw sign参数破解 目录 01 蘑菇街爬虫准备工作1 02 蘑菇街爬虫mw sign参数破解 03 蘑菇街爬虫概述 04 蘑菇街爬虫 店铺搜索页面 mw sign参数分析 经过网友断点测试 我们发现mw sign是经过两
  • 运维重点小知识点总结

    1 可以使用lsblk命令树形方式显示所有可用块设备情况 lsblk NAME MAJ MIN rm SIZE RO type mountpoint sda 8 0 0 232 9G 0 disk sda1 8 1 0 46 6G 0 pa
  • 使用Python批量提取TRMM降水数据均值

    今天给大家分享一个数据平均值的吧 好像从来没有分享过这个内容 以问题为导向利用Python帮助我们解决在科研中遇到的问题 最近有同学在处理TRMM降水数据的时候 说是要提取每个月的均 值出来 数据格式是tif栅格 目的也是非常明确的 提取多
  • Linux文件管理(文件/目录的创建、更改、删除)

    一 Linux文件命名规则 1 严格区分大小写 2 文件命名不能使用字符 3 目录或文件名的长度不能超过255个字符 建议 1 文件名由两个或两个以上单词组成时 尽量使用 来代替space键 2 尽量不用字母的大小写来区分文件或者目录 4
  • curl

    什么是curl命令 curl是利用URL语法在命令行方式下工作的开源文件传输工具 它被广泛应用在Unix 多种Linux发行版中 并且有DOS和Win32 Win64下的移植版本 如何在windows下使用curl命令 第一步 进入curl
  • 在 AIX 5.3 和 6.1 中使用 Veritas Volume Manager (VxVM) V5 管理逻辑卷

    引言 在 UNIX 存储管理市场上 有两家主要的领先厂商 IBM 和 Veritas 现在的 Symantec 两家公司都提供帮助 UNIX 系统管理员以非常灵活的方法管理存储设备的产品 Veritas 提供了 Veritas Volume
  • feign接口自动生成工具

    Feign Generator 介绍 最近发现开发spring cloud时 编写feign接口是一件痛苦的事 不仅要编写feign接口 还有fallback 请求参数和返回值等 大量重复工作 很浪费时间 于是便想到可以编写工具自动生成fe
  • Mysql触发器

    本文主针对小白 如何在数据库有数据变动得时候及时得到内容 MySQL触发器 Triggers 是一种数据库对象 它在指定的事件 例如插入 更新或删除数据 发生时自动执行一系列预定义的操作 触发器通常用于实施业务规则 数据完整性约束和自动化任
  • CentOS-7 RHEL-8 yum源的配置(本地yum源 + 互联网yum源)

    CentOS 7 RHEL 8 yum源的配置 本地yum源 互联网yum源 yum 全称为 Yellow dog Updater Modified 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器 基于RP
  • 11款在线视频编辑和分享网站

    这是之前介绍的一些视频编辑相关工具 16个免费开源的视频编辑软件下载 VCASMO 在线创建混合多媒体演示 12款制作视频教程的屏幕录像工具 下面是现在要介绍的11款在线视频编辑和分享网站 收集的不够完全 各取所需 Jumpcut Jump
  • 【LaTeX】两张并排图片垂直对齐

    figure中插入两张并排图片 但是垂直无法居中 解决方法 通过 raisebox 2 height 抬高图片 例如 begin figure htbp centering subfigure ReLU begin minipage t 0
  • Linux 系统 less命令详解

    Linux中的less命令是一个非常常用的文本查看工具 它可以用于查看任意大小的文本文件 支持滚动翻页 搜索 标记等功能 在本文中 我们将详细介绍less命令的用法 参数和实例 并对其背后的原理和相关技术进行简要讲解 一 less命令的基本
  • flowable流程实例笔记(1)

    RuntimeService 运行服务类 支持启动的方式 流程定义 从这里获取资源文件 执行实例 流程实例中执行的每个环节 流程实例 一个流程实例包括所有运行的节点 一个流程中流程实例只有一个 启动一个实例 public void star
  • 关于性能测试,测试人员必须要知道的

    随着各企业的业务发展 用户量以及数据量的不断增加 系统承载的压力也会随之增加 服务系统的性能好坏又严重影响企业的利益 因此 性能测试重要性与需求越来越强烈 常见的性能测试目的 性能测试是确定系统在特定工作负载下的稳定性和响应能力 在进行性能
  • RTSP和RTP、RTCP协议介绍

    一 RTSP 1 简介 RTSP Real Time Stream Protocol 协议是一个基于文本的多媒体播放控制协议 属于应用层 RTSP以客户端方式工作 对流媒体提供播放 暂停 后退 前进等操作 它主要用来控制具有实时特性的数据的