GB28181系列三:GB28181流媒體服務器ZLMediaKit

????????我的音視頻/流媒體開源項目(github)

????????GB28181系列目錄

目錄

一、ZLMediaKit介紹

二、?ZLMediaKit安裝、運行(Ubuntu)

1、安裝

2、運行

3、配置

三、ZLMediaKit使用


一、ZLMediaKit介紹

????????ZLMediaKit是一個基于C++11的高性能運營級流媒體服務框架,項目地址:https://github.com/ZLMediaKit/ZLMediaKit

????????ZLMediaKit支持多種協議轉發,入下圖所示(摘自ZLMediaKit項目):

GB28181的RTP推流支持如下功能:

  • 支持UDP/TCP RTP(PS/TS/ES)推流服務器,可以轉換成RTSP/RTMP/HLS等協議
  • 支持RTSP/RTMP/HLS等協議轉rtp推流客戶端,支持TCP/UDP模式,提供相應restful api,支持主動被動方式
  • 支持H264/H265/AAC/G711/OPUS編碼
  • 支持es/ps/ts/ehome rtp推流
  • 支持es/ps rtp轉推
  • 支持GB28181主動拉流模式
  • 支持雙向語音對講
  • 支持多軌道模式

二、?ZLMediaKit安裝、運行(Ubuntu)

1、安裝

#國內用戶推薦從同步鏡像網站gitee下載 
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
#千萬不要忘記執行這句命令
git submodule update --initsudo apt-get install build-essentialsudo apt-get install cmake#除了openssl,其他其實都可以不安裝
sudo apt-get install libssl-dev
sudo apt-get install libsdl-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavutil-dev
sudo apt-get install ffmpegmkdir build
cd build
#macOS下可能需要這樣指定openss路徑:cmake .. -DOPENSSL_ROOT_DIR=/usr/local/Cellar/openssl/1.0.2j/
cmake ..
make -j4

2、運行

cd ZLMediaKit/release/linux/Debug
#通過-h可以了解啟動參數
./MediaServer -h
#以守護進程模式啟動
./MediaServer -d &

3、配置

????????配置文件:ZLMediaKit/release/linux/Debug/config.ini

? ? ? ? 各個配置項的含義參考項目wiki中的說明。

三、ZLMediaKit使用

????????ZLMediaKit的HTTP API是一組通過HTTP協議訪問的接口,用于控制和管理ZLMediaKit流媒體服務器的功能和狀態。通過以下訪問可查看api列表:

curl http://127.0.0.1/index/api/getApiList?secret=xxxxxxxxxxxsecret在配置文件中獲取:ZLMediaKit/release/linux/Debug/config.ini

????????ZLMediaKit支持GB28181的 ps-rtp推流,支持的編碼格式分別為h264/h265/aac/g711/opus。 在收到GB28181推流后,ZLMediaKit會依次做以下事情:

  • rtp排序去重。
  • rtp解析成ps或ts。
  • ps或ts解析成h264/h265/aac/g711/opus。
  • 輸入到復用器,生成rtsp/rtmp/ts/fmp4等格式,以便轉換成其他協議或容器。

GB28181簡單使用:

????????ZLMediaKit默認開啟10000端口用于接收UDP/TCP的GB28181推流,由于國標推流不好測試,ZLMediaKit同時也支持rtp_mpegts推流,代碼會自適應判斷是否為ps還是ts。 所以如果大家沒有攝像頭的情況下,可以用FFmpeg簡單測試,基本上體驗跟國標推流并無二致。

  • ffmpeg推流命令:
 ffmpeg -re -i www/record/robot.mp4 -vcodec h264 -acodec aac -f rtp_mpegts rtp://127.0.0.1:10000
  • MediaServer收到推流后的日志:

????????上圖中,這個推流的rtp ssrc為BFC2C622(16進制打印),這個流的app為rtp, stream_id為BFC2C622。

????????需要指出的是,國標推流的app固定為rtp,你只能通過代碼來修改它,stream_id為rtp流的ssrc,這個是隨機的,在FFmpeg中貌似沒法控制。

????????另外,每次推流時,請更換ssrc,否則ZLMediaKit發現推流端ip和端口變化后,會直接丟棄rtp包;這樣做的目的是為了防止兩個設備使用同一個ssrc推流時互相干擾。

????????ZLMediaKit也可以往其他國標服務器推流,還有其他的高級功能。都是調用HTTP API實現的,具體可參考項目的wiki。

