RTSP学习

RTSP基本原理

实时流传输协议(RTSP:RealTimeStreaming Protocol1)是一种网络传输协议,旨在发送低延迟流。
该协议由RealNetworks,Netscape和哥伦比亚大学的专家在1996年开发。它定义了应如何打包流中的数据以进行传输。
类似一个控制命令的协议play teardown
负责音视频的数据发送
SDP是封装在RTSP里面

RTP协议

文档:3-RFC3550(英文)-RTPATransport Protocol for Real-Time Applications.pdf
3-RFC3550(中文)-RTP协议中文版.pdf

推流详细过程

第一步:OPTION

1、C->S:OPTION request //询问S有哪些方法可用

在这里插入图片描述
1、.S->C:OPTION response //S回应信息的public头字段中包括提供的所有可用方法

在这里插入图片描述

注:P—演示,C—客户端,S—服务器, S(对象栏)—流

第二步:ANNOUNCE 发送媒体描述信息

2.C->S:ANNOUNCE request //客户端发送媒体描述信息给服务器
在这里插入图片描述
1.profile-level-id:
profile-level-id是16进制表示的3个字节的整数,按顺序分成3个字节,每个字节分别表示不同的含义。

  • profile_idc
  • profile-iop: 前6位分别是constraint_set0_flag, constraint_set1_flag, constraint_set2_flag, constraint_set3_flag, constraint_set4_flag, constraint_set5_flag, 最后两位为保留位
  • level_idc
    接收端默认支持哪种sub-profile由profile_idc和profile-iop中的几个bit共同决定。如下表:
    具体profile的名字含义如下:
    CB: Constrained Baseline profile,
    B: Baseline profile,
    M: Main profile,
    E: Extended profile,
    H: High profile,
    H10: High 10 profile,
    H42: High 4:2:2 profile,
    H44: High 4:4:4 Predictive profile,
    H10I: High 10 Intra profile,
    H42I: High 4:2:2 Intra profile,
    H44I: High 4:4:4 Intra profile,
    C44I: CAVLC 4:4:4 Intra profile
    2.packetization-mode:
    packetization-mode表示图像数据包分拆发送的方式。
    0: Single NAL (Network Abstraction Layer),每帧图像数据全部放在一个NAL单元传送;
    1: Not Interleaved,每帧图像数据被拆放到多个NAL单元传送,这些NAL单元传送的顺序是按照解码的顺序发送;
    2: Interleaved,每帧图像数据被拆放到多个NAL单元传送,但是这些NAL单元传送的顺序可以不按照解码的顺序发送
    实际上,只有I帧可以被拆分发送,P帧和B帧都不能被拆分发送。所以如果packetization-mode=1,则意味着I帧会被拆分发送。
    3.max-mbps:
    max-mbps表示每秒钟能处理的最大宏块数量。
    4.max-fs:
    max-fs表示接收端能够解码的一帧图像的最大尺寸,这个尺寸用这帧图像包含的宏块数来量化,即max-fs的数值。720p的max-fs典型值是3600, 1080p的max-fs典型值是8100。
    5.max-fps:
    max-fps表示接收端能够处理的最大帧率。如果发送端发送的帧率高于接收端设置的值,那么接受端会在解码后丢掉多余的帧。但是如果解码说可以支持1080p@30fps,其实它也是可以支持720p@60fps的。所以可以通过设置max-fps来提高处理的效率。
    6.max-br:
    max-br表示最大比特率,对VCL HRD参数是以1000bit为单位,对NAL HRD参数是以1200bit为单位。例子中max-br=1500,表示VCL HRD参数的最大比特率是1500 kbits/s,NAL HRD参数的最大比特率是1800 kbits/s。
    7.max-dpb:
    max-dpb(decoded picture buffer)表示用来存储解码后图像的buffer的最大尺寸。
    8.level-asymmetry-allowed:
    level-asymmetry-allowed表示是否允许两端编码的Level不一致。注意必须两端的SDP中该值都为1才生效。
    max-mbps,max-fs,max-fps,max-br和max-dpb这几个数值必须大于profile-level-id所指定的值,比如说level-id是Level 3.1,那么3.1规定的最大fs是3600,那么SDP中的max-fs必须要大于3600。但是如果真的按max-fs去编码,那你的帧率就要比profile-level-id规定的帧率要低。总之就是一个参数比规定的高,那其他方面参数就要比规定的要低,以此来平衡。
    9.sprop-parameter-sets
    禁止位,初始为0,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。
    fmtp:97 profile-level-id=1;mode=AAC-hbr;sizelength=13;irdexlength=3;indexdeltalength=3; config=119056E500

