一、監(jiān)控平臺(tái)整體架構(gòu)

二、視頻部署步驟
2.1 服務(wù)器開(kāi)放端口
- 5061:5061 //sip tcp端口號(hào)
- 5061:5061/udp //sip udp端口號(hào)
- 8082 //流媒體服務(wù)器api http接口
- 8443 //流媒體服務(wù)器api https接口
- 554:554 //rtsp推流接口
- 1935:1935 //rtmp推流接口
- 8000:8000 //rtc接口
- 30000-30500:30000-30500 //rtp tcp推流端口
- 30000-30500:30000-30500/udp //rtp udp推流端口
注意?。?!務(wù)必到服務(wù)器安全組開(kāi)放對(duì)應(yīng)端口,否則設(shè)備上線(xiàn),點(diǎn)播和直播等功能無(wú)法使用。
2.2 修改sip配置和record配置,并編譯jar包
- 配置文件在fastbee-admin/src/main/resources/application-prod.yml
# sip 配置 默認(rèn)情況下是關(guān)閉sip服務(wù)的,需要時(shí)開(kāi)啟該服務(wù)
sip:
enabled: true
## 注意?。?!docker部署保持默認(rèn)即可,window測(cè)試環(huán)境填本地網(wǎng)卡內(nèi)網(wǎng)IP
ip: 177.7.0.13
port: 5061
domain: 3402000000
id: 34020000002000000001
password: 12345678
- record配置文件在fastbee-record/src/main/resources/application-prod.yml
# [可選] 監(jiān)聽(tīng)的HTTP端口, 網(wǎng)頁(yè)和接口調(diào)用都是這個(gè)端口
# 您需要使用實(shí)際的證書(shū)名稱(chēng)替換domain_name.jks
# 證書(shū)獲取參考文檔:https://help.aliyun.com/zh/ssl-certificate/user-guide/enable-https-on-spring-boot
server:
port: 18081
servlet:
context-path: / # 應(yīng)用的訪(fǎng)問(wèn)路徑
# HTTPS配置, 默認(rèn)不開(kāi)啟
ssl:
# 是否開(kāi)啟HTTPS訪(fǎng)問(wèn) 默認(rèn)關(guān)閉
enabled: false
# enabled: true
# 證書(shū)文件路徑,您需要使用實(shí)際的證書(shū)名稱(chēng)替換domain_name.jks。
key-store: classpath:fastbee.online.jks
# 證書(shū)密碼 修改為對(duì)應(yīng)密碼
key-store-password: fastbee
# 證書(shū)類(lèi)型, 默認(rèn)為jks,根據(jù)實(shí)際修改
key-store-type: JKS
2.3 將jar包,https證書(shū)復(fù)制到docker部署目錄,然后啟動(dòng)
- zlmediakit鏡像地址
- default.pem證書(shū)獲取流程參考:開(kāi)啟https相關(guān)功能
- docker/data 下有docker-compose.yml文件,可以一鍵跑環(huán)境,免去修改配置的麻煩
- 參考文檔:Docker部署
2.4 物聯(lián)網(wǎng)平臺(tái)側(cè)設(shè)置
1.新增監(jiān)控產(chǎn)品
- 新增產(chǎn)品

- 選擇設(shè)備類(lèi)型

2.新增之后,可修改SIP配置(SIP配置讀取的是Java中application-prod.yml的配置)
- 點(diǎn)擊SIP配置,修改SIP配置(可保持默認(rèn))

3.新建流媒體服務(wù)器配置--視頻中心--視頻配置
- 服務(wù)器IP:修改流媒體服務(wù)器IP為部署服務(wù)器公網(wǎng)IP,默認(rèn)為http播放協(xié)議,
- 服務(wù)器秘鑰:http api鑒權(quán)秘鑰,需與zlmedia/conf/config.ini中api->secret
- 服務(wù)器域名:用https播放協(xié)議,需修改zlmedia/conf/default.pem證書(shū),同時(shí)修改服務(wù)器域名
- HOOK URL:修改HOOK URL為java服務(wù)api接口,默認(rèn)為:java:8080,可根據(jù)自己的部署情況修改