多個國標設備向ZLMediaKit推流時,都是向ZLMediaKit的10000端口推,ZLMediaKit會根據ip、端口以及RTP的ssrc區分不同的設備。但是在使用openRtpServer接口動態開啟國標收流端口后,這個端口只能產生一個流,也就是說,一個攝像頭需要一個服務器端口用于接收國標推流。

? ? ? ? ZLMediaKit支持多種推拉流方式(RTSP/HLS/RTMP等),ZLMediaKit的播放url規則如下:

以rtsp://somedomain.com:554/live/0?token=abcdefg&field=value為例,該url分為以下幾個部分:協議(scheam) : rtsp協議,默認端口554
虛擬主機(vhost) : somedomain.com,該字段既可以是域名也可以是ip,如果是ip則對應的虛擬主機為__defaultVhost__
服務端口號(port) : 554,如果不指定端口號,則使用協議默認端口號
應用名(app) : live
流ID(streamid) : 0
參數(args) : token=abcdefg&field=value

????????剛才的rtp_mpegts推流中app和stream_id都可以看到,通過下面的地址就可以使用rtsp協議拉到流了:

rtsp://127.0.0.1/rtp/BFC2C622

? ? ? ? 更多操作請參考項目的wiki,地址:https://github.com/zlmediakit/ZLMediaKit/wiki/

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

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

相關文章

iPhone恢復技巧:如何從 iPhone 恢復丟失的照片

在計算機時代,我們依靠手機來捕捉和存儲珍貴的回憶。但是,如果您不小心刪除或丟失了手機上的照片怎么辦?這真的很令人沮喪和煩惱,不是嗎?好吧,如果您在 iPhone 上丟失了照片,您不必擔心&#xf…

如何將你的 Ruby 應用程序從 OpenSearch 遷移到 Elasticsearch

作者:來自 Elastic Fernando Briano 將 Ruby 代碼庫從 OpenSearch 客戶端遷移到 Elasticsearch 客戶端的指南。 OpenSearch Ruby 客戶端是從 7.x 版 Elasticsearch Ruby 客戶端分叉而來的,因此代碼庫相對相似。這意味著當將 Ruby 代碼庫從 OpenSearch 遷…

LeetCode 283.移動零(超簡單講解)

283.移動零 題目示例示例1示例2 解題思路快慢指針實現設計 詳細代碼 題目 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行操作。 示例 示例1 …

Day8 神經網絡中的導數基礎

