視頻云平臺——搭建SRS5平臺支持GB28181視頻流的推送

  • 📢歡迎點贊 :👍 收藏 ?留言 📝 如有錯誤敬請指正,賜人玫瑰,手留余香!
  • 📢本文作者:由webmote 原創
  • 📢作者格言:新的征程,我們面對的不僅僅是技術還有人心,人心不可測,海水不可量,唯有技術,才是深沉黑夜中的一座閃爍的燈塔 !

序言

搭建視頻云平臺有很多種方式,如果是內部平臺往抖音等平臺推送,大可以采用SRS-Stack服務搭建模式,因為一般的視頻源都可以控制在自己的網絡范圍內。
在這里插入圖片描述

而如果是企業內網想要把視頻送到云平臺,國內的大客戶(一般是國有大廠)們,最早接觸的應該都是GB28181系列的平臺,因此這次我們就來聚焦在GB28181視頻推流的服務平臺上。

1. SRS 5.0

系統的環境采用大名鼎鼎的CentOS 7.5及以上

SRS是一個開源的(MIT協議)簡單高效的實時視頻服務器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等協議。 SRS媒體服務器和FFmpeg、OBS、VLC、 WebRTC等客戶端配合使用,提供流的接收和分發的能力,是一個典型的發布 (推流)和訂閱(播放)服務器模型。 SRS支持互聯網廣泛應用的音視頻協議轉換,比如可以將RTMP或SRT, 轉成HLS或HTTP-FLV或WebRTC等協議。

由于之前的4.0版本需要特別編譯才支持GB28181協議,且不夠穩定,因此我們這次采用的是5.0的最新發布版本。

目前正式版本支持:

  • 攝像頭通過SIP注冊。
  • 自動邀請攝像頭推流。
  • GB/2016轉RTMP協議。
  • 基于TCP的SIP信令。
  • TCP單端口傳輸媒體。

當前版本不支持語音對講功能,注意注意!

2. 部署命令

我們使用Docker方式進行部署,這種方式簡直不要太簡單!
在這里插入圖片描述

請按照以下步驟命令進行部署。


# 更新系統
yum -y update # 安裝docker,如果已經安裝請忽略以下命令yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engineyum install -y yum-utils
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io
systemctl start docker# 拉取srs5鏡像
docker pull ossrs/srs:5
# 臨時啟動srs
docker run -it --name srs5 ossrs/srs:5
# 復制配置等文件到/srs
mkdir /srs
# 把配置文件復制到/srs
docker cp -a srs5:/usr/local/srs/conf /srs/conf?
docker cp -a srs5:/usr/local/srs/objs /srs/objs# 檢查查看/srs內的目錄是否包含conf和objs
# 刪除臨時容器
docker rm -f srs5# 創建srs5容器
docker run -d --restart=always --name srs5 -p 5060:5060 -p 9000:9000 -p 1935:1935 -p 1985:1985 -p 8080:8080  -p 8000:8000/udp -v /srs/conf/:/usr/local/srs/conf/ -v /srs/objs/:/usr/local/srs/objs/ ossrs/srs:5# 檢查容器是否存在
docker logs srs5

3.測試和配置

按照上述命令配置完成后,我們已經啟動了SRS5容器服務,這時候我們默認啟用了docker.conf 配置文件,因此還需要對該文件進行配置。
在這里插入圖片描述

因為做了文件資源的映射,因此讓我們打開本地文件進行編輯,并替換【你的公網IP】地址。

# 打開 docker.conf
# vi /srs/conf/docker.conf
# 增加gb28181的配置,如下:
stream_caster {enabled on;caster gb28181;listen 9000;output rtmp://127.0.0.1/live/[stream];host 【你的公網IP】;  sip {enabled on;listen 5060;candidate 【你的公網IP】;}
}

編輯完畢后,需要重啟srs5服務。

docker restart srs5

4.測試你的服務

讓我們打開srs自帶的web服務,在這之前,你需要在云服務的安全管理策略內增加上你的IP端口接入。

包含下列端口: 5060,9000,1935,1985,8080,8000。

訪問 http://你的公網IP:8080
點擊連接srs,即可連接上srs服務。

5.GB28181推流配置

注意:音頻編碼僅支持AAC格式。
登錄你的攝像頭界面,找到GB28181配置,這里以海康攝像頭為例:
在這里插入圖片描述
按照如下進行配置。
在這里插入圖片描述
配置時注意以下方面。

  • 必須是AAC編碼,在音頻編碼中,選擇AAC,采樣率44100HZ。
  • 必須是GB-2016標準,否則不支持TCP,在協議版本中選擇GB/T28181-2016。
  • 必須是TCP協議,不支持UDP,在傳輸協議中選擇TCP,并使用GB-2016標準。

