流媒體:云端視頻監(jiān)控與可視化對(duì)講
本文轉(zhuǎn)載自微信公眾號(hào)「java開(kāi)源精選」,作者妖生 。轉(zhuǎn)載本文請(qǐng)聯(lián)系java開(kāi)源精選公眾號(hào)。
背景
最近在調(diào)研調(diào)研流媒體、RTSP、SIP之類的,兩方面的目的:一是找一個(gè)云端查看局域網(wǎng)監(jiān)控的方案,一個(gè)是實(shí)現(xiàn)與門(mén)禁聯(lián)動(dòng)的SIP 可視化對(duì)講。
云端視頻監(jiān)控
云端視頻監(jiān)控有三種方案:
1、開(kāi)發(fā)SIP服務(wù)器,實(shí)現(xiàn)GB28181協(xié)議,海大宇的IPC攝像頭也基本支持,但是如果有存儲(chǔ)30天的這種需求,對(duì)于云端來(lái)說(shuō),云盤(pán)就太昂貴了。
2、上下級(jí)聯(lián)動(dòng),通過(guò)海大宇的SDK調(diào)用攝像頭NVR(IPC攝像頭一般自帶)或硬盤(pán)錄像機(jī),再推送云端。
3、上下級(jí)聯(lián)動(dòng),通過(guò)RTSP(攝像頭一般都支持此協(xié)議)拉流錄像,在云端下發(fā)命令時(shí)推送實(shí)時(shí)的或曾經(jīng)的錄像視頻至云端。
云端視頻監(jiān)控之前選定的方案是采購(gòu)h5stream,可以上下級(jí)聯(lián)動(dòng),使用簡(jiǎn)單,海大宇等主流攝像頭都可以支持。
但是因?yàn)樾枰颗_(tái)機(jī)器都部署一個(gè)license,比較煩人;操作步驟是先部署,再郵件申請(qǐng)license,再激活,要弄兩次,沒(méi)法直接接入,在物聯(lián)網(wǎng)實(shí)施的時(shí)候特別尷尬。費(fèi)用倒是不貴,一個(gè)license百元左右。
然后開(kāi)始重新調(diào)研。
2020年年初,我在疫情放假期間曾經(jīng)基于網(wǎng)上的教程做過(guò)一個(gè)使用nginx-RTMP + OBS實(shí)現(xiàn)的推流直播,瀏覽器上調(diào)用.m3u8的分片流,但是分片流這種方式延遲太高了。
調(diào)研SIP時(shí)發(fā)現(xiàn)有一個(gè)國(guó)人開(kāi)發(fā)的C++流媒體庫(kù)不錯(cuò),ZLMediaKit;地址是https://github.com/xia-chu/ZLMediaKit。并且有許多優(yōu)秀的作者基于ZLMediaKit開(kāi)發(fā)了對(duì)應(yīng)的SIP服務(wù),且實(shí)現(xiàn)了公安制定的國(guó)標(biāo)GB28181-2011、GB28181-2016協(xié)議。
在豬豬群里問(wèn)了一下有沒(méi)有java實(shí)現(xiàn)的流媒體庫(kù),有同學(xué)說(shuō)red,去搜了下,發(fā)現(xiàn)red5的github還在更新維護(hù),倒不失為一個(gè)選擇。但是最新的red5版本是基于jdk11的,就有點(diǎn)犯怵了。
另有群里的同學(xué)貼出了知乎上的答案,雖然已經(jīng)是2015年的了,但還是具有參考價(jià)值,可以看一看:
- Live555 (C++) 流媒體平臺(tái)框架
- EasyDarwin (C++,國(guó)產(chǎn)精品)實(shí)時(shí)流媒體播放服務(wù)器程序
- DarwinStreamingSrvr (C++)
- Flash流媒體服務(wù)器
- Red5 (Java)流媒體服務(wù)器
- Open Streaming Server (Java)FMS流媒體服務(wù)器 (Adobe,收費(fèi)的)
- Wowza流媒體服務(wù)器(Java)開(kāi)源流媒體平臺(tái)
- FreeCast(Java)
帖子地址:https://www.zhihu.com/question/31160392。
Live555 EasyDarwin都是不錯(cuò)的方案,EasyDarwin 還是我們合肥的,是一家叫青犀的公司。
上面沒(méi)列入而我調(diào)研的還有 liveGBS 、h5stream,這幾種方案都是可以上下級(jí)聯(lián)動(dòng)的,但是因?yàn)閮r(jià)格的原因,主要是青犀千路以下比較貴,我們目前還沒(méi)那個(gè)量級(jí),所以選擇了可以分批次購(gòu)買(mǎi)的h5stream。
SIP音視頻對(duì)講
說(shuō)完視頻監(jiān)控,說(shuō)說(shuō)SIP 音視頻對(duì)講。
如果只是做SIP 音視頻對(duì)講的話,找到了一個(gè)不錯(cuò)的解決方案,即是flashphoner,地址https://flashphoner.com/。Android、ios、web都支持。
然后在查看flashphoner的過(guò)程中,找到了這個(gè)帖子【25個(gè)常用免費(fèi)SIP軟電話】,地址:https://zhuanlan.zhihu.com/p/313345953。
列表如下:
- XLite (Now Bria Solo)
- linphone
- MicroSIP
- 3CX Softphone
- ZoIPer
- Blink
- Grandstream WAVE
- (Qutecom)Wengo
- Damaka
- AdoreSoftphone
- MiniPAX
- MizuPhone
- FlashPhone
- FaramPhone
- Mirial Softphone
- WXCommunicator
- Twinkle
- IAXComm
- SJLabs SJPhone
- Phoner
- DIAX
- ExpressTalk
- T-Max Dialer
- IPComms
- IMSDroid
當(dāng)然,并沒(méi)有一一驗(yàn)證。
如果選好了后端的流媒體方案,前端的播放怎么弄?想到了使用webRTC。
在搜尋webRTC的時(shí)候,找到了極客時(shí)間李超的課,在其音視頻直播課中,也推薦了幾款開(kāi)源的流媒體軟件:
- licode、
- Janus-gateway
- Mediasoup
- Medooze
Meooze、Mediasoup、Licode這三個(gè)流媒體服務(wù)器的媒體通信部分都是由 C++ 實(shí)現(xiàn)的,控制邏輯通過(guò) Node.js 實(shí)現(xiàn)。Janus-gateway是完全通過(guò) C 語(yǔ)言實(shí)現(xiàn)的。據(jù)說(shuō)是都可以支持500人的多人視頻。
商業(yè)上還有個(gè)大牛直播,據(jù)自己介紹延遲極低,適合做直播服務(wù)。
調(diào)研后的想法
就這些吧,這是目前調(diào)研的一些成果。有些也并沒(méi)有做深入的研究。有些部署起來(lái)較為麻煩,花了半天沒(méi)部署好,就放棄了。
目前的想法是將視頻全部推到云端肯定不現(xiàn)實(shí),帶寬太貴了。所以準(zhǔn)備在局域網(wǎng)中部署客戶端,拉流RTSP,使用webRTC或其他js工具播放,然后使用frp這類穿透軟件,可以直接暴露服務(wù)給外網(wǎng)訪問(wèn)。
甚至可以將js中的播放地址替換為局域網(wǎng)中播放地址,使用iframe的方式嵌套,只要解決跨域問(wèn)題,就可以直接讓視頻在客戶局域網(wǎng)的本機(jī)上播放。
當(dāng)然,如果不是對(duì)應(yīng)局域網(wǎng)內(nèi)的客戶機(jī)訪問(wèn)就很尷尬了,所以還要做好云端訪問(wèn)與本地訪問(wèn)的隔離。
回過(guò)頭來(lái)想想,我們?cè)贏、B兩個(gè)局域網(wǎng),使用A區(qū)的電腦訪問(wèn)系統(tǒng),然后展示B區(qū)的攝像頭,也不是不可以,使用NAT轉(zhuǎn)換的方式,進(jìn)行點(diǎn)對(duì)點(diǎn)訪問(wèn)就行了,只是把云端作為一個(gè)隧道,那流量是不是可以破開(kāi)帶寬的限制呢?
目前的想法可能有別于主流的解決方案,也不知道能不能實(shí)現(xiàn)。做做看,否則帶寬真的是個(gè)大問(wèn)題。
至于可視化對(duì)講,如果自研的話,目前傾向于采用 ZLMediaKit,在其上實(shí)現(xiàn)SIP 信令。
但是可視化對(duì)講方案是比較成熟、通用的,也沒(méi)有個(gè)性化的需求,所以找?guī)准疑虡I(yè)公司比較下,應(yīng)該就可以確定了。
附錄:名詞簡(jiǎn)析
RTSP:實(shí)時(shí)流協(xié)議(Real Time Streaming Protocol)。流媒體公有協(xié)議,專門(mén)用以控制流媒體服務(wù)器。如播放,錄制和暫停?;赨DP協(xié)議,傳輸ts(.m3u8)、MP4格式流。目前多用于安防領(lǐng)域。
RTMP:實(shí)時(shí)消息協(xié)議(Real-Time Messaging Protocol)。目前是Adobe的私有協(xié)議,未完全公開(kāi),跟RTSP擁有一樣的功能?;赥CP協(xié)議,傳輸flv、f4v格式流,目前是比較主流的流媒體協(xié)議。有很多變種,具體看維基。
RTSP一般需要2-3個(gè)通道,數(shù)據(jù)和命令通道分開(kāi),RTMP和HTTP在一個(gè)通道上傳輸命令和數(shù)據(jù)。
SIP:會(huì)話發(fā)起協(xié)議(Session Initiation Protocol),由IETF(Internet Engineering Task Force,因特網(wǎng)工程任務(wù)組)制定的多媒體通信協(xié)議,也被稱作信令協(xié)議,所以SIP服務(wù)也稱作信令服務(wù)。
SIP可以用于創(chuàng)建、修改和終止包括視頻、語(yǔ)音、即時(shí)通信、在線游戲和虛擬現(xiàn)實(shí)等多種多媒體元素在內(nèi)的交互式用戶會(huì)話。