4.新建設(shè)備,生成設(shè)備ID和通道ID
- 攝像頭:設(shè)備類(lèi)型為"IPC",通道類(lèi)型為"IPC"
- 錄像機(jī):設(shè)備類(lèi)型為"錄像機(jī)",通道類(lèi)型為"錄像機(jī)"
- NVR+IPC:設(shè)備類(lèi)型為"NVR",通道類(lèi)型為"IPC"
- DVR+IPC:設(shè)備類(lèi)型為"DVR",通道類(lèi)型為"IPC"


5.將相關(guān)信息填入設(shè)備
將產(chǎn)品中SIP配置和生成的id填入設(shè)備
- 服務(wù)器ID = SIP服務(wù)器ID(海康) = SIP服務(wù)器編號(hào)(大華)
- 服務(wù)器域 = SIP服務(wù)器域(??担?= SIP域(大華)
- 部署服務(wù)器公網(wǎng)IP = SIP服務(wù)器地址(??担?= SIP服務(wù)器IP(大華)
- 服務(wù)器端口 = SIP服務(wù)器端口(海康) = SIP服務(wù)器端口(大華)
- 認(rèn)證密碼 = 密碼(??担?= 注冊(cè)密碼(大華)
- 設(shè)備ID = SIP用戶(hù)名(??担?= SIP用戶(hù)認(rèn)證ID(海康) = 設(shè)備編號(hào)(大華)
- 通道ID = 視頻通道編號(hào)ID(??担?= 通道編號(hào)(大華)
三、非Docker部署,服務(wù)拆分部署
- 保證服務(wù)器對(duì)應(yīng)服務(wù)的端口開(kāi)放
- java sip配置根據(jù)本地接口環(huán)境,添加對(duì)應(yīng)網(wǎng)卡接口ip
- zlmediakit conf/config.ini的hook api 添加java api回調(diào)地址
- 設(shè)備管理-> 視頻配置-> 修改 zlmediakit 服務(wù)器IP 服務(wù)器域名 流媒體密鑰等信息
四、window環(huán)境下搭建調(diào)試監(jiān)控設(shè)備環(huán)境
1.使用docker腳本部署zlmediakit
使用docker目錄下腳本啟動(dòng)zlmediakit

進(jìn)入docker/data目錄下,輸入: docker-compose -f docker-compose-window.yml up -d

2.修改sip配置
查看網(wǎng)卡ip
修改java配置中的sip配置

啟動(dòng)后端和前端項(xiàng)目
后端 啟動(dòng)FastBeeApplication應(yīng)用

前端 輸入 npm run dev啟動(dòng)項(xiàng)目

3.在fastbee平臺(tái)新增流媒體服務(wù)器
新增服務(wù)器

添加局域網(wǎng)ip為192.168.31.159的服務(wù)器

修改HookUrl為:host.docker.internal:8080

五、監(jiān)控設(shè)備的國(guó)標(biāo)GB28181協(xié)議直播流程
1.fastbee平臺(tái)監(jiān)控設(shè)備交互流程

(1).流程描述如下
a) fastbee平臺(tái)調(diào)用zlmediakit的接口 /index/api/openRtpServer,創(chuàng)建rtp服務(wù)器,并將rtp推流端口返回,填入Invite消息中的sdp信息
b) fastbee平臺(tái)(SIP服務(wù)器)向設(shè)備發(fā)送Invite消息,消息頭域中攜帶 Subject 字段,表明點(diǎn)播的視頻源ID、發(fā)送方媒體流序列號(hào)、媒體流接收者ID、接收端媒體流序列號(hào)等參數(shù),SDP消息體中s字段為“Play”代表實(shí)時(shí)點(diǎn)播
c) 設(shè)備收到fastbee平臺(tái)(SIP服務(wù)器)的Invite請(qǐng)求后,先回復(fù) 100 Trying 響應(yīng),再回復(fù) 200 OK 響應(yīng),攜帶SDP消息體,消息體中描述了設(shè)備發(fā)送媒體流的IP、端口、媒體格式、SSRC字段等內(nèi)容
d) fastbee平臺(tái)(SIP服務(wù)器)收到設(shè)備返回的 200 OK 響應(yīng)后,向設(shè)備發(fā)送 ACK 請(qǐng)求,請(qǐng)求中不攜帶消息體,完成與設(shè)備的 Invite 會(huì)話(huà)建立過(guò)程。
e) 設(shè)備向zlmediakit創(chuàng)建的rtp服務(wù)器推流
f) zlmediakit通過(guò)onPublish hook api 通知fastbee平臺(tái)流已經(jīng)發(fā)布和推流鑒權(quán),fastbee平臺(tái)響應(yīng)需要開(kāi)啟拉流協(xié)議和流配置等信息。zlmediakit通過(guò)onStreamChanged hook api 通知fastbee平臺(tái)不同協(xié)議推流器流注冊(cè)狀態(tài)
g) 播放器根據(jù)設(shè)置的默認(rèn)播放地址拉取flv直播流
h) zlmediakit通過(guò)onPlay hook api 通知fastbee平臺(tái)播放器開(kāi)始播放和播放鑒權(quán)
(2)主要問(wèn)題出現(xiàn)的步驟
· 步驟b,c,d中數(shù)據(jù)包沒(méi)有按照標(biāo)準(zhǔn)協(xié)議格式,導(dǎo)致直播會(huì)話(huà)建立出問(wèn)題
· zlmediakit配置有問(wèn)題,檢查api http/https端口(8082,8443),rtp收流端口(udp 30000-30100),https證書(shū)等
· 設(shè)備和服務(wù)器連通性是否正常,設(shè)備的sip包->服務(wù)器java 5061,設(shè)備rtp推流->zlmediakit 30000-30100,不通將導(dǎo)致步驟e設(shè)備推流失敗
· hook api配置是否正確,java應(yīng)用部署在容器中,hook api為:java:8080, java應(yīng)用在idea中啟動(dòng),zlmediakit服務(wù)器在本機(jī)docker中啟動(dòng),hook api為:host.docker.internal:8080 配置不正確將導(dǎo)致步驟f,h中回調(diào)接口出問(wèn)題
(3)抓包截圖

