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

rtsp rtmp 跟 http 区别

一 会话管理 与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控制)。

通过理解这些协议的设计差异,可以更好地选择适合业务需求的流媒体方案。

相关文章:

  • Flask框架入门完全指南
  • 传统数组 vs vector和list
  • 【Python爬虫(5)】HTTP协议:Python爬虫的基石
  • Python版本管理器之Pyenv-win介绍与安装
  • DeepSeek笔记(二):DeepSeek局域网访问
  • 宝塔面板开始ssl后,使用域名访问不了后台管理
  • JSON入门略要
  • Lua 数据库访问
  • 30个常用的DEEPSEEK提示词
  • “单击以重新设置PIN”的解决方案
  • 算法-链表篇04-两两交换链表中的节点
  • DeepSeek告别服务器繁忙
  • C++游戏开发流程图
  • 基于Spring Boot+Vue的宠物服务管理系统(源码+文档)
  • Java里ArrayList和LinkedList有什么区别?
  • python的pass
  • 基于Python的深度学习音乐推荐系统(有配套论文)
  • MySQL8.x版本的新的功能特性总结
  • 【AI论文】随机鹦鹉在大型语言模型(LLM)之肩:物理概念理解的总结性评估
  • STM32物联网终端实战:从传感器到云端的低功耗设计
  • 杭州“放大招”支持足球发展:足球人才可评“高层次人才”
  • 秦洪看盘|交易新逻辑,银行股成A股稳定器
  • 郑培凯:汤显祖的“至情”与罗汝芳的“赤子之心”
  • 沈阳卫健委通报“健康证”办理乱象:涉事医院已被立案查处
  • 英国收紧移民政策,技术工作签证、大学招生面临更严要求
  • 真人秀《幸存者》百万美元奖金,25年间“缩水”近一半