攝像頭注冊后,SRS會自動邀請攝像頭推流,可以打開下面的鏈接播放:

http://localhost:8080/live/34020000001320000001.flv
http://localhost:8080/live/34020000001320000001.m3u8
webrtc://localhost/live/34020000001320000001
注意: 請把流名稱換成你的設備名稱,IP也更換為你的服務器IP,然后點播放。

在SRS管理界面內也可以看到推送的視頻:
在這里插入圖片描述
點擊預覽也可以直接播放視頻。
在這里插入圖片描述

總結

GB28181這個協議,真的很古怪,但畢竟是國內大廠經常使用的方案,因此了解它還是很必須的,基于推流方式的播放,視頻延遲率也非常高,基本在1秒以上,因此你要注意了哦。

你學廢了嗎?

👓都看到這了,還在乎點個贊嗎?

👓都點贊了,還在乎一個收藏嗎?

👓都收藏了,還在乎一個評論嗎?

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

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

相關文章

謹用ArrayList中的subList方法

謹用ArrayList中的subList方法 規范一&#xff1a; ArrayList 的 subList 結果不可強轉成 ArrayList&#xff0c;否則會拋出 ClassCastException 異常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

JavaWeb—— SpringBootWeb綜合案例(登錄功能、登錄校驗、異常處理)

案例-登錄認證 目錄 案例-登錄認證1. 登錄功能1.1 需求1.2 接口文檔1.3 思路分析1.4 功能開發1.5 測試 2. 登錄校驗2.1 問題分析2.2 會話技術2.2.1 會話技術介紹2.2.2 會話跟蹤方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技術 2.3 JWT令牌2.3.1…

程序員眼中的“祖傳代碼”

引言 在IT界&#xff0c;特別是在Java項目中&#xff0c;“祖傳代碼”通常指的是那些經過長時間積累、由多位開發者共同維護、且蘊含深厚技術沉淀的代碼片段或模塊。這些代碼可能存在于項目的核心模塊&#xff0c;也可能是一些輔助性的工具類。它們承載著項目的歷史&#xff0…

Matlab 多項式插值(曲線擬合)

文章目錄 一、簡介二、實現代碼三、實現效果參考資料一、簡介 由于對曲線擬合有些興趣,這里就找了一些資料從最基本的方法來看一下曲線擬合的效果: 二、實現代碼 % **********

Vue.js中的路由導航守衛和其使用方法

Vue.js 中的路由導航守衛是 Vue Router 提供的一套機制&#xff0c;用于在路由切換的過程中執行自定義代碼邏輯&#xff0c;包括但不限于權限驗證、頁面滾動位置保存、加載數據等。它分為三種類型&#xff1a; 全局前置守衛 (Global beforeEach Guard) 全局前置守衛應用在整個…

python科學計算庫之Numpy庫的使用的簡單習題

Numpy庫 Numpy&#xff08;Numerical Python的縮寫&#xff09;是一個開源的Python庫&#xff0c;用于進行科學計算。它提供了一個高性能的多維數組對象&#xff08;ndarray&#xff09;及用于處理這些數組的各種工具和函數。由于其高效和靈活的數據結構以及豐富的功能&#x…

Google 地圖 API 教程--干貨(1/2)

Google Maps API 教程 在本教程中我們將學習如何使用谷歌地圖API V3創建交互式地圖。 什么是 API? API = 應用程序編程接口(Application programming interface)。 API(Application Programming Interface,應用編程接口)其實就是操作系統留給應用程序的一個調用接口,…

【d34】【Java】【力扣】27. 移除元素

題目 給你一個數組 nums 和一個值 val&#xff0c;你需要 原地 移除所有數值等于 val 的元素&#xff0c;并返回移除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須僅使用 O(1) 額外空間并 原地 修改輸入數組。 元素的順序可以改變。你不需要考慮數組中超出新長…

案例介紹:汽車售后服務網絡構建與信息抽取技術應用(開源)

一、引言 在當今競爭激烈的汽車行業中&#xff0c;售后服務的質量已成為品牌成功的關鍵因素之一。作為一位經驗豐富的項目經理&#xff0c;我曾參與構建一個全面的汽車售后服務網絡&#xff0c;旨在為客戶提供無縫的維修、保養和配件更換服務。這個項目的核心目標是通過高效的…