m=audio 9832 RTP/AVP 97
a=rtpmap:97 mpeg4-generic/48000/2
a=fmtp:97 streamtype=5;profile-level-id=1;sizeLength=13;IndexLength=3;indexDeltaLength=3;mode=AAC-hbr;config=2190;
c=IN IP4 10.143.44.169
“m=” :video:媒体名称  9832:端口  RTP/AVP:传输协议  97:RTP协议中的pt值
“a=rtpmap”:97:RTP协议中的pt值  mpeg4-generic:音频编码  48000:音频采样率  2:通道数
“a=fmtp”:streamtype:aac为5  profile-level-id: 1表示低复杂度类型  sizeLength:表示AU-size占用位数  
IndexLength:表示AU-Index占用位数  indexDeltaLength:表示AU-Index-delta占用位数  mode:表示编码模式
config:16进制2190 转化为二进制:00100 0011 0010 000
00100:aac的profile,这里为5
0011:3,表示采样率为48000
0010: 2,表示通道数
采样率表格

在这里插入图片描述
2.S->C:ANNOUNCE response //S回应媒体描述信息,并返回了Session ID

在这里插入图片描述

第三步:SETUP建立RTSP会话

3.1C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建立会话

在这里插入图片描述
RTP:30574
RTCP:30575
mode = record:推流
3.1 S->C:SETUP response 回建立的Session ID; //S建立会话,通过Transport头字段返回选择的具体转输选项项,并返
在这里插入图片描述RTP:30574->31354
在这里插入图片描述
RTCP:30575->31355

在这里插入图片描述
3.2C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建立会话

在这里插入图片描述
C->S
RTP:30576
RTCP:30577
3.2S->C:SETUP response //S建立会话,通过Transport头字段返回选择的具体转输选项
在这里插入图片描述
C->S
RTP:30576->32276
在这里插入图片描述

第四步:RECORD请求传送数据

4.C->S:RECORD request //C向S请求发送数据
在这里插入图片描述

4.S->C:RECORD response //S回应该允许的信息
在这里插入图片描述

第五步:RTP数据推送

C->S:发送流媒体数据 //通过RTP协议传送数据

第六步:TEARDOWN关闭会话,退出

6.C->S:TEARDOWN request //C请求关闭会话
在这里插入图片描述

总结

第一步:OPTION
第二步:ANNOUNCE发送媒体描述信息
第三步:SETUP建立RTSP会话
第四步:RECORD请求传送数据
第五步:RTP数据推送
第六步:TEARDOWN关闭会话,退出

拉流详细流程

第一步:查询服务器端可用方法

1.C->S:OPTION request //询问S有哪些方法可用
1.S->C:OPTION response //S回应信息的public头字段中包括提供的所有可用方法

第二步:DESCRIBE得到媒体描述信息

2.C->S:DESCRIBE request //要求得到S提供的媒体描述信息
在这里插入图片描述
2.S->C:DESCRIBE response //S回应媒体描述信息,一般是sdp信息
在这里插入图片描述
在这里插入图片描述

第三步:SETUP建立RTSP会话

3.1C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建会话
3.1 S->C:SETUP response //S建立会话,通过Transport头字段返回选择的具体转输选项
3.2 C->S:SETUP request //通过Transport头字段列出可接受的传输选项,请求S建立会话
3.2 S->C:SETUP response //S建立会话,通过Transport头字段返回选择的具体转输选项

第四步:PLAY请求开始传送数据