2.GB28181標(biāo)準(zhǔn)直播協(xié)議流程

(1)命令流程描述如下
a) 媒體流接收者向SIP服務(wù)器發(fā)送Invite消息,消息頭域中攜帶 Subject字段,表明點(diǎn)播的視頻源ID、發(fā)送方媒體流序列號(hào)、媒體流接收者ID、接收端媒體流序列號(hào)等參數(shù),SDP消息體中s字段為“Play”代表實(shí)時(shí)點(diǎn)播。
b) SIP服務(wù)器收到Invite請(qǐng)求后,通過(guò)三方呼叫控制建立媒體服務(wù)器和媒體流發(fā)送者之間的媒體連接。向媒體服務(wù)器發(fā)送Invite消息,此消息不攜帶SDP消息體。
c) 媒體服務(wù)器收到SIP服務(wù)器的Invite請(qǐng)求后,回復(fù)200OK 響應(yīng),攜帶SDP消息體,消息體中描述了媒體服務(wù)器接收媒體流的IP、端口、媒體格式等內(nèi)容。
d) SIP服務(wù)器收到媒體服務(wù)器返回的200OK 響應(yīng)后,向媒體流發(fā)送者發(fā)送Invite請(qǐng)求,請(qǐng)求中攜帶消息3中媒體服務(wù)器回復(fù)的200OK 響應(yīng)消息體,s字段為“Play”代表實(shí)時(shí)點(diǎn)播,增加y字段描述SSRC值,f字段描述媒體參數(shù)。
e) 媒體流發(fā)送者收到SIP服務(wù)器的Invite請(qǐng)求后,回復(fù)200OK 響應(yīng),攜帶SDP消息體,消息體中描述了媒體流發(fā)送者發(fā)送媒體流的IP、端口、媒體格式、SSRC字段等內(nèi)容。
f) SIP服務(wù)器收到媒體流發(fā)送者返回的200OK 響應(yīng)后,向媒體服務(wù)器發(fā)送 ACK 請(qǐng)求,請(qǐng)求中攜帶消息5中媒體流發(fā)送者回復(fù)的200 OK 響應(yīng)消息體,完成與媒體服務(wù)器的Invite會(huì)話(huà)建立過(guò)程。
g) SIP服務(wù)器收到媒體流發(fā)送者返回的200OK 響應(yīng)后,向媒體流發(fā)送者發(fā)送 ACK 請(qǐng)求,請(qǐng)求中不攜帶消息體,完成與媒體流發(fā)送者的Invite會(huì)話(huà)建立過(guò)程。
h) 完成三方呼叫控制后,SIP服務(wù)器通過(guò)B2BUA 代理方式建立媒體流接收者和媒體服務(wù)器之間的媒體連接。在消息1中增加SSRC值,轉(zhuǎn)發(fā)給媒體服務(wù)器。
i) 媒體服務(wù)器收到Invite請(qǐng)求,回復(fù)200OK 響應(yīng),攜帶SDP消息體,消息體中描述了媒體服務(wù)器發(fā)送媒體流的IP、端口、媒體格式、SSRC值等內(nèi)容。
j) SIP服務(wù)器將消息9轉(zhuǎn)發(fā)給媒體流接收者。
k) 媒體流接收者收到200OK 響應(yīng)后,回復(fù) ACK 消息,完成與SIP服務(wù)器的Invite會(huì)話(huà)建立過(guò)程。
l) SIP服務(wù)器將消息11轉(zhuǎn)發(fā)給媒體服務(wù)器,完成與媒體服務(wù)器的Invite會(huì)話(huà)建立過(guò)程。
m) 媒體流接收者向SIP服務(wù)器發(fā)送 BYE消息,斷開(kāi)消息1、10、11建立的同媒體流接收者的Invite會(huì)話(huà)。
n) SIP服務(wù)器收到 BYE消息后回復(fù)200OK 響應(yīng),會(huì)話(huà)斷開(kāi)。
o) SIP服務(wù)器收到 BYE消息后向媒體服務(wù)器發(fā)送 BYE消息,斷開(kāi)消息8、9、12建立的同媒體服務(wù)器的Invite會(huì)話(huà)。
p) 媒體服務(wù)器收到 BYE消息后回復(fù)200OK 響應(yīng),會(huì)話(huà)斷開(kāi)。
q) SIP服務(wù)器向媒體服務(wù)器發(fā)送 BYE 消息,斷開(kāi)消息2、3、6建立的同媒體服務(wù)器的Invite會(huì)話(huà)。
r) 媒體服務(wù)器收到 BYE消息后回復(fù)200OK 響應(yīng),會(huì)話(huà)斷開(kāi)。
s) SIP 服務(wù)器向媒體流發(fā)送者發(fā)送 BYE 消息,斷開(kāi)消息4、5、7建立的同媒體流發(fā)送者的Invite會(huì)話(huà)。
t) 媒體流發(fā)送者收到 BYE消息后回復(fù)200OK 響應(yīng),會(huì)話(huà)斷開(kāi)。
3.播放器url示例
(1).http 和 https
http協(xié)議下,server為:http://ip:port 例如:http://192.168.1.66:8082
https協(xié)議下,server為:https://域名:port 例如: http://m.btsdy.com:8443
(2)flv協(xié)議
播放url格式:server/rtp/流ID.live.flv
示例:http://192.168.1.66:8082/rtp/gb_play_11010100001320000001_11010100001320000001.live.flv
http://m.btsdy.com:8443/rtp/gb_play_11010100001320000001_11010100001320000001.live.flv
(3)fmp4協(xié)議
播放url格式:server/rtp/流ID.live.mp4
示例:http://192.168.1.66:8082/rtp/gb_play_11010100001320000001_11010100001320000001.live.mp4
http://m.btsdy.com:8443/rtp/gb_play_11010100001320000001_11010100001320000001.live.mp4
(4)rtmp協(xié)議
播放url格式:rtmp://ip:port/rtp/流ID
示例:rtmp://192.168.1.66:1935/rtp/gb_play_11010100001320000001_11010100001320000001
(5)rtsp協(xié)議
播放url格式:rtsp://ip:port/rtp/流ID
示例:rtsp://192.168.1.66:554/rtp/gb_play_11010100001320000001_11010100001320000001
六、具體產(chǎn)品接入示例
1.??到尤胧纠?配置路徑:配置-> 網(wǎng)絡(luò)-> 高級(jí)配置-> 平臺(tái)接入

2.大華接入示例: 配置路徑:配置-> 網(wǎng)絡(luò)配置-> 平臺(tái)接入

3.攝像頭流媒體格式建議為:視頻:h264 音頻:aac
