目前使用C# .net core 來實現國標gb28181標準的攝像頭播放、ptz雲臺控制、視頻回放等視頻監控功能,項目可運行於linux/docker/.net core環境,也是當前非常罕有的能做到毫秒級國標gb28181公網視頻傳送案例,也是少有的能同時具有播放、ptz雲臺控制、視頻回放功能的完整開源sip的項目。
使用方案:sip(GB28181.Solution c# .net core) + 流媒體服務器(srs/ZLMediaKit)
使用場景:直播、社區視頻監控、視頻AI分析、等需要用到把攝像頭從內外轉到外網訪問使用的場景
全網也很難找得到完整教程,我2017年就開始買攝像頭回來研究過一段時間,後來無果,最近因公司需要使用,再經過半年多的資料收集和不斷的學習試錯,找到正確的道路,免得大家走彎路。爲大家分享,然後對c#的開發者帶來驚喜,也共同爲c#的發展作出貢獻!
一、我的實現準備:
1、在淘寶購買一個ces服務器 centos 7系統作爲流媒體測試機,低配置2核2M的,1200多一年,按月的話差不多300一個月
2、購設備:需要看清楚支持gb28181的,一個海康雲臺攝像機700多塊
3、調試其間在本機windows調試,以後可以部署到linux,下載目前我參與的c#開源項目
https://gitee.com/GB28181/GB28181.Solution
用於作爲sip server服務,可以進行對攝像機進行通過信令進行相關操作 ,編譯環境vs2019(開源項目裏,文檔中的微信,可以進入該項目開源羣,一起爲這個項目做貢獻,建議加入)
4、在centos 7服務器下載srs4.0,github地址:
https://github.com/winlinvip/srs (develop分支)
5、下載sip抓包工具 wireshark
下載地址:https://www.wireshark.org/#download
附帶wireshark使用過程中可能會發生的內存佔用大,卡機的解決辦法
https://blog.csdn.net/qq_16005627/article/details/105603395
二、實現步驟
通過GB28181.Solution配置好srs的服務器地址和端口,項目的wintool運行起來,點直播放視頻,在srs服務器上可以看到rtp流已經推上來,可以實現rmtp、webrtc(低延時實測2秒內)、flv、hls(m3u8)輸出
然後通過vlc進行播放
1、打開GB28181.WinTool項目,配置 Config/gb28181.xml 主要配置好以下幾個
<LocalID>34020000002000000001</LoclID>SIP服務器ID 34020000002000000001
<LocalIP>127.0.0.1</LocalIP>本機IP 127.0.0.1 (或我本機IP192.168.197.108)
<LocalPort>5061</LocalPort>本機服務端口 5061
<RemotePort>5060</RemotePort>設備端口
<MediaIP>47.115.1.118</MediaIP>流媒體服務器地址(srs)
<MediaPort>9000</MediaPort>流媒體服務器端口(srs)
2、對應在攝像機的配置如下:
3、在srs的github中查看srs的運行辦法,運行srs,以下爲我整理的簡單易懂的指令
------------------------------------------
Step1:拉git代碼,切換到開發分支
git clone https://gitee.com/winlinvip/srs.oschina.git srs &&
cd srs/trunk &&
git remote set-url origin https://github.com/ossrs/srs.git &&
git pull
Step2:切換到開發分支
git checkout develop &&
./configure --with-gb28181 &&
make clean && make
------------------------------------------------
以上srs安裝完畢,修改兩個配置
打開trunk/conf/push.gb28181.conf
auto_create_channel on;//原來off改爲on
host 47.XX.XXX.118;//原來$CANDIDATE改爲你的服務器ip
----------------------------------------------
運行
./objs/srs -c conf/push.gb28181.conf
4、然後啓動項目GB28181.WinTool
5、到這一步,推流成功了
我們打開srs的測試http://ossrs.net/players/srs_gb28181.html 接口界面 ,可以實現rmtp、webrtc(低延時實測1秒內)、flv、hls(m3u8)輸出,輸入srs服務器IP進行播放
大家注意:播放地址最後一段childxxxx(ssrc)這個是每個通道顯示不一樣的,那麼怎麼把播放地址與設備關聯,以便把播放地址保存到數據庫,解決方法如下,自定義rtp的ssrc值,那麼播放地址也會跟隨之改變,如果要對接其它流媒體平臺也都是用這個ssrc值作爲放播放地址的:
6、播放
播放步驟
非常罕有的能做到毫秒級延遲國標gb28181公網視頻傳送案例
三、使用gb28181.server服務端+ api方式來進行部署
以上是使用wintool工具進行測試推流方法,如果是使用到開發或者生產環境中,需要使用服務端+grpc to api來進行
運行gb28181.Server
看到有設備註冊上來
調用接api
查看srs看到有rtp推流上來,即可進行播放,播放流程與上面第5點相同
-----------------------------------------------------------------------結束-------------------------------------------------------------------
上面有相關操作步驟,肚餓了,本文章在後續我還\很多內容需要再補充和細化更新的,更多瞭解可以通過https://gitee.com/GB28181/GB28181.Solution項目,介紹內容中的“微信”加入開源羣,羣主微信
覺得好的同學,記得點個贊!