GB28181协议直播流程
一、监控设备的国标GB28181协议直播流程
1.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平台播放器开始播放和播放鉴权
1.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中回调接口出问题
1.3 抓包截图
1.4 GB28181标准直播协议流程
1.5 播放器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