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.mzph.cn/pingmian/54592.shtml

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

相关文章

C++ STL之栈stack

一.概述 C 中的 std::stack 是一种容器适配器,提供了一种后进先出(LIFO, Last In First Out)的数据结构。它只允许在栈顶进行插入和删除操作,不支持随机访问。 主要特性: 后进先出(LIFO)&…

二叉树(Java)

一.1.树形结构概念的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:…

[SDX35+WCN6856]SDX35 +WCN6856 remount firmware出现失败问题原因及解决方案

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…

大模型培训讲师叶梓:Llama Factory 微调模型实战分享提纲

LLaMA-Factory ——一个高效、易用的大模型训练与微调平台。它支持多种预训练模型,并且提供了丰富的训练算法,包括增量预训练、多模态指令监督微调、奖励模型训练等。 LLaMA-Factory的优势在于其简单易用的界面和强大的功能。用户可以在不编写任何代码的…

golang学习笔记28——golang中实现多态与面向对象

推荐学习文档 golang应用级os框架,欢迎stargolang应用级os框架使用案例,欢迎star案例:基于golang开发的一款超有个性的旅游计划app经历golang实战大纲golang优秀开发常用开源库汇总想学习更多golang知识,这里有免费的golang学习笔…

【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、BitField

前言: 上篇博客我们讲到redis五大基本数据类型(也是就下图的第一列)。 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客文章浏览阅读1k次,点赞24次,收藏10次。该篇适用于速成redis。本篇我们将讲解&#…

探秘链表:十大经典题目全解析

目录 💯前言 💯常见链表题目类型 ⭐反转链表 ⭐合并两个有序链表 ⭐检测链表中是否存在环 ⭐找到链表的中间节点 ⭐删除链表中的节点 ⭐判断两个链表是否相交 ⭐找到链表中环的入口节点 ⭐复制带随机指针的链表 💯解题技巧与注意事…

Leetcode 2246. 相邻字符不同的最长路径(一般树)树形dp C++实现

问题:Leetcode 2246. 相邻字符不同的最长路径 给你一棵 树(即一个连通、无向、无环图),根节点是节点 0 ,这棵树由编号从 0 到 n - 1 的 n 个节点组成。用下标从 0 开始、长度为 n 的数组 parent 来表示这棵树&#x…

001.从0开始实现线性回归(pytorch)

000动手从0实现线性回归 0. 背景介绍 我们构造一个简单的人工训练数据集,它可以使我们能够直观比较学到的参数和真实的模型参数的区别。 设训练数据集样本数为1000,输入个数(特征数)为2。给定随机生成的批量样本特征 X∈R10002 …

【Delphi】扩展现有组件创建新的 FireMonkey 组件(步骤二)

实现指定格式的属性 步骤 1 中创建的 TClockLabel 组件需要在显示当前时间时定义日期时间格式作为属性,以便组件用户可以指定。 一、实现指定格式的属性 要实现格式属性,请在 TClockLabel class 的发布部分添加以下一行: property Form…

Mybatis-Plus使用例过程中BaseMapper中的一些selectList方法找不到的问题

如果需要用到Mybatis-Plus里面BaseMapper的默认实现的一些方法,而不通过mapper.xml的方式自定义方法,那么在构建SqlSessionFactory的时候需要注意应该通过Mybatis-Plus中的MybatisSqlSessionFactoryBean来获取SqlSessionFactory,使用Mybatis中…

CST电磁仿真77GHz汽车雷达保险杠

77G毫米波雷达仿真时,要考虑天线罩和保险杠的影响。通常保险杠都是多层结构,有的层非常薄。如果采用传统的3D建模方法,会导致网格数量巨大,进而影响到求解效率。 三维保险杠(bumper)模型如下图所示&…

vue3.5新特性

vue在2024.09.03发布了3.5正式版本,其中包含多方面的升级和优化 性能优化 响应式系统重构优化,在内存占用、性能方面均有收益 Memory Usage Improvements Given a test case with 1000 refs 2000 computeds (1000 chained pairs) 1000 effects sub…

【C++篇】探寻C++ STL之美:从string类的基础到高级操作的全面解析

文章目录 C string 类详解:从入门到精通前言第一章:C 语言中的字符串 vs C string 类1.1 C 语言中的字符串1.2 C string 类的优势 第二章:string 类的构造与基础操作2.1 string 类的构造方法2.1.1 示例代码:构造字符串 2.2 string…

二期 1.4 Nacos安装部署 - Window版

本文目录 Nacos支持三种部署模式环境准备下载Nacos启动登录服务注册与查看Nacos支持三种部署模式 单机模式 - 用于测试和单机试用。集群模式 - 用于生产环境,确保高可用。多集群模式 - 用于多数据中心场景。以 Window单机模式 抛转引玉,其它部署方式参考官方文档: https://n…

使用Python实现深度学习模型:智能电影制作与剪辑

随着人工智能技术的飞速发展,深度学习在各个领域的应用越来越广泛。在电影制作与剪辑领域,深度学习技术也展现出了巨大的潜力。本文将介绍如何使用Python实现一个简单的深度学习模型,用于智能电影制作与剪辑。我们将使用TensorFlow和Keras库来构建和训练模型,并展示如何应用…

部署自己的对话大模型,使用Ollama + Qwen2 +FastGPT 实现

部署资源 AUTODL 使用最小3080Ti 资源,cuda > 12.0使用云服务器,部署fastGPT oneAPI,M3E 模型 操作步骤 配置代理 export HF_ENDPOINThttps://hf-mirror.com下载qwen2模型 - 如何下载huggingface huggingface-cli download Qwen/Qwen2-…

Python编程入门指南

本文为初学者提供了全面的Python编程入门指南,涵盖了基础语法、控制结构、函数、数据结构、文件操作、异常处理、模块与包、面向对象编程以及一些高级特性,帮助读者快速掌握Python编程的核心知识。通过详细解释Python编程的各个方面,文章旨在…

flutter遇到问题及解决方案

目录 1、easy_refresh相关问题 2、 父子作用域关联问题 3. 刘海屏底部安全距离 4. 了解保证金弹窗 iOS端闪退 (待优化) 5. loading无法消失 6. dialog蒙版问题 7. 倒计时优化 8. scrollController.offset报错 9. 断点不走 10.我的出价报红 11…