当前位置: 首页 > news >正文

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在流媒体中的应用场景
  1. 实时通信(WebRTC)
    在WebRTC中,SDP通过Offer/Answer模型交换双方的媒体能力(如支持的编解码器),并配合ICE协议完成网络穿透。

  2. 视频会议与直播
    描述多路音视频流的传输参数,支持多播地址分配和分层编码(如H.264的分辨率适配)。

  3. 流媒体传输(RTSP)
    RTSP协议通过SDP在DESCRIBE响应中传递媒体信息(如文件格式、时间范围),客户端据此发起播放请求。

  4. 网络电话(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 是基于会话的协议,客户端与服务端通过 SETUPPLAYTEARDOWN 等命令明确控制会话生命周期。
    • 会话标识:通过 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)。

3. HTTP流媒体(如HLS、DASH)

(1) 是否需要建立会话?
  • 无显式会话
    HTTP流媒体基于无状态的HTTP协议,通过请求-响应模式获取媒体分片:
    • HLS:客户端通过HTTP GET请求获取 .m3u8 索引文件和 .ts 分片。
    • DASH:客户端获取 .mpd 清单文件并请求 .m4s 分片。
(2) 是否需要 SDP?
  • 不需要 SDP
    媒体参数通过以下方式描述:
    • 清单文件:如HLS的 .m3u8 或DASH的 .mpd,包含码率、分辨率、分片URL等信息。
      #EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360
      stream_360p.ts
      

对比总结

协议会话管理媒体描述方式典型场景
RTSP显式会话(SETUP/PLAYSDP(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的核心功能 会话描述&#xff1a;定义会话的名称、创建者、时间范围、连接地址等全局信息。媒体协商&#xff1a;明确媒体流的类型&#xff08;如音频、视频&#xff09;、传输协议&#xff08;如RTP/UDP&#xff09;、编码格式&#xff08;如H.264、Op…...

基于YOLO11深度学习的运动鞋品牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

物体识别系统(识别图片中的物体)

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

数据表的存储过程和函数介绍

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

【DeepSeek-R1背后的技术】系列九:MLA(Multi-Head Latent Attention,多头潜在注意力)

【DeepSeek背后的技术】系列博文&#xff1a; 第1篇&#xff1a;混合专家模型&#xff08;MoE&#xff09; 第2篇&#xff1a;大模型知识蒸馏&#xff08;Knowledge Distillation&#xff09; 第3篇&#xff1a;强化学习&#xff08;Reinforcement Learning, RL&#xff09; 第…...

【JavaWeb12】数据交换与异步请求:JSON与Ajax的绝妙搭配是否塑造了Web的交互革命?

文章目录 &#x1f30d;一. 数据交换--JSON❄️1. JSON介绍❄️2. JSON 快速入门❄️3. JSON 对象和字符串对象转换❄️4. JSON 在 java 中使用❄️5. 代码演示 &#x1f30d;二. 异步请求--Ajax❄️1. 基本介绍❄️2. JavaScript 原生 Ajax 请求❄️3. JQuery 的 Ajax 请求 &a…...

[特殊字符] 蓝桥杯 Java B 组 之位运算(异或性质、二进制操作)

Day 6&#xff1a;位运算&#xff08;异或性质、二进制操作&#xff09; &#x1f4d6; 一、位运算简介 位运算是计算机底层优化的重要手段&#xff0c;利用二进制操作可以大大提高运算速度。常见的位运算包括&#xff1a; 与&#xff08;&&#xff09;&#xff1a;a &am…...

[MDM 2024]Spatial-Temporal Large Language Model for Traffic Prediction

论文网址&#xff1a;[2401.10134] Spatial-Temporal Large Language Model for Traffic Prediction 论文代码&#xff1a;GitHub - ChenxiLiu-HNU/ST-LLM: Official implementation of the paper "Spatial-Temporal Large Language Model for Traffic Prediction" …...

LTO优化详解

嵌入式开发过程中的LTO优化是什么意思&#xff1f;能够用来解决什么问题&#xff1f;它都优化了哪些&#xff1f;仅开启LTO真的可以优化SIZE的问题吗? 请分别回答我刚才提到的问题&#xff1f; 嗯&#xff0c;用户问关于嵌入式开发中的LTO优化&#xff0c;我需要详细解释这个概…...

分布式事务三阶段协议

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

LLaMA-Factory|微调大语言模型初探索(4),64G显存微调13b模型

上篇文章记录了使用lora微调deepseek-7b&#xff0c;微调成功&#xff0c;但是微调llama3-8b显存爆炸&#xff0c;这次尝试使用qlora微调HQQ方式量化&#xff0c;微调更大参数体量的大语言模型&#xff0c;记录下来微调过程&#xff0c;仅供参考。 对过程不感兴趣的兄弟们可以直…...

常用高压缩率的视频容器格式,并进行大比例压缩

常用的高压缩率视频容器格式,包括*.mp4 、*.mkv、*.webM等。     容器格式本身并不直接决定压缩率,而是取决于容器中所使用的视频编码格式等因素。不过,在常见的视频容器格式中,一些容器在搭配特定编码格式时,通常能表现出较高的压缩效率,以下是相关介绍: 1 MKV格式 …...

代码编译(词法义)

1.预处理 (Preprocessing)&#xff1a; 在这个阶段&#xff0c;编译器会处理所有以 # 开头的指令&#xff0c;如 #include、#define 等。它会把头文件的内容插入到源代码中&#xff0c;进行宏替换等预处理操作&#xff0c;生成一个纯净的代码文件。 3.词法分析 (Lexical Analy…...

android,flutter 混合开发,pigeon通信,传参

文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性&#xff0c;安全性&#xff0c;性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle&#xff0c;添加 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写贪吃蛇手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端贪吃蛇H5文件&#xff1a; 要求 蛇和食物红点要清晰&#xff0c;不超过屏幕外 下方有暂停和重新…...

【好玩的工具和命令】 ASCII 艺术生成工具: figlet

figlet 是一款用于生成 ASCII 艺术文字的工具&#xff0c;支持多种字体样式。它能将输入的文本转换为由字符组成的大型字母图案&#xff0c;广泛应用于命令行环境下的标题展示或装饰。 核心功能 生成 ASCII 文字艺术&#xff1a;将普通文本转化为大号的、由字符构成的艺术字…...

工具--安川伺服故障代码

上传一下安川伺服故障代码&#xff0c;后续结合实际维修经验&#xff0c;逐个整理分析&#xff0c;绝对超出手册经验 故障代码 故障描述 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编程语言的架构师。与你交流的用户是不懂代码的初中生&#xff0c;不善于表达产品和代码需求。你的工作对用户来说非常重要&#xff0c;完成后将获得10000美元奖励。 # Goal 你的目标是帮助用户以他容易理解的…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...