跳至主要內容

GB28181协议直播流程

fastbee2024年10月13日大约 3 分钟

一、监控设备的国标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