4.C->S:PLAY request //C请求S开始发送数据
在这里插入图片描述
4.S->C:PLAYresponse //S回应该请求的信息

在这里插入图片描述
可能流已经播放了一段时间,npt=起始时间,目前时先拉流在推流的

第五步:RTP数据传送播放中

S->C:发送流媒体数据 //通过RTP协议传送数据

第六步:TEARDOWN关闭会话,退出

6.C->S:TEARDOWN request //C请求关闭会话
6.S->C:TEARDOWN response//S回应该请求

SSRC

同步信源(SSRC)标识符,32个bit。标记RTP的来源,
推流:自己定义一个SSRC
拉流:会获取SSRC,可以根据SSRC识别信息

总结:

第一步:查询服务器端可用方法
第二步:DESCRIBE得到媒体描述信息
第三步:SETUP建立RTSP会话
第四步:PLAY请求开始传送数据
第五步:RTP数据传送播放中
第六步:TEARDOWN关闭会话,退出

推流拉流总结

第一步 option是一样的
第二步 有区别,推流:ANNOUNCE; 拉流:DESCRIBE
第三步: SETUP
第四步:推流:RECORD;拉流:PLAY
第五步:RTP传输,只是方向刚好相反
第六步:TEARDOWN

参考

RTSP 很详细的英文文档_setserveraddressandportforsdp-CSDN博客
最详细的音视频流媒体传输协议-rtsp协议详解 - 知乎 (zhihu.com)
SDP中H264 RTP Payload各项参数含义_level-asymmetry-allowed-CSDN博客
生成aac sdp文件 - Vzf - 博客园 (cnblogs.com)
Session入门(非常详细),从零基础入门到精通,看完这一篇就够了_创建session-CSDN博客
RTP报文头中 SSRC和CSRC区别-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

验收测试:从需求到交付的全程把控!

在软件开发过程中,验收测试是一个至关重要的环节。它不仅是对软件质量的把关,也是对整个项目周期的全程把控。从需求分析到最终的软件交付,验收测试都需要严格进行,以确保软件能够符合预期的质量和性能要求。 一、需求分析阶段 在…

数据结构(7.3_5)——红黑树的插入

红黑树的插入 注意:插入时候重点考察“不红红”特性(红黑树的性质) 染色:哪几个结点有变动就红的变黑,黑的变红 RR、LL、LR、RL从爷结点开始算起 非根结点的插入只需要判断是否违背的“不红红”特性 练习&#xff1…

UG NX二次开发(C#)-建模-根据拉伸体获取草图对象

文章目录 1、前言2、在UG NX中创建基于草图的拉伸对象2.1 在建模模块中进入草图环境2.2 创建拉伸特征2.3 分析拉伸特征父项3 实现代码3.1 基于NXOpen实现3.2 UFun函数实现3.3 效果1、前言 今天在QQ群中,有个群友咨询了根据拉伸体获取草图对象,我今天难得清闲一次,就讲一下吧…

PatrOwl:一款开源可扩展的安全协调运营平台

关于PatrOwl PatrOwl是一款开源可扩展的安全协调运营平台,广大研究人员可以使用该工具完成组织内部的安全协调运营。 该工具是一种可扩展、免费且开源的解决方案,用于协调安全操作。其中的PatrowlManager是前端应用程序,用于管理资产、实时审…

如何进行Ubuntu磁盘空间深度清理?

近期使用AutoDL算力云,发现系统盘只有30G,数据盘只有50G,跑一个稍微大一点的模型,马上空间就拉爆了,现在做一个磁盘深度清理操作,看看效果。 清理前磁盘占用如下: 在 Ubuntu 系统中进行磁盘深度…

云原生|浅谈云原生中的对象存储之MinIO 的使用

一、什么是对象储存 对象存储(Object Storage)以对象的形式存储和管理数据,这些对象可以是任何类型的数据,例如 PDF,视频,音频,文本或其他文件类型。对象存储使用分布式存储架构,数据…

Centos 8安装VNC及多用户配置详细教程

Centos 8安装VNC及多用户配置详细教程 参考一、安装前准备二、安装三、创建新用户和设置VNC密码四、创建VNC系统服务文件五、多用户映射和配置VNC六、客户端用VNC Viewer登录 参考 1、参考1: VNC安装英文说明(英文说明有误且仅适合单用户)&a…

MySQL篇(管理工具)

目录 一、系统数据库 二、常用工具 1. mysql 2. mysqladmin 3. mysqlbinlog 4. mysqlshow 5. mysqldump 6. mysqlimport/source 6.1 mysqlimport 6.2 source 一、系统数据库 MySQL数据库安装完成后,自带了一下四个数据库,具体作用如下&#xf…

基于SpringBoot+Vue的旅游攻略平台管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

MySQL安装文档-Windows

文章目录 MySQL安装1. 安装2. 配置 MySQL安装 1. 安装 1). 双击官方下来的安装包文件 2). 根据安装提示进行安装 安装MySQL的相关组件,这个过程可能需要耗时几分钟,耐心等待。 输入MySQL中root用户的密码,一定记得记住该密码 2. 配置 安装好MySQL之后…

