rtsp rtmp 跟 http 区别
SDP
一SDP介绍
1. SDP的核心功能
- 会话描述:定义会话的名称、创建者、时间范围、连接地址等全局信息。
- 媒体协商:明确媒体流的类型(如音频、视频)、传输协议(如RTP/UDP)、编码格式(如H.264、Opus)及端口信息。
- 网络参数:指定单播或多播地址、带宽限制、加密密钥等网络相关配置。
- 兼容性支持:通过文本格式的灵活扩展,适配不同传输协议(如SIP、RTSP、WebRTC)。
2. SDP的协议结构
SDP由会话级描述和媒体级描述两部分组成,采用<type>=<value>
的文本格式,每行以单个字母表示类型,如v
(版本)、m
(媒体)等。
(1)会话级描述(Session-Level)
- 必选字段:
v=
:协议版本(固定为v=0
)。o=
:会话创建者信息,格式为o=<用户名> <会话ID> <版本号> <网络类型> <地址类型> <地址>
。s=
:会话名称,若未命名则用-
占位。t=
:会话的起止时间(NTP时间戳)。
- 可选字段:
c=
:连接信息(如c=IN IP4 192.168.1.1
)。b=
:带宽限制(如b=AS:500
表示单媒体最大带宽500kbps)。a=
:扩展属性(如加密方式a=crypto:1 AES_CM_128_HMAC_SHA1_80
)。
(2)媒体级描述(Media-Level)
每个媒体流以m=
行开头,描述具体参数:
- 必选字段:
m=
:媒体类型(如audio
/video
)、端口、传输协议、负载类型列表(如m=audio 5004 RTP/AVP 96
)。
- 关键属性:
a=rtpmap
:动态负载类型与编码格式的映射(如a=rtpmap:96 H264/90000
)。a=fmtp
:编码参数的详细配置(如a=fmtp:96 profile-level-id=42801f
)。a=sendrecv
:媒体流方向(sendonly
/recvonly
/inactive
)。
3. SDP在流媒体中的应用场景
-
实时通信(WebRTC)
在WebRTC中,SDP通过Offer/Answer模型交换双方的媒体能力(如支持的编解码器),并配合ICE协议完成网络穿透。 -
视频会议与直播
描述多路音视频流的传输参数,支持多播地址分配和分层编码(如H.264的分辨率适配)。 -
流媒体传输(RTSP)
RTSP协议通过SDP在DESCRIBE
响应中传递媒体信息(如文件格式、时间范围),客户端据此发起播放请求。 -
网络电话(VoIP)
协商音频编码格式(如G.711、Opus)和传输地址,确保通话双方兼容。
4. SDP的示例与解析
以下是一个简化的SDP示例:
v=0
o=- 123456789 2 IN IP4 192.168.1.1
s=Example Session
c=IN IP4 192.168.1.1
t=0 0
m=audio 5004 RTP/AVP 96
a=rtpmap:96 OPUS/48000/2
a=sendrecv
m=video 5006 RTP/AVP 97
a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42e01f
- 会话级:定义版本、创建者IP和会话名称。
- 音频流:使用Opus编码,采样率48kHz,双向传输。
- 视频流:H.264编码,支持特定分辨率配置。
5. SDP的局限性
- 无协商能力:仅描述媒体信息,编码协商需依赖RTSP等协议。
- 静态配置:不支持动态调整参数(如带宽自适应),需结合其他协议实现。
二 会话管理 与SDP
1. RTSP(Real Time Streaming Protocol
(1) 是否需要建立会话?
- 需要显式会话。
RTSP 是基于会话的协议,客户端与服务端通过SETUP
、PLAY
、TEARDOWN
等命令明确控制会话生命周期。- 会话标识:通过
Session
头字段维护会话状态(如Session: 12345678
)。
- 会话标识:通过
(2) 是否需要 SDP?
- 需要 SDP。
RTSP 使用 SDP(Session Description Protocol)在DESCRIBE
响应中描述媒体流的详细信息:m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=control:track1
- 作用:定义媒体类型(视频/音频)、编码格式、传输协议(RTP)、控制路径等。
2. RTMP(Real-Time Messaging Protocol)
(1) 是否需要建立会话?
- 通过隐式连接管理会话。
RTMP 不显式声明会话,但通过以下机制维护逻辑会话:- NetConnection:客户端与服务端建立持久 TCP 连接(类似会话)。
- NetStream:在连接内创建多个流通道(如
stream ID=1
),每个流独立传输数据。
(2) 是否需要 SDP?
- 不需要 SDP。
RTMP 通过以下方式传递媒体参数:- 元数据(onMetaData):客户端在发布流时发送元数据(分辨率、编码格式等)。
> onMetaData: { width: 1280, height: 720, videocodecid: 7 (H.264) }
- 编码协商:客户端在
connect
命令中声明支持的编解码能力(如videoCodecs: 128
)。
- 元数据(onMetaData):客户端在发布流时发送元数据(分辨率、编码格式等)。
3. HTTP流媒体(如HLS、DASH)
(1) 是否需要建立会话?
- 无显式会话。
HTTP流媒体基于无状态的HTTP协议,通过请求-响应模式获取媒体分片:- HLS:客户端通过HTTP GET请求获取
.m3u8
索引文件和.ts
分片。 - DASH:客户端获取
.mpd
清单文件并请求.m4s
分片。
- HLS:客户端通过HTTP GET请求获取
(2) 是否需要 SDP?
- 不需要 SDP。
媒体参数通过以下方式描述:- 清单文件:如HLS的
.m3u8
或DASH的.mpd
,包含码率、分辨率、分片URL等信息。#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360 stream_360p.ts
- 清单文件:如HLS的
对比总结
协议 | 会话管理 | 媒体描述方式 | 典型场景 |
---|---|---|---|
RTSP | 显式会话(SETUP /PLAY ) | SDP(DESCRIBE 响应) | 视频监控、IPTV |
RTMP | 隐式会话(NetConnection) | 元数据(onMetaData ) | 直播推流、低延迟交互 |
HTTP流媒体 | 无会话(无状态HTTP) | 清单文件(m3u8/mpd) | 自适应流(HLS/DASH) |
关键区别解释
1. 会话管理
- RTSP:需要显式控制会话状态(如播放、暂停),适合需要精细控制的场景。
- RTMP:通过长连接维护隐式会话,适合持续流传输(如直播)。
- HTTP流媒体:无会话,每次请求独立,适合CDN分发和自适应码率。
2. 媒体参数传递
- RTSP:依赖SDP标准化描述,确保跨平台兼容性。
- RTMP:通过私有元数据和命令协商参数,灵活性高但标准化较弱。
- HTTP流媒体:通过清单文件静态描述,支持动态切换码率。
适用场景建议
- 低延迟控制:RTMP(1-3秒)或 RTSP(配合RTP)。
- 高兼容性分发:HTTP(HLS/DASH)。
- 设备控制:RTSP(如摄像头PTZ控制)。
相关文章:
rtsp rtmp 跟 http 区别
SDP 一SDP介绍 1. SDP的核心功能 会话描述:定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商:明确媒体流的类型(如音频、视频)、传输协议(如RTP/UDP)、编码格式(如H.264、Op…...

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

物体识别系统(识别图片中的物体)
这是一个基于 PyTorch 和 PyQt5 的物体识别程序,使用 Faster R-CNN 模型来识别图片中的物体,并通过图形界面展示识别结果。 1.用户界面 主窗口:包含加载图片、识别、清除按钮,以及图片显示区域和结果展示区域。 图片显示&#…...

数据表的存储过程和函数介绍
文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)
【DeepSeek背后的技术】系列博文: 第1篇:混合专家模型(MoE) 第2篇:大模型知识蒸馏(Knowledge Distillation) 第3篇:强化学习(Reinforcement Learning, RL) 第…...

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?
文章目录 🌍一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 🌍二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...
[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)
Day 6:位运算(异或性质、二进制操作) 📖 一、位运算简介 位运算是计算机底层优化的重要手段,利用二进制操作可以大大提高运算速度。常见的位运算包括: 与(&):a &am…...

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction
论文网址:[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码:GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...
LTO优化详解
嵌入式开发过程中的LTO优化是什么意思?能够用来解决什么问题?它都优化了哪些?仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题? 嗯,用户问关于嵌入式开发中的LTO优化,我需要详细解释这个概…...

分布式事务三阶段协议
分布式事务的三阶段分别是准备阶段、预提交阶段和提交 / 回滚阶段,以下是详细介绍: 三阶段提交协议可以理解为两阶段提交协议的改良版,是在协调者和参与者中都引入超时机制,并且把两阶段提交协议的第一个阶段分成了两步: 询问&am…...

LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型
上篇文章记录了使用lora微调deepseek-7b,微调成功,但是微调llama3-8b显存爆炸,这次尝试使用qlora微调HQQ方式量化,微调更大参数体量的大语言模型,记录下来微调过程,仅供参考。 对过程不感兴趣的兄弟们可以直…...
常用高压缩率的视频容器格式,并进行大比例压缩
常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。 容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。不过,在常见的视频容器格式中,一些容器在搭配特定编码格式时,通常能表现出较高的压缩效率,以下是相关介绍: 1 MKV格式 …...
代码编译(词法义)
1.预处理 (Preprocessing): 在这个阶段,编译器会处理所有以 # 开头的指令,如 #include、#define 等。它会把头文件的内容插入到源代码中,进行宏替换等预处理操作,生成一个纯净的代码文件。 3.词法分析 (Lexical Analy…...

android,flutter 混合开发,pigeon通信,传参
文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...

at32f403a rt thread led基础bsp工程测试
1.led工程官方bsp使用 导出一个独立的AT32F403A的BSP工程 下载RTT源代码 gitee更新较慢 https://gitee.com/rtthread/rt-thread github版本更新最新 https://github.com/RT-Thread/rt-thread. 切换到V5.1.0分支(使用一个发布版本可以避免不必要的bug) 导出一个独立的AT32BSP…...

DeepSeek写贪吃蛇手机小游戏
DeepSeek写贪吃蛇手机小游戏 提问 根据提的要求,让DeepSeek整理的需求,进行提问,内容如下: 请生成一个包含以下功能的可运行移动端贪吃蛇H5文件: 要求 蛇和食物红点要清晰,不超过屏幕外 下方有暂停和重新…...

【好玩的工具和命令】 ASCII 艺术生成工具: figlet
figlet 是一款用于生成 ASCII 艺术文字的工具,支持多种字体样式。它能将输入的文本转换为由字符组成的大型字母图案,广泛应用于命令行环境下的标题展示或装饰。 核心功能 生成 ASCII 文字艺术:将普通文本转化为大号的、由字符构成的艺术字…...
工具--安川伺服故障代码
上传一下安川伺服故障代码,后续结合实际维修经验,逐个整理分析,绝对超出手册经验 故障代码 故障描述 a.020/a.02 用户参数和数检查异常 1 a.021/a.02 参数格式化异常 1 a.022/a.02 系统参数和数检查异常 1 a.023/a.02 参数密码异常…...

车载软件架构 --- OEM主机厂如何打入软件供应商内部?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

AI 编程助手 cursor的系统提示词 prompt
# Role 你是一名极其优秀具有10年经验的产品经理和精通java编程语言的架构师。与你交流的用户是不懂代码的初中生,不善于表达产品和代码需求。你的工作对用户来说非常重要,完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
反向工程与模型迁移:打造未来商品详情API的可持续创新体系
在电商行业蓬勃发展的当下,商品详情API作为连接电商平台与开发者、商家及用户的关键纽带,其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息(如名称、价格、库存等)的获取与展示,已难以满足市场对个性化、智能…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...