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..2f3fa77 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 @@ -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) + } }