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控制)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70203.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Containerd 簡介、安裝與使用指南

1. Containerd 簡介 Containerd 是一個開源的容器運行時&#xff0c;專注于管理容器的生命周期。它最初是 Docker 的一部分&#xff0c;后來被分離出來成為一個獨立的項目&#xff0c;并成為 Kubernetes 和其他容器平臺的底層運行時。Containerd 提供了容器的創建、啟動、停止…

開源語音克隆項目 OpenVoice V2 本地部署

#本機環境 WIN11 I5 GPU 4060ti 16G 內存 32G #開始 git clone https://github.com/myshell-ai/OpenVoice.git conda create -n opvenv python3.9 -y conda activate opvenv pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/…

【Prometheus】prometheus結合domain_exporter實現域名監控

?? 歡迎大家來到景天科技苑?? ???? 養成好習慣,先贊后看哦~???? ?? 作者簡介:景天科技苑 ??《頭銜》:大廠架構師,華為云開發者社區專家博主,阿里云開發者社區專家博主,CSDN全棧領域優質創作者,掘金優秀博主,51CTO博客專家等。 ??《博客》:Python全…

rustdesk編譯修改名字

最近&#xff0c;我用Rust重寫了一個2W行C代碼的linux內核模塊。在此記錄一點經驗。我此前沒寫過內核模塊&#xff0c;認識比較疏淺&#xff0c;有錯誤歡迎指正。 為什么要重寫&#xff1f; 這個模塊2W行代碼量看起來不多&#xff0c;卻在線上時常故障&#xff0c;永遠改不完。…

在linux系統中安裝Anaconda,并使用conda

系統 : ubuntu20.04 顯卡&#xff1a;NVIDIA GTX1650 目錄 安裝Anaconda第一步&#xff1a;下載合適版本的Anconda1. 查看自己Linux的操作系統及架構命令&#xff1a;uname -a2. 下載合適版本的Anconda 第二步&#xff1a;安裝Aanconda1. 為.sh文件設置權限2. 執行.sh文件2.1 .…

(前端基礎)HTML(一)

前提 W3C:World Wide Web Consortium&#xff08;萬維網聯盟&#xff09; Web技術領域最權威和具有影響力的國際中立性技術標準機構 其中標準包括&#xff1a;機構化標準語言&#xff08;HTML、XML&#xff09; 表現標準語言&#xff08;CSS&#xff09; 行為標準&#xf…

【ISO 14229-1:2023 UDS診斷(會話控制0x10服務)測試用例CAPL代碼全解析③】

ISO 14229-1:2023 UDS診斷【會話控制0x10服務】_TestCase03 作者&#xff1a;車端域控測試工程師 更新日期&#xff1a;2025年02月15日 關鍵詞&#xff1a;UDS診斷、0x10服務、診斷會話控制、ECU測試、ISO 14229-1:2023 TC10-003測試用例 用例ID測試場景驗證要點參考條款預期…

TDengine 客戶端連接工具 taos-Cli

簡介工具獲取運行命令行參數 基礎參數高級參數 數據導出/導入 數據導出數據導入 執行 SQL 腳本使用小技巧 TAB 鍵自動補全設置字符列顯示寬度其它 錯誤代碼表 簡介 TDengine 命令行工具&#xff08;以下簡稱 TDengine CLI&#xff09;是用戶操作 TDengine 實例并與之交互最簡…

Git高級用法

GIT高級用法及實戰案例解析 前言 作為現代開發者的必備工具&#xff0c;Git的基礎操作&#xff08;add/commit/push&#xff09;早已深入人心。但當面對復雜場景時&#xff0c;掌握Git的高級用法將極大提升開發效率。本文將深入解析Git的高級功能&#xff0c;并配合真實場景案…

9個用于測試自動化的最佳AI測試工具(2024)

