Qt/C++開發監控GB28181系統/視頻點播主碼流子碼流/動態切換碼流/支持海康大華/全網唯一

一、前言說明

目前市面上的國標監控系統,沒有看到可以切換碼流的,都是默認主碼流,包括easynvr、livegbs、wvp等,很是奇怪為什么他們不做呢?難道沒有用戶反饋需要這個?我這就遇到過一些用戶需要能夠切換主碼流子碼流,比如64通道同時顯示的時候,很多電腦配置較低,無法支撐64路主碼流顯示,而且網卡也未必支持,所以就需要切換到子碼流,不像onvif是可以直接有單獨的子碼流地址rtsp格式的流,28181是動態點播的,你需要的時候點播發送sdp內容,對應節點帶上a=streamnumber:0表示主碼流、a=streamnumber:1表示子碼流,這個是海康的默認格式,大華的格式是a=streamprofile:0這種,還有些廠家的是a=stream:0或者a=stream:MAIN表示主碼流,那如何做區分呢?難道還要提前知道是哪一家的設備?其實大可不必,全部填進去就好,解析的地方收到不認識的指令不會解析的,畢竟sdp的規范是允許攜帶一些自定義的參數的。

二、效果圖

在這里插入圖片描述

三、相關地址

  1. 國內站點:https://gitee.com/feiyangqingyun
  2. 國際站點:https://github.com/feiyangqingyun
  3. 個人作品:https://blog.csdn.net/feiyangqingyun/article/details/97565652
  4. 文件地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 文件名:bin_video_gb28181。

四、功能特點

  1. 支持設備注冊、注銷、心跳、校時、注冊認證、注銷認證等。
  2. 設備上線后可以手動獲取設備狀態、設備信息、配置信息、預置位信息等。
  3. 設備上線后自動獲取設備通道信息,包括中文通道名稱。識別到通道上線離線變化,會重新獲取該設備的所有通道信息。
  4. 支持視頻點播,可以分別點播主碼流和子碼流,內置rtp解包線程,解包后發給視頻播放組件解碼播放。
  5. 每個設備每個通道支持點播多個視頻,通過ssrc區分,支持共用端口和不同端口收流。
  6. 支持對某個設備下面所有通道、某個通道、某個通道對應的某個流分別關閉。
  7. 支持錄像文件查詢和回放,回放控制支持暫停播放、繼續播放、倍速播放、切換播放進度。
  8. 支持錄像文件下載,支持倍速比如8倍速下載,可同時多線程批量下載。
  9. 回放和下載同時支持IPC和NVR,比如攝像頭自帶的SD存儲卡錄像文件回放,NVR上的硬盤錄像文件回放。
  10. 支持云臺控制,向上、向下、向左、向右、左上、右上、左下、右下方位移動,鏡頭放大縮小,光圈放大縮小,鏡頭聚焦放焦。
  11. 支持預置位信息的查詢、調用、添加、修改、刪除等操作。
  12. 自動目錄訂閱功能,通道上線下線都有對應的信號通知。
  13. 內置定時讀取通道信息機制,以保證通道信息是最新的,比如有些NVR是不斷更新的通道信息。
  14. 內置訂閱警情和位置移動功能,訂閱后各種警情事件比如運動目標檢測報警、入侵檢測報警、徘徊檢測報警等自動上報。
  15. 支持語音對講功能,可以直接在視頻窗體的懸浮條上單擊語音對講按鈕,再次單擊關閉對講,對講期間懸浮條常駐顯示。
  16. 支持設備布防撤防,布防后警情信息會主動上報。
  17. 國標服務同時支持udp和tcp方式,可選只監聽一種或者兩種都監聽,tcp方式自動處理粘包問題。
  18. 國標拉流同時支持udp、tcp被動、tcp主動三種方式,每個通道都可以自由選擇何種拉流方式。
  19. 內置拉流端口池,每次拉流從中取出一個,關閉流自動回收端口號,重復利用。
  20. 收流端口自動糾錯,自動跳過被占用的端口,不會出現端口占用導致收流失敗的情況。
  21. 支持三種取流方式自動檢測離線重連,檢測到離線后,自動重啟點播拉流整個流程。
  22. 錄像文件回放,上一個完成后自動切換到下一個繼續回放,直到所有回放完成。支持高達8倍速回放。
  23. 視頻播放自適應硬解碼,極低資源占用,實時性極好,帶懸浮條顯示視頻流信息,可以直接在懸浮條單擊按鈕保存錄像文件到本地。
  24. 支持幾千路國標消息交互并發,實時視頻流支持64路同時顯示,可以拓展更多路數。
  25. 支持阿里云等云服務器,可以分別設置內網監聽地址和外網訪問地址,一般云服務器上是監聽地址用內網,對外訪問用外網地址。
  26. 支持視頻分發,也就是推流,視頻通道打開后可以自動推流到流媒體服務器,其他需要的地方拉流即可,支持rtsp、rtmp、hls、webrtc等方式拉流。
  27. 支持注冊重定向,方便做負載均衡和區域化部署,這樣可以支持幾十萬個設備連接都沒問題。
  28. 支持圖像抓拍,可以設置抓拍最多10張圖片,可設置抓拍間隔,抓拍到的圖片會通過信號通知。
  29. 實時預覽和錄像回放都支持推流,推流支持疊加文字和圖片水印以及各種ffmpeg支持的濾鏡效果,支持多個水印同時疊加。
  30. 同時支持gb28181-2011、gb28181-2016、gb28181-2022以及后續可能的所有協議版本。
  31. SIP解析和交互采用純Qt底層代碼實現,udp/tcp通信交互,祖傳原創代碼解析,不依賴任何第三方。
  32. 代碼量少,gb28181交互部分共幾千行代碼,注釋詳細,接口友好,使用極其簡單,提供非常詳細的使用示例。
  33. 支持海康、大華、宇視、華為、天地偉業等所有國標設備,包括一些沒有ssrc的設備。
  34. 支持所有Qt版本和編譯器以及操作系統,包括但不限于win、linux、mac、android、嵌入式linux、樹莓派香橙派、國產os等。