spring、springmvc、springboot框架的介紹

前言 我們已經學過Spring&#xff0c;SpringMVC&#xff0c;SpringBoot了&#xff0c;那這三者之間有沒有聯系或者區別呢&#xff1f; spring是一個一站式的輕量級java開發的框架&#xff0c;那我們剛開始使用spring的時候&#xff0c;是需要配置很多的配置文件以及繁瑣的過程…

狀態機實現雙擊、短按、長按等按鍵識別檢測算法

1、按鍵識別算法的作用 按鍵識別算法在不同的技術和應用背景下有不同的作用&#xff0c;但其核心目標都是準確、可靠地檢測和區分用戶通過物理或虛擬按鍵所執行的操作。按鍵識別算法在各類電子設備及系統中起到至關重要的作用&#xff0c;它確保了人機交互的有效性和準確性&…

Vue前端+快速入門【詳解】

目錄 1.Vue概述 2. 快速入門 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript開發存在的問題&#xff1a;操作麻煩&#xff0c;耦合性強 為了實現html標簽與數據的解耦&#xff0c;前端開發中提供了MVVM思想&#xff1a;即Model-Vi…

Mysql-主從架構篇(一主多從,半同步案例搭建)

主從架構 主從架構有什么用&#xff1f; 通過搭建MySQL主從集群&#xff0c;可以緩解MySQL的數據存儲以及訪問的壓力。 數據安全&#xff08;主備&#xff09;&#xff1a;給主服務增加一個數據備份。基于這個目的&#xff0c;可以搭建主從架構&#xff0c;或者也可以基于主…

GO語言學習筆記(與Java的比較學習)(九)

讀寫數據 讀取用戶的輸入 最簡單的辦法是使用 fmt 包提供的 Scan 和 Sscan 開頭的函數。 Scanln 掃描來自標準輸入的文本&#xff0c;將空格分隔的值依次存放到后續的參數內&#xff0c;直到碰到換行。Scanf 與其類似&#xff0c;除了 Scanf 的第一個參數用作格式字符串&…

大數據開發(Java面試真題-卷三)

大數據開發&#xff08;Java面試真題&#xff09; 1、簡要介紹以下JVM有幾種垃圾收集器&#xff1f;2、Java中Synchronized的底層原理是什么&#xff1f;3、Java String為什么是不可變的&#xff1f;為什么要設計成不可變&#xff1f;4、泛型&#xff1f;5、常用的反射方法&…

深入Java日志框架及其最佳實踐

概述 在Java應用開發中&#xff0c;日志框架是確保應用穩定性和可觀察性的關鍵組件。它幫助開發者記錄應用的行為、診斷問題&#xff0c;并監控系統的健康狀況。隨著Java生態系統的不斷發展&#xff0c;各種日志框架也應運而生&#xff0c;各有特點和優勢。本文將詳細探討幾個…

redis進階(一)

文章目錄 前言一、Redis中的對象的結構體如下&#xff1a;二、壓縮鏈表三、跳躍表 前言 Redis是一種key/value型數據庫&#xff0c;其中&#xff0c;每個key和value都是使用對象表示的。 一、Redis中的對象的結構體如下&#xff1a; /** Redis 對象*/ typedef struct redisO…

c# .net8 香橙派orangepi + hc-04藍牙 實例

這些使用c# .net8開發&#xff0c;硬件 香橙派 orangepi 3lts和 hc-04藍牙 使用場景&#xff1a;可以通過這個功能&#xff0c;手機連接orangepi進行wifi等參數配置 硬件&#xff1a; 1、帶USB口的linux開發板orangepi 2、USB 轉TTL 中轉接藍牙&#xff08;HC-04) 某寶上買…

Vue的響應式原理是如何實現的

Vue的響應式原理主要**基于JavaScript的Object.defineProperty方法實現**。具體如下&#xff1a; 1. 數據劫持&#xff08;Data Hijacking&#xff09; Vue在初始化時&#xff0c;會遍歷data對象中的所有屬性&#xff0c;并使用Object.defineProperty將這些屬性轉換為getter/s…

Flink:Temporal Table Function(時態表函數)和 Temporal Join

博主歷時三年精心創作的《大數據平臺架構與原型實現&#xff1a;數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行&#xff0c;點擊《重磅推薦&#xff1a;建大數據平臺太難了&#xff01;給我發個工程原型吧&#xff01;》了解圖書詳情&#xff0c;…