選擇一款優質的基于生成式AI人工智能的測試工具能夠確保測試過程的準確性和效率&#xff0c;從而加速整個軟件測試周期。相反&#xff0c;設計不佳的測試工具可能無法發現錯誤&#xff0c;并可能存在安全問題。它們可能產生誤報或漏報&#xff0c;誤導開發與測試團隊&#xff0…

vue-model如何自定義指令,及批量注冊自定義指令

一、在Vue.js中&#xff0c;v-model是一個用于在表單輸入和應用狀態之間創建雙向綁定的指令。要編寫自定義的v-model指令&#xff0c;你需要使用Vue的自定義指令API。以下是編寫自定義v-model指令的步驟&#xff1a; 定義一個自定義指令對象。在指令對象的bind鉤子函數中&…

簡單認識一下-Redis

一、什么是Redis Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的、基于內存的數據結構存儲系統&#xff0c;它既可以用作數據庫、緩存&#xff0c;也可以作為消息中間件使用。以下為你詳細介紹 Redis&#xff1a; 基本特點 高性能&#xff1a;Redis 將數…

LabVIEW的吞雨測控系統

本案例介紹了一種基于LabVIEW開發的吞雨測控系統&#xff0c;該系統通過建模仿真分析不同控制器模式下的階躍信號響應&#xff0c;從而選擇了最適合的控制器。為了有效解決在控制流量過程中出現的振蕩收斂和流量信號大擾動問題&#xff0c;系統采用了改進的積分分離PID算法&…

C++中的順序容器(一)

文章目錄 順序容器概述所有容器類型都支持的操作迭代器容器定義與初始化將一個容器初始化為另一個容器的拷貝標準庫array具有固定大小 賦值和swap關系運算符 順序容器的特有操作向順序容器添加元素訪問元素刪除元素特殊的forward_list操作改變容器的大小容器操作可能是迭代器失…

Javaweb中,使用Servlet編寫簡單的接口

案例&#xff1a;網頁提交用戶名和密碼信息&#xff0c;后端校驗密碼長度需在6-12位之間 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…

C語言實現的常見排序算法

排序是計算機科學中非常重要的基礎算法之一。無論是在數據分析、數據庫查詢還是圖形界面中&#xff0c;我們都可能會遇到排序問題。本文將介紹幾種常見的排序算法&#xff0c;并提供其C語言實現代碼。排序算法的效率和應用場景有很大關系&#xff0c;不同的算法有不同的時間復雜…

對于簡單的HTML、CSS、JavaScript前端,我們可以通過幾種方式連接后端

1. 使用Fetch API發送HTTP請求&#xff08;最簡單的方式&#xff09;&#xff1a; //home.html // 示例&#xff1a;提交表單數據到后端 const submitForm async (formData) > {try {const response await fetch(http://your-backend-url/api/submit, {method: POST,head…

[論文閱讀] SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

文章目錄 一、前言二、主要貢獻三、Introduction四、Methodology4.1 Motivation &#xff1a;4.2Framework Overview.** 一、前言 通信作者是香港理工大學 & OPPO研究所的張磊教授&#xff0c;也是圖像超分ISR的一個大牛了。 論文如下 SeeSR: Towards Semantics-Aware Rea…

案例-04.部門管理-刪除

一.功能演示 二.需求說明 三.接口文檔 四.思路 既然是通過id刪除對應的部門&#xff0c;那么必然要獲取到前端請求的要刪除部門的id。id作為請求路徑傳遞過來&#xff0c;那么要從請求路徑中獲取&#xff0c;id是一個路徑參數。因此使用注解PathVariable獲取路徑參數。 請求方…

Blazor-父子組件傳遞任意參數

在我們從父組件傳參數給子組件時&#xff0c;可以通過子組件定義的[Parameter]特性的公開屬性進行傳值&#xff0c;但是當我們需要傳遞多個值的時候&#xff0c;就需要通過[Parameter]特性定義多個屬性&#xff0c;有沒有更簡便的方式&#xff1f; 我們可以使用定義 IDictionar…