五、相關代碼

//具體格式規范在gb28181-2016文檔的第100頁
//mode/0=udp被動/1=tcp被動/2=tcp主動/tcp主動方式要求設備端有公網IP/平臺這邊主動去連接設備取流
QString GB28181Body::getVideoSdp(const QString &channelId, const QString &host, int port, const QString &ssrc, int start, int end, int speed, int profile, TransmitMode mode, bool playback)
{QString rtp = QString("%1RTP/AVP").arg(mode == TransmitMode_UdpServer ? "" : "TCP/");QString setup = QString("setup:%1").arg(mode == TransmitMode_TcpClient ? "active" : "passive");QString s = "Play";if (start > 0) {//測試發現如果一開始回放點播的時候指定倍速會失敗/需要用下載關鍵字才能倍速s = "Download";//s = (playback ? "Playback" : "Download");}QStringList list;list << QString("v=0");list << QString("o=%1 0 0 IN IP4 %2").arg(channelId).arg(host);list << QString("s=%1").arg(s);list << QString("u=%1:0").arg(channelId);list << QString("c=IN IP4 %1").arg(host);list << QString("t=%1 %2").arg(start).arg(end);list << QString("m=video %1 %2 96 97 98").arg(port).arg(rtp);list << QString("a=recvonly");list << QString("a=%1").arg(setup);list << QString("a=connection:new");list << QString("a=rtpmap:96 PS/90000");list << QString("a=rtpmap:97 MPEG4/90000");list << QString("a=rtpmap:98 H264/90000");list << QString("a=downloadspeed:%1").arg(speed);//海康指定碼流對應關鍵字streamnumber/大華指定碼流對應關鍵字streamprofilelist << QString("a=streamnumber:%1").arg(profile);list << QString("a=streamprofile:%1").arg(profile);//還有其他幾種可能的也加上/萬一有些廠家用的其他類型的list << QString("a=stream:%1").arg(profile);list << QString("a=stream:%1").arg(profile == 0 ? "MAIN" : "SUB");list << QString("y=%1").arg(ssrc);list << "";return list.join("\r\n");
}//點播請求:服務端-》設備端
INVITE sip:34020000001310000001@192.168.0.64:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bK4de987b1737d494d9c63bb1464c9cdcb
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=1034
To: <sip:34020000001310000001@192.168.0.64:5060>
Call-ID: 445efb2b5134487788334cd6acafe0a2
CSeq: 35 INVITE
User-Agent: wx_feiyangqingyun
Max-Forwards: 70
Content-Length: 323
Content-Type: application/sdp
Contact: <sip:34020000002000000001@192.168.0.110:15060>
Subject: 34020000001310000001:0000010000,34020000002000000001:0v=0
o=34020000001310000001 0 0 IN IP4 192.168.0.110
s=Play
u=34020000001310000001:0
c=IN IP4 192.168.0.110
t=0 0
m=video 8888 TCP/RTP/AVP 96 97 98
a=recvonly
a=setup:active
a=connection:new
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
a=downloadspeed:0
a=streamprofile:0
y=0000010000//請求應答:設備端-》服務端
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bK4de987b1737d494d9c63bb1464c9cdcb
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=1034
To: <sip:34020000001310000001@192.168.0.64:5060>;tag=1561889054
Call-ID: 445efb2b5134487788334cd6acafe0a2
CSeq: 35 INVITE
Contact: <sip:34020000001320000002@192.168.0.64:5060>
Content-Type: application/sdp
User-Agent: IP Camera
Content-Length: 206v=0
o=34020000001320000002 2851 2851 IN IP4 192.168.0.64
s=Play
c=IN IP4 192.168.0.64
t=0 0
m=video 15060 TCP/RTP/AVP 96
a=setup:passive
a=sendonly
a=rtpmap:96 PS/90000
a=filesize:0
y=0000010000//開始點播:服務端-》設備端
ACK sip:34020000001320000002@192.168.0.64:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bK4de987b1737d494d9c63bb1464c9cdcb
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=1034
To: <sip:34020000001310000001@192.168.0.64:5060>;tag=1561889054
Call-ID: 445efb2b5134487788334cd6acafe0a2
CSeq: 35 ACK//結束點播:服務端-》設備端
BYE sip:34020000002000000001@192.168.0.110:15060 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.110:15060;branch=z3hG9bK7fe7407471734ba087eb4092db6ba108
From: <sip:34020000002000000001@192.168.0.110:15060>;tag=1019
To: <sip:34020000001310000001@192.168.0.100:5061>;tag=6d76ea76a4370853c9313f69995c7293
Call-ID: b5b5f90ba9b044868789d16fa3d0cc36
CSeq: 22 BYE
Contact: <sip:34020000002000000001@192.168.0.110:15060>

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

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

相關文章

【 MYSQL | 基礎篇 四大SQL語句 】資料位于文章末尾

摘要&#xff1a;本文先介紹數據庫 SQL 的核心概念&#xff0c;接著闡述 SQL 通用語法與 DDL、DML、DQL、DCL 四大分類&#xff0c;隨后詳細講解各類語句操作&#xff0c;包括 DDL 的數據庫與表操作及數據類型&#xff0c;DML 的數據增刪改&#xff0c;DQL 的查詢語法與功能&am…

Webrtc支持FFMPEG硬解碼之Intel

Intel QSV下載編譯git clone https://github.com/lu-zero/mfx_dispatch.git1.使用CMake生產VS工程編譯生成libmfx.lib文件 頭文件為mfx文件夾libmfx---include---mfx---lib---libmfx.libWebrtc中ffmpeg的修改因為Webrtc中的ffmpeg是使用gn進行編譯的&#xff0c;所以這里先找到…

【二叉樹(DFS) - LeetCode】437. 路徑總和 III

437. 路徑總和 III 題解&#xff1a;DFS /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullp…

【Python】shutil.make_archive() 方法詳解

文章目錄功能概述函數簽名核心參數詳解1. base_name2. format3. root_dir4. base_dir使用示例將 /home/user/project/data 目錄打包為 data.tar.gz&#xff0c;并保存到 /home/user/backups/打包當前工作目錄下的 docs 文件夾為 zip 文件替代方案總結shutil.make_archive() 是 …

CAN總線(Controller Area Network Bus)控制器局域網總線(二)

6、錯誤幀 總線上所有設備都會監督總線的數據&#xff0c;一旦發現“位錯誤”或“填充錯誤”或“CRC錯誤”或“格式錯誤”或“應答錯誤” &#xff0c;這些設備便會發出錯誤幀來破壞數據&#xff0c;同時終止當前的發送設備。7、過載幀 當接收方收到大量數據而無法處理時&#…

LeetCode 317 離建筑物最近的距離

LeetCode 317 題的詳細題目信息如下&#xff1a;題目名稱Shortest Distance from All Buildings&#xff08;中文譯名&#xff1a;離建筑物最近的距離&#xff09;題目描述給你一個由 0、1 和 2 組成的二維網格&#xff0c;其中&#xff1a;0 代表空地1 代表建筑物2 代表障礙物…

AI之CodeTool之Kode:Kode(claude_code風格)的簡介、安裝和使用方法、案例應用之詳細攻略

AI之CodeTool之Kode&#xff1a;Kode(claude_code風格)的簡介、安裝和使用方法、案例應用之詳細攻略 目錄 相關文章 LLMs之PE之SystemPrompt&#xff1a;analysis_claude_code的簡介、使用方法、案例應用之詳細攻略 AI之CodeTool之Kode&#xff1a;Kode(claude_code風格)的簡…

網絡請求優化:用 Retrofit 攔截器玩轉日志、重試與緩存,OkHttp 和 Volley 誰更香?

目錄 1. 攔截器:Retrofit 的“超級管理員” 攔截器的本質 為什么用攔截器? 2. 日志攔截器:讓請求和響應“現原形” 引入日志攔截器 實現日志攔截器 日志輸出示例 生產環境注意事項 3. 重試攔截器:網絡不穩定也能穩如狗 設計重試邏輯 集成到 Retrofit 優化重試策…

LeetCode - 283. 移動零

題目 283. 移動零 - 力扣&#xff08;LeetCode&#xff09; 思路 我們使用左右兩個指針&#xff1a;左指針left指向已處理好的非零元素的末尾位置&#xff0c;右指針right用于遍歷數組。 算法步驟&#xff1a; 初始化left為-1&#xff08;表示還沒有處理任何非零元素&…

Redis不同場景下的注意事項

Redis常見的 使用場景&#xff1a; 緩存系統(核心場景) 存儲熱點數據&#xff0c;減少數據庫訪問壓力。提升接口響應速度。技術點&#xff1a; 用String/Hash 存儲結構化數據結合過期時間&#xff08;TTL&#xff09;和緩存淘汰策略(如LRU)管理內存。解決緩存問題&#xff1a;穿…

【完整源碼+數據集+部署教程】高速公路施工區域物體檢測系統源碼和數據集:改進yolo11-RepNCSPELAN

背景意義 隨著城市化進程的加快&#xff0c;高速公路建設與維護工作日益頻繁&#xff0c;施工區域的安全管理成為亟待解決的重要問題。在高速公路施工區域&#xff0c;工人和設備的安全是首要考慮因素&#xff0c;而有效的物體檢測系統能夠顯著提高施工現場的安全性與工作效率。…

如何在FastAPI中玩轉全鏈路追蹤,讓分布式系統故障無處遁形?

url: /posts/30e1d2fbf1ad8123eaf0e1e0dbe7c675/ title: 全鏈路追蹤如何讓FastAPI微服務架構的每個請求都無所遁形? date: 2025-08-28T23:40:47+08:00 lastmod: 2025-08-28T23:40:47+08:00 author: cmdragon summary: 全鏈路追蹤是現代微服務架構中監控系統行為的核心技術,通…

Win11 壓縮實測:Win11 的壓縮軟件的最佳配置和使用方式

文章目錄測試環境機器配置被壓縮文件WinRAR7zipLinux子系統準備極限壓縮減小字典的極限壓縮7zipWin11準備極限壓縮7zip系統內置右鍵壓縮菜單極限壓縮總結&#xff1a;Win11 的壓縮軟件的最佳配置和使用方式測試環境 機器配置 Win11系統 16GB內存 8核CPU 被壓縮文件 文件夾內…

CMake構建學習筆記22-libxml2庫的構建

在上一篇文章《CMake構建學習筆記21-通用的CMake構建腳本》中&#xff0c;筆者封裝了一個通用的cmake構建腳本cmake-build.ps1&#xff0c;那么這里筆者就嘗試通過這個腳本來構建libxml2庫。 libxml2是GNOME項目下的XML庫&#xff0c;雖然比不上TinyXML-2輕量&#xff0c;但是…

虛擬私有網絡筆記

VPN應用場景 ——VPN概述 ? 利用公共網絡來構建的私人專用網絡稱為虛擬私有網絡&#xff08;VPN&#xff0c; Virtual Private Network&#xff09;&#xff0c;用于構建VPN的公共網絡包括Internet 、幀中繼、ATM等。在公共網絡上組建的VPN象企業現有的私有網絡 一樣提供安全性…

Python 輕量級 HTML 解析器 - lxml入門教程

文章目錄初始化解析器路徑查找查找所有標簽查找指定 id 的標簽查找指定 class 的標簽查找包含指定 class 的標簽復雜路徑查找示例1示例2常見操作獲取所有標簽的鏈接獲取 div 標簽的文本內容, 其他標簽類似其他元素操作初始化解析器 from lxml import html from lxml.html impor…

(CVPR-2025)VideoMage:文本生成視頻擴散模型的多主體與動作定制化

VideoMage&#xff1a;文本生成視頻擴散模型的多主體與動作定制化 paper title&#xff1a;VideoMage: Multi-Subject and Motion Customization of Text-to-Video Diffusion Models paper是National Taiwan University發表在CVPR 2025的工作 Code:鏈接 圖1. 多主體與動作定制化…

OpenCV輪廓近似與Python命令行參數解析

在計算機視覺任務中&#xff0c;輪廓分析是目標檢測、形狀識別的核心步驟。而approxPolyDP函數作為輪廓簡化的關鍵工具&#xff0c;能有效減少輪廓頂點數量&#xff0c;降低計算復雜度&#xff1b;同時&#xff0c;argparse庫則能讓Python腳本更靈活、易用。本文將結合具體案例…

基于Springboot在線音樂推薦平臺

目錄 一、項目介紹 二、功能介紹 三、核心代碼 四、效果圖 源碼獲取 前言 在經濟繁榮的浪潮過去后&#xff0c;社會的焦點逐漸從物質追求轉向了文化和生活品質的提升[1]。文化生活的繁榮成為人們關注的焦點之一&#xff0c;而音樂&#xff0c;作為文化的一部分&#xff0…

LeetCode算法日記 - Day 26: 歸并排序、交易逆序對的總數

目錄 1. 歸并排序 1.1 題目解析 1.2 解法 1.3 代碼實現 2. 交易逆序對的總數 2.1 題目解析 2.2 解法 2.3 代碼實現 1. 歸并排序 912. 排序數組 - 力扣&#xff08;LeetCode&#xff09; 給你一個整數數組 nums&#xff0c;請你將該數組升序排列。 你必須在 不使用任…