光子架与电子架 -- 光子架与电子架

电子架 指插放交叉板、OTU单板、支/线路板、保护类单板的子架。 在通用型平台子架和平台子架中如果仅插放OTU单板(非中继模式)视为电子架。光电混合的子架视为电子架。 电子架主要实现将客户侧信号转换成标准波长的光信号,供光子架调度。 光子…

计算机毕业设计选题推荐-基于python的养老院数据可视化分析

精彩专栏推荐订阅:在下方主页👇🏻👇🏻👇🏻👇🏻 💖🔥作者主页:计算机毕设木哥🔥 💖 文章目录 一、养老院数据可…

手势手语识别数据集,YOLOv5目标检测两个数据集,图大量,模型精度高分别为近100类

手势手语识别数据集,YOLOv5目标检测 两个数据集,图大量,模型精度高分别为近100类 手势手语识别数据集(Sign Language Gesture Recognition Dataset) 数据集概述 该数据集专为手势手语识别设计,包含大量的…

【Python报错已解决】IndentationError: unexpected indent

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

数模方法论-无约束问题求解

一、基本概念 无约束问题在数学建模中是指优化过程中没有任何限制条件的情况。这种问题旨在寻找一个决策变量集合,使得某个目标函数(如成本、效益或其他需要优化的量)达到最大或最小值。具体来说,无约束问题通常可以表示为&#x…

Spring AOP - 注解方式实现

前文已经讨论了基于配置文件方式实现Spring AOP&#xff08;Spring AOP - 配置文件方式实现&#xff09;&#xff0c;本文采用注解的方式实现前文相同的功能。配置步骤如下&#xff1a; 1、项目增加aop依赖&#xff08;pom.xml) <dependency><groupId>org.springfr…

mysql复合查询 -- 多表查询(介绍,笛卡尔积,使用),自连接(介绍,使用)

目录 多表查询 介绍 使用 表数据 显示雇员名,雇员工资,以及所在部门名 显示部门号为10的部门名,员工名,工资 自连接 介绍 场景 表数据 题目 子查询 自连接 多表查询 介绍 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询 语法: from 表1,表2 (笛卡…

C++ | Leetcode C++题解之第433题最小基因变化

题目&#xff1a; 题解&#xff1a; class Solution { public:int minMutation(string start, string end, vector<string>& bank) {int m start.size();int n bank.size();vector<vector<int>> adj(n);int endIndex -1;for (int i 0; i < n; i)…

【漏洞复现】HIKVISION 视频编码设备接入网关 showFile.php 任意文件下载漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

云栖大会上我遇见了站长转型自媒体最成功的人

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 非常荣幸参加了第十六届2024云栖大会。文章很短&#xff0c;但很精。 这次大会有3大特点&#xff1a;人巨多、热、信号差&#xff0c;而且云栖大会上我遇见了站长转型自媒体最成功的人。甚至还有人说&#xff1a;云…