Day8 神經網絡中的導數基礎 導數的定義 導數(Derivative)是微積分中的一個核心概念,用于描述函數在某一點的變化率。簡單來說,導數就是函數值隨自變量微小變化而產生的變化量,即斜率或變化率。假設有一個函數 f ( x…

RequestContextHolder 與 HttpServletRequest 的聯系

1. 什么是 RequestContextHolder? RequestContextHolder 是 Spring 框架 提供的一個工具類,用于在當前線程中存儲和獲取與請求相關的上下文信息。它是基于 ThreadLocal 實現的,能夠保證每個線程獨立存儲和訪問請求信息。 與 HttpServletReq…

SpringBoot配置和啟動

1.內部配置加載順序: 加載規則 加載順序和優先級與配置文件所在路徑有關優先級高的配置會覆蓋優先級低的配置,配置文件會全部加載,遇到相同的配置高優先級覆蓋低優先級命令行參數 -spring.config.location 自定義配置文件路徑,可…

【視頻生成模型】——Hunyuan-video 論文及代碼講解和實操

🔮混元文生視頻官網 | 🌟Github代碼倉庫 | 🎬 Demo 體驗 | 📝技術報告 | 😍Hugging Face 文章目錄 論文詳解基礎介紹數據預處理 (Data Pre-processing)數據過濾 (Data Filtering)數據標注 (Data…

52 基于單片機的超聲波、溫濕度、光照檢測分階段報警

目錄 一、主要功能 二、硬件資源 三、程序編程 四、實現現象 一、主要功能 1.通過DHT11模塊讀取環境溫度和濕度: 2.將濕度、障礙物距顯示在lcd1602上面,第一行顯示溫度和濕度,格式為:xxCyy%,第二行顯示超聲波傳感器測得的距離,格式為:Di…

大數據與AI:從分析到預測的躍遷

引言:數據時代的新紀元 從每天的社交分享到企業的運營決策,數據早已成為現代社會不可或缺的資源。我們正置身于一個數據爆炸的時代,數以億計的信息流實時生成,為人類帶來了前所未有的洞察能力。然而,數據的價值并不僅限…

3D視覺[一]3D計算機視覺

3D視覺[一]3D計算機視覺 3D計算機視覺概述 像機標定 文章目錄 3D視覺[一]3D計算機視覺前言一、人類視覺二、計算機視覺2.1 計算機視覺的研究目的2.2 計算機視覺的研究任務2.3 計算機視覺的研究方法2.4 視覺計算理論2.5 馬爾框架中計算機視覺表達的四個層次2.5.1 圖像&#xff…

OpenCV目標檢測 級聯分類器 C++實現

一.目標檢測技術 目前常用實用性目標檢測與跟蹤的方法有以下兩種: 幀差法 識別原理:基于前后兩幀圖像之間的差異進行對比,獲取圖像畫面中正在運動的物體從而達到目標檢測 缺點:畫面中所有運動中物體都能識別 舉個例子&#xf…

QT從入門到精通(二) ——信號與槽機制

Qt 的信號與槽機制(Signal and Slot)是 Qt 框架 中用于對象間通信的核心機制之一。它允許對象之間進行松耦合的事件驅動式通信,尤其適合 GUI 應用程序 中的事件處理。 1. 基本概念 信號 (Signal) 當對象的狀態發生變化時,它會發…

如何使用git新建本地倉庫并關聯遠程倉庫的步驟(詳細易懂)

一、新建本地倉庫并關聯遠程倉庫的步驟 新建本地倉庫 打開終端(在 Windows 上是命令提示符或 PowerShell,在 Linux 和Mac上是終端應用),進入你想要創建倉庫的目錄。例如,如果你想在桌面上創建一個名為 “my - project”…

1Panel應用推薦:MaxKB開源知識庫問答系統

1Panel(github.com/1Panel-dev/1Panel)是一款現代化、開源的Linux服務器運維管理面板,它致力于通過開源的方式,幫助用戶簡化建站與運維管理流程。為了方便廣大用戶快捷安裝部署相關軟件應用,1Panel特別開通應用商店&am…

element plus的table組件,點擊table的數據是,會出現一個黑色邊框

在使用 Element Plus 的 Table 組件時,如果你點擊表格數據后出現了一個黑色邊框,這通常是因為瀏覽器默認的焦點樣式(outline)被觸發了。如圖: 你可以通過自定義 CSS 來隱藏這個黑色邊框,代碼如下&#xff1…

瀧羽sec學習打卡-brupsuite7搭建IP炮臺

聲明 學習視頻來自B站UP主 瀧羽sec,如涉及侵權馬上刪除文章 筆記的只是方便各位師傅學習知識,以下網站只涉及學習內容,其他的都 與本人無關,切莫逾越法律紅線,否則后果自負 關于brupsuite的那些事兒-Brup-IP炮臺搭建 搭建炮臺服務端安裝zmap1、更新系統和安裝基礎依賴&#xff…

赫布定律 | 機器學習 / 反向傳播 / 經驗 / 習慣

注:本文為 “赫布定律” 相關文章合輯。 未整理。 赫布定律 Hebb‘s law 馥墨軒 2021 年 03 月 13 日 00:03 1 赫布集合的基本定義 唐納德?赫布(Donald Hebb)在 1949 年出版了《行為的組織》(The Organization of Behavior&a…

各個數據庫優劣勢對比

1.關系型數據庫(RDBMS) 優勢: ? 數據一致性:通過嚴格的事務處理和ACID(原子性、一致性、隔離性、持久性)特性,確保數據的一致性和完整性。 ? 易于理解和使用:關系型數據庫的表結構…

Excel中如何消除“長短款”

函數微調可以可以實施,簡單且易于操作的氣球🎈漲縮更妙。 (筆記模板由python腳本于2024年12月17日 06:19:13創建,本篇筆記適合用Excel操作數據的coder翻閱) 【學習的細節是歡悅的歷程】 Python 官網:https://www.python.org/ Fre…

Jdk1.7到Jdk1.8 HashMap 發生了什么變化(底層)

從JDK 1.7到JDK 1.8,HashMap在底層實現上發生了顯著的變化, 主要體現在數據結構、鏈表插入方式、哈希算法、擴容機制以及并發性方面。 以下是具體的變化點: 1. 數據結構的變化 JDK 1.7:HashMap的底層數據結構是數組單向鏈表。…