Skip to content

Monibuca/plugin-gb28181

Folders and files

NameName
Last commit message
Last commit date
Sep 20, 2023
Jan 5, 2021
Jul 10, 2021
Aug 2, 2024
Dec 13, 2024
May 23, 2023
Dec 8, 2023
Aug 19, 2024
Aug 19, 2024
Aug 2, 2024
May 14, 2023
Jun 19, 2023
Jul 30, 2024
Aug 2, 2024
Jul 30, 2024
Aug 2, 2024
Aug 2, 2024
Dec 5, 2023

Repository files navigation

GB28181插件

该插件提供SIP server的服务,以及流媒体服务器能力,可以将NVR和摄像头的流抓到m7s中,可获取的设备的录像数据以及访问录像视频。也可以控制摄像头的旋转、缩放等。

插件地址

github.com/Monibuca/plugin-gb28181

插件引入

import (
_ "m7s.live/plugin/gb28181/v4"
)

默认插件配置

gb28181:
  invitemode:     1 #0、手动invite 1、表示自动发起invite,当Server(SIP)接收到设备信息时,立即向设备发送invite命令获取流,2、按需拉流,既等待订阅者触发
  position:
    autosubposition: false #是否自动订阅定位
    expires: 3600s #订阅周期(单位:秒),默认3600
    interval: 6s #订阅间隔(单位:秒),默认6
  sipip:          "" #sip服务器地址 默认 自动适配设备网段
  serial:         "34020000002000000001"
  realm:          "3402000000"
  username:       ""
  password:       ""
  registervalidity:  60s #注册有效期
  mediaip:          "" #媒体服务器地址 默认 自动适配设备网段
  port:
    sip: udp:5060 #sip服务器端口
    media: tcp:58200-59200 #媒体服务器端口,用于接收设备的流
    fdm: false #端口复用,单端口默认多路复用,多端口多路复用根据这个

  removebaninterval: 10m #定时移除注册失败的设备黑名单,单位秒,默认10分钟(600秒)
  loglevel:         info

**如果配置了端口范围(默认为范围端口),将采用范围端口机制,每一个流对应一个端口

注意某些摄像机没有设置用户名的地方,摄像机会以自身的国标id作为用户名,这个时候m7s会忽略使用摄像机的用户名,忽略配置的用户名 如果设备配置了错误的用户名和密码,连续三次上报错误后,m7s会记录设备id,并在10分钟内禁止设备注册

插件功能

使用SIP协议接受NVR或其他GB28181设备的注册

  • 服务器启动时自动监听SIP协议端口,当有设备注册时,会记录该设备信息,可以从UI的列表中看到设备
  • 定时发送Catalog命令查询设备的目录信息,可获得通道数据或者子设备
  • 发送RecordInfo命令查询设备对录像数据
  • 发送Invite命令获取设备的实时视频或者录像视频
  • 发送PTZ命令来控制摄像头云台
  • 自动同步设备位置

作为GB28281的流媒体服务器接受设备的媒体流

  • 当invite设备的实时视频流时,会在m7s中创建对应的流,StreamPath由设备编号和通道编号组成,即[设备编号]/[通道编号],如果有多个层级,通道编号是最后一个层级的编号
  • 当invite设备的录像视频流时,StreamPath由设备编号和通道编号以及录像的起止时间拼接而成即[设备编号]/[通道编号]/[开始时间]-[结束时间]

接口API

罗列所有的gb28181协议的设备

/gb28181/api/list 设备的结构体如下

type Device struct {
	ID              string
	Name            string
	Manufacturer    string
	Model           string
	Owner           string
	RegisterTime    time.Time
	UpdateTime      time.Time
	LastKeepaliveAt time.Time
	Status          string
	Channels        []*Channel
	NetAddr         string
}

根据golang的规则,小写字母开头的变量不会被序列化

从设备拉取视频流

/gb28181/api/invite

参数名 必传 含义
id 设备ID
channel 通道编号
startTime 开始时间(纯数字Unix时间戳)
endTime 结束时间(纯数字Unix时间戳)

返回200代表成功, 304代表已经在拉取中,不能重复拉(仅仅针对直播流)

停止从设备拉流

/gb28181/api/bye

参数名 必传 含义
id 设备ID
channel 通道编号

http 200 表示成功,404流不存在

发送控制命令

/gb28181/api/control

参数名 必传 含义
id 设备ID
channel 通道编号
ptzcmd PTZ控制指令

查询录像

/gb28181/api/records

参数名 必传 含义
id 设备ID
channel 通道编号
startTime 开始时间(Unix时间戳)
endTime 结束时间(Unix时间戳)

移动位置订阅

/gb28181/api/position

参数名 必传 含义
id 设备ID
expires 订阅周期(秒)
interval 订阅间隔(秒)

预置位列表查询

/gb28181/api/preset/list

参数名 必传 含义
id 设备ID
channel 通道编号

预置位操作

/gb28181/api/preset/control

参数名 必传 含义
id 设备ID
channel 通道编号
cmd 操作指令 0=新增,1=删除,2=调用
point 预置点位1-255