video assess
一、监控平台整体架构
二、视频部署步骤
2.1 服务器开放端口
- 5061:5061 //sip tcp端口号
- 5061:5061/udp //sip udp端口号
- 8082 //流媒体服务器api http接口
- 8443 //流媒体服务器api https接口
- 554:554 //rtsp推流接口
- 1935:1935 //rtmp推流接口
- 8000:8000 //rtc接口
- 30000-30500:30000-30500 //rtp tcp推流端口
- 30000-30500:30000-30500/udp //rtp udp推流端口
注意!!!务必到服务器安全组开放对应端口,否则设备上线,点播和直播等功能无法使用。
2.2 修改sip配置和record配置,并编译jar包
- 配置文件在fastbee-admin/src/main/resources/application-prod.yml
# sip 配置 默认情况下是关闭sip服务的,需要时开启该服务
sip:
enabled: true
## 注意!!!docker部署保持默认即可,window测试环境填本地网卡内网IP
ip: 177.7.0.13
port: 5061
domain: 3402000000
id: 34020000002000000001
password: 12345678
- record配置文件在fastbee-record/src/main/resources/application-prod.yml
# [可选] 监听的HTTP端口, 网页和接口调用都是这个端口
# 您需要使用实际的证书名称替换domain_name.jks
# 证书获取参考文档:https://help.aliyun.com/zh/ssl-certificate/user-guide/enable-https-on-spring-boot
server:
port: 18081
servlet:
context-path: / # 应用的访问路径
# HTTPS配置, 默认不开启
ssl:
# 是否开启HTTPS访问 默认关闭
enabled: false
# enabled: true
# 证书文件路径,您需要使用实际的证书名称替换domain_name.jks。
key-store: classpath:fastbee.online.jks
# 证书密码 修改为对应密码
key-store-password: fastbee
# 证书类型, 默认为jks,根据实际修改
key-store-type: JKS
2.3 将jar包,https证书复制到docker部署目录,然后启动
- zlmediakit镜像地址
- default.pem证书获取流程参考:开启https相关功能
- docker/data 下有docker-compose.yml文件,可以一键跑环境,免去修改配置的麻烦
- 参考文档:Docker部署
2.4 物联网平台侧设置
1.新增监控产品
- 新增产品
- 选择设备类型
2.新增之后,可修改SIP配置(SIP配置读取的是Java中application-prod.yml的配置)
- 点击SIP配置,修改SIP配置(可保持默认)
3.新建流媒体服务器配置--视频中心--视频配置
- 服务器IP:修改流媒体服务器IP为部署服务器公网IP,默认为http播放协议,
- 服务器秘钥:http api鉴权秘钥,需与zlmedia/conf/config.ini中api->secret
- 服务器域名:用https播放协议,需修改zlmedia/conf/default.pem证书,同时修改服务器域名
- HOOK URL:修改HOOK URL为java服务api接口,默认为:java:8080,可根据自己的部署情况修改
4.新建设备,生成设备ID和通道ID
- 摄像头:设备类型为"IPC",通道类型为"IPC"
- 录像机:设备类型为"录像机",通道类型为"录像机"
- NVR+IPC:设备类型为"NVR",通道类型为"IPC"
- DVR+IPC:设备类型为"DVR",通道类型为"IPC"
5.将相关信息填入设备
将产品中SIP配置和生成的id填入设备
- 服务器ID = SIP服务器ID(海康) = SIP服务器编号(大华)
- 服务器域 = SIP服务器域(海康) = SIP域(大华)
- 部署服务器公网IP = SIP服务器地址(海康) = SIP服务器IP(大华)
- 服务器端口 = SIP服务器端口(海康) = SIP服务器端口(大华)
- 认证密码 = 密码(海康) = 注册密码(大华)
- 设备ID = SIP用户名(海康) = SIP用户认证ID(海康) = 设备编号(大华)
- 通道ID = 视频通道编号ID(海康) = 通道编号(大华)
三、非Docker部署,服务拆分部署
- 保证服务器对应服务的端口开放
- java sip配置根据本地接口环境,添加对应网卡接口ip
- zlmediakit conf/config.ini的hook api 添加java api回调地址
- 设备管理-> 视频配置-> 修改 zlmediakit 服务器IP 服务器域名 流媒体密钥等信息
四、window环境下搭建调试监控设备环境
1.使用docker脚本部署zlmediakit
使用docker目录下脚本启动zlmediakit
进入docker/data目录下,输入: docker-compose -f docker-compose-window.yml up -d
2.修改sip配置
查看网卡ip
修改java配置中的sip配置
启动后端和前端项目
后端 启动FastBeeApplication应用
前端 输入 npm run dev启动项目
3.在fastbee平台新增流媒体服务器
新增服务器
添加局域网ip为192.168.31.159的服务器
修改HookUrl为:host.docker.internal:8080
五、监控设备的国标GB28181协议直播流程
1.fastbee平台监控设备交互流程
(1).流程描述如下
a) fastbee平台调用zlmediakit的接口 /index/api/openRtpServer,创建rtp服务器,并将rtp推流端口返回,填入Invite消息中的sdp信息
b) fastbee平台(SIP服务器)向设备发送Invite消息,消息头域中携带 Subject 字段,表明点播的视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号等参数,SDP消息体中s字段为“Play”代表实时点播
c) 设备收到fastbee平台(SIP服务器)的Invite请求后,先回复 100 Trying 响应,再回复 200 OK 响应,携带SDP消息体,消息体中描述了设备发送媒体流的IP、端口、媒体格式、SSRC字段等内容
d) fastbee平台(SIP服务器)收到设备返回的 200 OK 响应后,向设备发送 ACK 请求,请求中不携带消息体,完成与设备的 Invite 会话建立过程。
e) 设备向zlmediakit创建的rtp服务器推流
f) zlmediakit通过onPublish hook api 通知fastbee平台流已经发布和推流鉴权,fastbee平台响应需要开启拉流协议和流配置等信息。zlmediakit通过onStreamChanged hook api 通知fastbee平台不同协议推流器流注册状态
g) 播放器根据设置的默认播放地址拉取flv直播流
h) zlmediakit通过onPlay hook api 通知fastbee平台播放器开始播放和播放鉴权
(2)主要问题出现的步骤
· 步骤b,c,d中数据包没有按照标准协议格式,导致直播会话建立出问题
· zlmediakit配置有问题,检查api http/https端口(8082,8443),rtp收流端口(udp 30000-30100),https证书等
· 设备和服务器连通性是否正常,设备的sip包->服务器java 5061,设备rtp推流->zlmediakit 30000-30100,不通将导致步骤e设备推流失败
· hook api配置是否正确,java应用部署在容器中,hook api为:java:8080, java应用在idea中启动,zlmediakit服务器在本机docker中启动,hook api为:host.docker.internal:8080 配置不正确将导致步骤f,h中回调接口出问题
(3)抓包截图
2.GB28181标准直播协议流程
(1)命令流程描述如下
a) 媒体流接收者向SIP服务器发送Invite消息,消息头域中携带 Subject字段,表明点播的视频源ID、发送方媒体流序列号、媒体流接收者ID、接收端媒体流序列号等参数,SDP消息体中s字段为“Play”代表实时点播。
b) SIP服务器收到Invite请求后,通过三方呼叫控制建立媒体服务器和媒体流发送者之间的媒体连接。向媒体服务器发送Invite消息,此消息不携带SDP消息体。
c) 媒体服务器收到SIP服务器的Invite请求后,回复200OK 响应,携带SDP消息体,消息体中描述了媒体服务器接收媒体流的IP、端口、媒体格式等内容。
d) SIP服务器收到媒体服务器返回的200OK 响应后,向媒体流发送者发送Invite请求,请求中携带消息3中媒体服务器回复的200OK 响应消息体,s字段为“Play”代表实时点播,增加y字段描述SSRC值,f字段描述媒体参数。
e) 媒体流发送者收到SIP服务器的Invite请求后,回复200OK 响应,携带SDP消息体,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容。
f) SIP服务器收到媒体流发送者返回的200OK 响应后,向媒体服务器发送 ACK 请求,请求中携带消息5中媒体流发送者回复的200 OK 响应消息体,完成与媒体服务器的Invite会话建立过程。
g) SIP服务器收到媒体流发送者返回的200OK 响应后,向媒体流发送者发送 ACK 请求,请求中不携带消息体,完成与媒体流发送者的Invite会话建立过程。
h) 完成三方呼叫控制后,SIP服务器通过B2BUA 代理方式建立媒体流接收者和媒体服务器之间的媒体连接。在消息1中增加SSRC值,转发给媒体服务器。
i) 媒体服务器收到Invite请求,回复200OK 响应,携带SDP消息体,消息体中描述了媒体服务器发送媒体流的IP、端口、媒体格式、SSRC值等内容。
j) SIP服务器将消息9转发给媒体流接收者。
k) 媒体流接收者收到200OK 响应后,回复 ACK 消息,完成与SIP服务器的Invite会话建立过程。
l) SIP服务器将消息11转发给媒体服务器,完成与媒体服务器的Invite会话建立过程。
m) 媒体流接收者向SIP服务器发送 BYE消息,断开消息1、10、11建立的同媒体流接收者的Invite会话。
n) SIP服务器收到 BYE消息后回复200OK 响应,会话断开。
o) SIP服务器收到 BYE消息后向媒体服务器发送 BYE消息,断开消息8、9、12建立的同媒体服务器的Invite会话。
p) 媒体服务器收到 BYE消息后回复200OK 响应,会话断开。
q) SIP服务器向媒体服务器发送 BYE 消息,断开消息2、3、6建立的同媒体服务器的Invite会话。
r) 媒体服务器收到 BYE消息后回复200OK 响应,会话断开。
s) SIP 服务器向媒体流发送者发送 BYE 消息,断开消息4、5、7建立的同媒体流发送者的Invite会话。
t) 媒体流发送者收到 BYE消息后回复200OK 响应,会话断开。
3.播放器url示例
(1).http 和 https
http协议下,server为:http://ip:port 例如:http://192.168.1.66:8082
https协议下,server为:https://域名:port 例如: https://fastbee.cn:8443
(2)flv协议
播放url格式:server/rtp/流ID.live.flv
示例:http://192.168.1.66:8082/rtp/gb_play_11010100001320000001_11010100001320000001.live.flv
https://fastbee.cn:8443/rtp/gb_play_11010100001320000001_11010100001320000001.live.flv
(3)fmp4协议
播放url格式:server/rtp/流ID.live.mp4
示例:http://192.168.1.66:8082/rtp/gb_play_11010100001320000001_11010100001320000001.live.mp4
https://fastbee.cn:8443/rtp/gb_play_11010100001320000001_11010100001320000001.live.mp4
(4)rtmp协议
播放url格式:rtmp://ip:port/rtp/流ID
示例:rtmp://192.168.1.66:1935/rtp/gb_play_11010100001320000001_11010100001320000001
(5)rtsp协议
播放url格式:rtsp://ip:port/rtp/流ID
示例:rtsp://192.168.1.66:554/rtp/gb_play_11010100001320000001_11010100001320000001