mirror of
https://github.com/Monibuca/plugin-gb28181.git
synced 2025-12-24 13:27:57 +08:00
配置中增加额外信息
This commit is contained in:
@@ -234,7 +234,7 @@ func (d *Device) deleteChannel(DeviceID string) {
|
||||
|
||||
func (d *Device) UpdateChannels(list ...ChannelInfo) {
|
||||
for _, c := range list {
|
||||
if _, ok := conf.Ignores[c.DeviceID]; ok {
|
||||
if _, ok := conf.ignores[c.DeviceID]; ok {
|
||||
continue
|
||||
}
|
||||
//当父设备非空且存在时、父设备节点增加通道
|
||||
|
||||
28
handle.go
28
handle.go
@@ -7,10 +7,10 @@ import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"go.uber.org/zap"
|
||||
"m7s.live/plugin/gb28181/v4/utils"
|
||||
|
||||
"github.com/ghettovoice/gosip/sip"
|
||||
"go.uber.org/zap"
|
||||
. "m7s.live/engine/v4"
|
||||
"m7s.live/plugin/gb28181/v4/utils"
|
||||
|
||||
"net/http"
|
||||
"time"
|
||||
@@ -195,6 +195,11 @@ func (d *Device) syncChannels() {
|
||||
}
|
||||
}
|
||||
|
||||
type MessageEvent struct {
|
||||
Type string
|
||||
Device *Device
|
||||
}
|
||||
|
||||
func (c *GB28181Config) OnMessage(req sip.Request, tx sip.ServerTransaction) {
|
||||
from, ok := req.From()
|
||||
if !ok || from.Address == nil || from.Address.User() == nil {
|
||||
@@ -267,13 +272,18 @@ func (c *GB28181Config) OnMessage(req sip.Request, tx sip.ServerTransaction) {
|
||||
case "Alarm":
|
||||
d.Status = DeviceAlarmedStatus
|
||||
body = BuildAlarmResponseXML(d.ID)
|
||||
case "Broadcast":
|
||||
GB28181Plugin.Info("broadcast message", zap.String("body", req.Body()))
|
||||
default:
|
||||
d.Warn("Not supported CmdType", zap.String("CmdType", temp.CmdType), zap.String("body", req.Body()))
|
||||
response := sip.NewResponseFromRequest("", req, http.StatusBadRequest, "", "")
|
||||
tx.Respond(response)
|
||||
return
|
||||
}
|
||||
|
||||
EmitEvent(MessageEvent{
|
||||
Type: temp.CmdType,
|
||||
Device: d,
|
||||
})
|
||||
tx.Respond(sip.NewResponseFromRequest("", req, http.StatusOK, "OK", body))
|
||||
} else {
|
||||
GB28181Plugin.Debug("Unauthorized message, device not found", zap.String("id", id))
|
||||
@@ -283,6 +293,8 @@ func (c *GB28181Config) OnBye(req sip.Request, tx sip.ServerTransaction) {
|
||||
tx.Respond(sip.NewResponseFromRequest("", req, http.StatusOK, "OK", ""))
|
||||
}
|
||||
|
||||
type NotifyEvent MessageEvent
|
||||
|
||||
// OnNotify 订阅通知处理
|
||||
func (c *GB28181Config) OnNotify(req sip.Request, tx sip.ServerTransaction) {
|
||||
from, ok := req.From()
|
||||
@@ -323,15 +335,17 @@ func (c *GB28181Config) OnNotify(req sip.Request, tx sip.ServerTransaction) {
|
||||
case "MobilePosition":
|
||||
//更新channel的坐标
|
||||
d.UpdateChannelPosition(temp.DeviceID, temp.Time, temp.Longitude, temp.Latitude)
|
||||
// case "Alarm":
|
||||
// //报警事件通知 TODO
|
||||
case "Alarm":
|
||||
d.Status = DeviceAlarmedStatus
|
||||
default:
|
||||
d.Warn("Not supported CmdType", zap.String("CmdType", temp.CmdType), zap.String("body", req.Body()))
|
||||
response := sip.NewResponseFromRequest("", req, http.StatusBadRequest, "", "")
|
||||
tx.Respond(response)
|
||||
return
|
||||
}
|
||||
|
||||
EmitEvent(NotifyEvent{
|
||||
Type: temp.CmdType,
|
||||
Device: d})
|
||||
tx.Respond(sip.NewResponseFromRequest("", req, http.StatusOK, "OK", body))
|
||||
}
|
||||
}
|
||||
|
||||
72
main.go
72
main.go
@@ -13,50 +13,44 @@ import (
|
||||
)
|
||||
|
||||
type GB28181PositionConfig struct {
|
||||
AutosubPosition bool //是否自动订阅定位
|
||||
Expires time.Duration `default:"3600s"` //订阅周期(单位:秒)
|
||||
Interval time.Duration `default:"6s"` //订阅间隔(单位:秒)
|
||||
AutosubPosition bool `desc:"是否自动订阅定位"` //是否自动订阅定位
|
||||
Expires time.Duration `default:"3600s" desc:"订阅周期"` //订阅周期
|
||||
Interval time.Duration `default:"6s" desc:"订阅间隔"` //订阅间隔
|
||||
}
|
||||
|
||||
type GB28181Config struct {
|
||||
InviteMode int `default:"1"` //邀请模式,0:手动拉流,1:预拉流,2:按需拉流
|
||||
InviteIDs string //按照国标gb28181协议允许邀请的设备类型:132 摄像机 NVR
|
||||
ListenAddr string `default:"0.0.0.0"`
|
||||
InviteMode int `default:"1" desc:"拉流模式" enum:"0:手动拉流,1:预拉流,2:按需拉流"` //邀请模式,0:手动拉流,1:预拉流,2:按需拉流
|
||||
InviteIDs string `desc:"允许邀请的设备类型( 11~13位是设备类型编码),逗号分割"` //按照国标gb28181协议允许邀请的设备类型:132 摄像机 NVR
|
||||
ListenAddr string `default:"0.0.0.0" desc:"监听IP地址"` //监听地址
|
||||
//sip服务器的配置
|
||||
SipNetwork string `default:"udp"` //传输协议,默认UDP,可选TCP
|
||||
SipIP string //sip 服务器公网IP
|
||||
SipPort uint16 `default:"5060"` //sip 服务器端口,默认 5060
|
||||
Serial string `default:"34020000002000000001"` //sip 服务器 id, 默认 34020000002000000001
|
||||
Realm string `default:"3402000000"` //sip 服务器域,默认 3402000000
|
||||
Username string //sip 服务器账号
|
||||
Password string //sip 服务器密码
|
||||
SipNetwork string `default:"udp" desc:"废弃,请使用 Port"` //传输协议,默认UDP,可选TCP
|
||||
SipIP string `desc:"sip 服务IP地址"` //sip 服务器公网IP
|
||||
SipPort uint16 `default:"5060" desc:"废弃,请使用 Port"` //sip 服务器端口,默认 5060
|
||||
Serial string `default:"34020000002000000001" desc:"sip 服务 id"` //sip 服务器 id, 默认 34020000002000000001
|
||||
Realm string `default:"3402000000" desc:"sip 服务域"` //sip 服务器域,默认 3402000000
|
||||
Username string `desc:"sip 服务账号"` //sip 服务器账号
|
||||
Password string `desc:"sip 服务密码"` //sip 服务器密码
|
||||
Port struct { // 新配置方式
|
||||
Sip string `default:"udp:5060"`
|
||||
Media string `default:"tcp:58200-59200"`
|
||||
Sip string `default:"udp:5060" desc:"sip服务端口号"`
|
||||
Media string `default:"tcp:58200-59200" desc:"媒体服务端口号"`
|
||||
}
|
||||
// AckTimeout uint16 //sip 服务应答超时,单位秒
|
||||
RegisterValidity time.Duration `default:"3600s"` //注册有效期,单位秒,默认 3600
|
||||
// RegisterInterval int //注册间隔,单位秒,默认 60
|
||||
HeartbeatInterval time.Duration `default:"60s"` //心跳间隔,单位秒,默认 60
|
||||
// HeartbeatRetry int //心跳超时次数,默认 3
|
||||
RegisterValidity time.Duration `default:"3600s" desc:"注册有效期"` //注册有效期,单位秒,默认 3600
|
||||
HeartbeatInterval time.Duration `default:"60s" desc:"心跳间隔"` //心跳间隔,单位秒,默认 60
|
||||
|
||||
//媒体服务器配置
|
||||
MediaIP string //媒体服务器地址
|
||||
MediaPort uint16 `default:"58200"` //媒体服务器端口
|
||||
MediaNetwork string `default:"tcp"` //媒体传输协议,默认UDP,可选TCP
|
||||
MediaPortMin uint16 `default:"58200"`
|
||||
MediaPortMax uint16 `default:"59200"`
|
||||
// MediaIdleTimeout uint16 //推流超时时间,超过则断开链接,让设备重连
|
||||
MediaIP string `desc:"媒体服务IP地址"` //媒体服务器地址
|
||||
MediaPort uint16 `default:"58200" desc:"废弃,请使用 Port"` //媒体服务器端口
|
||||
MediaNetwork string `default:"tcp" desc:"废弃,请使用 Port"` //媒体传输协议,默认UDP,可选TCP
|
||||
MediaPortMin uint16 `default:"58200" desc:"废弃,请使用 Port"`
|
||||
MediaPortMax uint16 `default:"59200" desc:"废弃,请使用 Port"`
|
||||
|
||||
// WaitKeyFrame bool //是否等待关键帧,如果等待,则在收到第一个关键帧之前,忽略所有媒体流
|
||||
RemoveBanInterval time.Duration `default:"600s"` //移除禁止设备间隔
|
||||
// UdpCacheSize int //udp缓存大小
|
||||
LogLevel string `default:"info"` //trace, debug, info, warn, error, fatal, panic
|
||||
routes map[string]string
|
||||
DumpPath string //dump PS流本地文件路径
|
||||
Ignores map[string]struct{}
|
||||
tcpPorts PortManager
|
||||
udpPorts PortManager
|
||||
RemoveBanInterval time.Duration `default:"600s" desc:"移除禁止设备间隔"` //移除禁止设备间隔
|
||||
routes map[string]string
|
||||
DumpPath string `desc:"dump PS流本地文件路径"` //dump PS流本地文件路径
|
||||
Ignores []string `desc:"忽略的设备ID"` //忽略的设备ID
|
||||
ignores map[string]struct{}
|
||||
tcpPorts PortManager
|
||||
udpPorts PortManager
|
||||
|
||||
Position GB28181PositionConfig //关于定位的配置参数
|
||||
|
||||
@@ -89,11 +83,17 @@ func (c *GB28181Config) OnEvent(event any) {
|
||||
c.MediaPortMin = ports[0]
|
||||
c.MediaPortMax = ports[1]
|
||||
} else {
|
||||
c.MediaPortMin = 0
|
||||
c.MediaPortMin = 0
|
||||
c.MediaPortMax = 0
|
||||
c.MediaPort = ports[0]
|
||||
}
|
||||
}
|
||||
if len(c.Ignores) > 0 {
|
||||
c.ignores = make(map[string]struct{})
|
||||
for _, v := range c.Ignores {
|
||||
c.ignores[v] = util.Null
|
||||
}
|
||||
}
|
||||
os.MkdirAll(c.DumpPath, 0766)
|
||||
c.ReadDevices()
|
||||
go c.initRoutes()
|
||||
|
||||
10
server.go
10
server.go
@@ -7,13 +7,13 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/logrusorgru/aurora/v4"
|
||||
"go.uber.org/zap"
|
||||
"m7s.live/plugin/gb28181/v4/utils"
|
||||
|
||||
"github.com/ghettovoice/gosip"
|
||||
"github.com/ghettovoice/gosip/log"
|
||||
"github.com/ghettovoice/gosip/sip"
|
||||
"github.com/logrusorgru/aurora/v4"
|
||||
"go.uber.org/zap"
|
||||
. "m7s.live/engine/v4"
|
||||
"m7s.live/plugin/gb28181/v4/utils"
|
||||
)
|
||||
|
||||
var srv gosip.Server
|
||||
@@ -119,7 +119,7 @@ func (c *GB28181Config) startServer() {
|
||||
addr := c.ListenAddr + ":" + strconv.Itoa(int(c.SipPort))
|
||||
|
||||
logger := utils.NewZapLogger(GB28181Plugin.Logger, "GB SIP Server", nil)
|
||||
logger.SetLevel(uint32(levelMap[c.LogLevel]))
|
||||
logger.SetLevel(uint32(levelMap[EngineConfig.LogLevel]))
|
||||
// logger := log.NewDefaultLogrusLogger().WithPrefix("GB SIP Server")
|
||||
srvConf := gosip.ServerConfig{}
|
||||
if c.SipIP != "" {
|
||||
|
||||
Reference in New Issue
Block a user