From c4cafd9cf9a44a4d859fb7d9391fc1a03789a83b Mon Sep 17 00:00:00 2001 From: "joe_zhang2006@163.com" Date: Fri, 8 Mar 2024 17:00:43 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[fix]=E8=A7=A3=E5=86=B3gb=20udp=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E6=92=AD=E6=94=BE=EF=BC=8Cgb=E7=BB=93=E6=9D=9F?= =?UTF-8?q?=E5=90=8E=E6=97=A0=E6=B3=95=E5=86=8D=E9=87=8D=E6=96=B0=E6=92=AD?= =?UTF-8?q?=E6=94=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/lalmax.conf.json | 12 +++++------- gb28181/channel.go | 12 ++++++++---- gb28181/inviteoption.go | 2 +- gb28181/mediaserver/server.go | 5 +++++ 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/conf/lalmax.conf.json b/conf/lalmax.conf.json index 9324c00..c9a67cb 100644 --- a/conf/lalmax.conf.json +++ b/conf/lalmax.conf.json @@ -26,16 +26,14 @@ "enable": true, "serial": "34020000002000000001", "realm": "3402000000", - "sipNetwork": "tcp", - "sipIp": "100.100.108.230", + "sipIp": "192.168.254.165", "sipPort": 5060, + "sipNetwork": "udp", "username": "", - "quickLogin": true, "media_config": { - "mediaIp": "100.100.108.230", - "tcp_listen_port": 30000, - "udp_listen_port": 30000 - } + "mediaIp": "192.168.254.165" + }, + "quickLogin": true }, "onvif_config": { "enable": true diff --git a/gb28181/channel.go b/gb28181/channel.go index f8b85a7..cdb3a10 100644 --- a/gb28181/channel.go +++ b/gb28181/channel.go @@ -40,6 +40,7 @@ type ChannelInfo struct { Longitude string `xml:"Longitude"` // 经度 Latitude string `xml:"Latitude"` // 纬度 StreamName string `xml:"-"` + serial string } type ChannelStatus string @@ -65,7 +66,7 @@ func (channel *Channel) CanInvite(streamName string) bool { } d := channel.device - if d.mediaInfo.IsInvite { + if d.mediaInfo.Ssrc > 0 { return false } @@ -131,12 +132,15 @@ func (channel *Channel) Invite(opt *InviteOptions, conf config.GB28181Config, st d := channel.device s := "Play" - //依据deviceId生成ssrc,取设备ID最后六位,然后按顺序生成,一个channel最大999 方便排查问题,也能保证唯一性 + //然后按顺序生成,一个channel最大999 方便排查问题,也能保证唯一性 channel.number++ if channel.number > 999 { channel.number = 1 } - opt.CreateSSRC(channel.ChannelId, channel.number) + if len(channel.serial) == 0 { + channel.serial = RandNumString(6) + } + opt.CreateSSRC(channel.serial, channel.number) protocol := "" nazalog.Info("networkType:", network) @@ -174,7 +178,7 @@ func (channel *Channel) Invite(opt *InviteOptions, conf config.GB28181Config, st invite.SetBody(strings.Join(sdpInfo, "\r\n")+"\r\n", true) subject := sip.GenericHeader{ - HeaderName: "Subject", Contents: fmt.Sprintf("%s:%s,%s:0", channel.ChannelId, opt.ssrc, ""), + HeaderName: "Subject", Contents: fmt.Sprintf("%s:%s,%s:0", channel.ChannelId, opt.ssrc, conf.Serial), } invite.AppendHeader(&subject) inviteRes, err := d.SipRequestForResponse(invite) diff --git a/gb28181/inviteoption.go b/gb28181/inviteoption.go index 317211e..346ae6c 100644 --- a/gb28181/inviteoption.go +++ b/gb28181/inviteoption.go @@ -23,7 +23,7 @@ func (o InviteOptions) String() string { func (o *InviteOptions) CreateSSRC(serial string, number uint16) { //不按gb生成标准,取ID最后六位,然后按顺序生成,一个channel最大999 - o.ssrc = fmt.Sprintf("%d%s%03d", 0, serial[14:], number) + o.ssrc = fmt.Sprintf("%d%s%03d", 0, serial, number) _ssrc, _ := strconv.ParseInt(o.ssrc, 10, 0) o.SSRC = uint32(_ssrc) } diff --git a/gb28181/mediaserver/server.go b/gb28181/mediaserver/server.go index 2900476..b64ff75 100644 --- a/gb28181/mediaserver/server.go +++ b/gb28181/mediaserver/server.go @@ -72,6 +72,8 @@ func (s *GB28181MediaServer) Start() (err error) { } c := NewConn(conn, s.lalServer) + c.CheckSsrc = s.CheckSsrc + c.NotifyClose = s.NotifyClose go c.Serve() } @@ -89,5 +91,8 @@ func (s *GB28181MediaServer) CheckSsrc(ssrc uint32) (string, bool) { } func (s *GB28181MediaServer) NotifyClose(streamName string) { + if s.NotifyCloseFunc != nil { + s.NotifyCloseFunc(streamName) + } } From 97a03a1b096564acaae2c93788e6c44e810da283 Mon Sep 17 00:00:00 2001 From: "joe_zhang2006@163.com" Date: Fri, 8 Mar 2024 17:04:08 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[fix]gb=E6=81=A2=E5=A4=8DIsInvite=E6=9D=A5?= =?UTF-8?q?=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6=E5=8F=AF=E4=BB=A5invite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gb28181/channel.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gb28181/channel.go b/gb28181/channel.go index cdb3a10..2f3fa77 100644 --- a/gb28181/channel.go +++ b/gb28181/channel.go @@ -66,7 +66,7 @@ func (channel *Channel) CanInvite(streamName string) bool { } d := channel.device - if d.mediaInfo.Ssrc > 0 { + if d.mediaInfo.IsInvite { return false }