RTSP交互过程

RTSP(Real-Time Streaming Protocol)是一种用于实时流媒体传输的应用层协议。在RTSP通信中,以下是参与的主要角色和组件:

  1. 客户端(Client):发送请求并接收服务器的响应。客户端可以是一个播放器应用程序或其他支持RTSP协议的设备。

  2. 服务器(Server):接收来自客户端的请求,并提供相应的流媒体数据。服务器可以是一个流媒体服务器或其他支持RTSP协议的设备。

  3. RTSP协议栈:负责处理RTSP协议的各种细节,包括建立连接、发送请求、解析响应等。

  4. RTP(Real-time Transport Protocol):用于传输实时流媒体数据的协议。RTSP协议通常与RTP协议一起使用,以便在流媒体传输期间进行数据传输。

  5. 媒体服务器:存储和管理流媒体文件,并根据RTSP请求提供相应的媒体数据。

  6. 流媒体编码器/解码器:负责将音频和视频数据进行编码和解码,以便进行流媒体传输。

  7. SDP(Session Description Protocol):用于描述会话信息的协议。RTSP通信中,SDP通常用于描述流媒体的参数,如编码格式、传输协议、媒体流地址等。

  8. NAT(Network Address Translation):在存在网络地址转换的情况下,处理RTSP通信中的IP地址和端口映射问题。

  9. RTCP(Real-Time Control Protocol是用于实时流媒体传输的RTP协议的一个补充协议。它提供了一种用于监测和控制RTP会话质量的机制。尽管在某些情况下RTCP并不是必需的,但在大多数实时流媒体应用中,RTCP是非常有用的。

服务端读取视频文件,客户端进行拉流过程

  • 连接到RTSP服务器并发送OPTIONS请求以获取支持的方法列表。
  • 发送DESCRIBE请求以获取媒体资源的描述信息。
  • 如果需要进行身份验证,拉流客户端会发送SETUP请求以建立安全连接,并提供相关的认证信息。
  • 发送SETUP请求以建立传输通道,指定使用的传输协议和端口号。
  • 发送PLAY请求以开始拉取媒体流。
  • 如果需要暂停或停止拉流,拉流客户端可以发送PAUSETEARDOWN请求。

PLAY请求发出后,服务端需要创建UDP连接或者TCP连接,二者都可以,但是UDP连接的话需要创建两个,一个用于RTP包传输,一个用于RTCP反馈,使用TCP传输的话,客户端请求RTSPSetup请求时,RTSP服务器不需要再对应创建RTPRTCPUDP连接通道,因为TCP版的RTP传输,客户端与服务器交互时,无论是RTSP信令还是RTP数据包或者是RTCP数据包,都是使用同一个tcp连接通道。只不过这个tcp连接通道在发送rtp数据包或者rtcp数据包时,需要加一些分隔字节。

下面介绍一下RTP包,他保存的就是视频或者音频的数据了。

 /**    0                   1                   2                   3*    7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0*   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*   |V=2|P|X|  CC   |M|     PT      |       sequence number         |*   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*   |                           timestamp                           |*   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+*   |           synchronization source (SSRC) identifier            |*   +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+*   |            contributing source (CSRC) identifiers             |*   :                             ....                              :*   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+**/
struct RtpHeader
{/* byte 0 */uint8_t csrcLen : 4;//CSRC计数器,占4位,指示CSRC 标识符的个数。uint8_t extension : 1;//占1位,如果X=1,则在RTP报头后跟有一个扩展报头。uint8_t padding : 1;//填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。uint8_t version : 2;//RTP协议的版本号,占2位,当前协议版本号为2。/* byte 1 */uint8_t payloadType : 7;//有效载荷类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等。uint8_t marker : 1;//标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。/* bytes 2,3 */uint16_t seq;//占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。/* bytes 4-7 */uint32_t timestamp;//占32位,时戳反映了该RTP报文的第一个八位组的采样时刻。接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。/* bytes 8-11 */uint32_t ssrc;//占32位,用于标识同步信源。该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。/*标准的RTP Header 还可能存在 0-15个特约信源(CSRC)标识符每个CSRC标识符占32位,可以有0~15个。每个CSRC标识了包含在该RTP报文有效载荷中的所有特约信源*/
};struct RtpPacket
{struct RtpHeader rtpHeader;uint8_t payload[0];
};

RTP(Real-time Transport Protocol)报文是用于实时流媒体传输的协议数据单元(PDU),它负责承载音频、视频或其他实时媒体数据。下面对RTP报文进行详细解释:

  1. RTP报头(RTP Header):RTP报文以12字节的报头开始,包含了一些重要的元数据信息,如版本号、源标识符、序列号、时间戳等。
  • 版本号(Version):占据2个比特,表示RTP协议的版本。
  • 填充位(Padding):占据1个比特,如果被设置为1,表示在RTP报文末尾存在额外的填充字节。
  • 扩展位(Extension):占据1个比特,如果被设置为1,表示RTP报头后会包含一个扩展部分。
  • CSRC计数(CSRC Count):占据4个比特,表示CSRC(Contributing Source)标识符的个数。
  • 标记位(Marker):占据1个比特,由应用程序使用,可用于指示关键帧等重要信息。
  • 负载类型(Payload Type):占据7个比特,指定RTP载荷的类型,例如音频或视频编码格式。
  • 序列号(Sequence Number):占据16个比特,用于标识发送的RTP报文的顺序。
  • 时间戳(Timestamp):占据32个比特,用于同步和定时目的,表示报文中第一个字节的采样时刻。
  • SSRC(Synchronization Source)标识符:占据32个比特,用于唯一地标识发送RTP报文的源。
  1. CSRC列表(CSRC List):如果在RTP报头的CSRC计数字段中指定了非零值,那么后续的CSRC列表将包含对应的CSRC标识符。每个CSRC标识符占据32个比特。

  2. RTP扩展头(RTP Extension Header):如果RTP报头的扩展位被设置为1,则RTP报文会包含一个扩展头部。扩展头部提供了额外的自定义元数据信息,如传输速率、帧类型等。

  3. RTP载荷(RTP Payload):RTP载荷包含实际的媒体数据,例如音频或视频编码后的数据。其结构和格式由负载类型字段确定,并根据具体的编码标准进行解析和处理。

总而言之,RTP报文是一种用于实时流媒体传输的数据单元,它由报头、CSRC列表、扩展头部和载荷组成。报头包含了一些关键的元数据信息,如版本号、序列号、时间戳等。CSRC列表用于标识参与者的贡献源。扩展头部允许自定义的元数据信息。载荷部分包含实际的媒体数据,其格式由负载类型字段确定,并根据具体的编码标准进行解析和处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/577851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exploring the Limits of Masked Visual Representation Learning at Scale论文笔记

论文名称:EVA: Exploring the Limits of Masked Visual Representation Learning at Scale 发表时间:CVPR2023 作者及组织:北京人工智能研究院;华中科技大学;浙江大学;北京理工大学 GitHub:http…

ARM串口通信编程实验

完成:从终端输入选项,完成点灯关灯,打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…

redis复习笔记01(小滴课堂)

高并发的必备两大“核技术”队列和缓存 介绍本地缓存和分布式缓存 Nosql介绍和Reidis介绍 Linux服务器源码安装Redis6和相关依赖 在路径下上传压缩包。 上传压缩包。 版本更新了,但这是临时的。 版本更新了。 解压压缩包: 重命名: 我们可以看…

c++中的引用()

引用 引用是c中的,在C语言中是无法使用的。 引用的作用: 引用可以理解为给变量起一个别名(这时候大家可能会想到typedef,但是它们不同(原因看后面))。起一个别名之后,我们使用变量别名其实就是使用变量自己,生活中,我们会有自己的小名,那…

C# WPF上位机开发(MySql访问)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了数据库sqlite,不过这是一种小型的数据库,作为内部使用还可以。但是,如果要与外面的其他供应商进…

Android Intent 传递实体类到下一个 Activity

要在 Android 中通过 Intent 传递实体类对象,首先需要确保实体类对象实现了 Serializable 或 Parcelable 接口。 一、实现 Serializable 接口: public class MyObject implements Serializable {private String name;private int age;// 构造方法和其他…

蓝牙物联网在智慧医疗中的应用

物联网技术开启了万物互联的时代,并且随着智慧城市建设的加速推进及物联网技术对各行业的逐步渗透,“智慧”概念应运而生,诸如智慧能源、智慧交通、智慧医疗等“遍地开花”,可以说,物联网技术给各行业带来了产业模式上…

力扣labuladong一刷day46天并查集

力扣labuladong一刷day46天并查集 文章目录 力扣labuladong一刷day46天并查集一、323. 无向图中连通分量的数目二、130. 被围绕的区域三、990. 等式方程的可满足性 一、323. 无向图中连通分量的数目 题目链接:https://leetcode.cn/problems/number-of-connected-co…

转场动画路径动画

本篇文章我们介绍下转场动画及路径动画。 1、概述 转场动画有三种类型,页面间转场、组件内转场、共享元素转场。 2、页面间转场 页面间转场需要在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效。 2.1、函数说明 名称 参数 必填 参数描述…

Arduino/Android 蓝牙通信系统设计解决方案

随着当今安全管理的发展需求以及国家对安全监控行业的支持,这几年,安全监控行业发展迅猛,各类监控系统百花齐放。传统的温度监控系统通过有线或其他方式传送温度数据,而本文提出了利用蓝牙无线传输数据的设计方案,这种…

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(3)构建g2o顶点

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

FLStudio21中文版水果编曲软件好用吗?如何下载最新版本

FL Studio21版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 21版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio21版不仅拥有非常…

vue利用深拷贝解决修改不能取消的问题

vue利用深拷贝解决修改不能取消的问题 在对某数据进行修改时考虑还需要进行“确认”、“取消”操作,那么在取消时就需要返回保留的数据内容,那么如何将原有数据保留一份则是关键性问题。 显然修改值不能直接进行原值的赋值操作,因为这样无法取…

Hadoop——分布式计算

一、分布式计算概述 1. 什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果分布式计算:多台服务器协同工作,共同完成一个计算任务2. 分布式计算常见的2种工作模式分散->汇总 (MapReduce就是这种模式)将数据分片,多台服务器各自负责一…

金和OA C6 gethomeinfo sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 gethomeinfo接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取…

vue3+ts pinia存储及持久化

index.ts 需要安装pinia-plugin-persist npm i pinia-plugin-persist -Simport { createPinia} from "pinia" // 引入批量的pinia持久存储插件 import piniaPluginPersist from pinia-plugin-persist const storecreatePinia(); store.use(piniaPluginPers…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的?在此之前,先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时,需要进行三次握手,防止因为…

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

什么是图像中的掩膜(Mask),如何使用掩码

目录 掩膜的基本概念 掩膜的应用示例 实现方式 注意事项 基本步骤 示例:使用OpenCV处理图像 注意事项 在图像处理和计算机视觉领域,掩膜(Mask)是一个非常重要的概念。掩膜通常用于指定图像的某个区域,以便对这个…