diff --git a/gb28181/channel.go b/gb28181/channel.go index e931f0a..26de32e 100644 --- a/gb28181/channel.go +++ b/gb28181/channel.go @@ -288,7 +288,7 @@ func (channel *Channel) byeClear() (err error) { return } func (channel *Channel) Bye(streamName string) (err error) { - err = channel.stopMediaServer() + if channel.ackReq != nil { byeReq := channel.ackReq channel.ackReq = nil @@ -296,10 +296,13 @@ func (channel *Channel) Bye(streamName string) (err error) { seq, _ := byeReq.CSeq() seq.SeqNo += 1 sipsvr.Send(byeReq) - return err } else { - return errors.New("channel has been closed") + err = errors.New("channel has been closed") } + + channel.stopMediaServer() + return err + } func (channel *Channel) CreateRequst(Method sip.RequestMethod, conf config.GB28181Config) (req sip.Request) { d := channel.device diff --git a/gb28181/mediaserver/server.go b/gb28181/mediaserver/server.go index bb5cdcd..1320e8b 100644 --- a/gb28181/mediaserver/server.go +++ b/gb28181/mediaserver/server.go @@ -25,6 +25,8 @@ type GB28181MediaServer struct { disposeOnce sync.Once observer IGbObserver mediaKey string + + conn *Conn //增加链接对象,目前只适用于多端口 } func NewGB28181MediaServer(listenPort int, mediaKey string, observer IGbObserver, lal logic.ILalServer) *GB28181MediaServer { @@ -59,6 +61,8 @@ func (s *GB28181MediaServer) Start(listener net.Listener) (err error) { c := NewConn(conn, s.observer, s.lalServer) c.SetKey(s.mediaKey) + + s.conn = c go c.Serve() } }() @@ -67,6 +71,11 @@ func (s *GB28181MediaServer) Start(listener net.Listener) (err error) { } func (s *GB28181MediaServer) Dispose() { s.disposeOnce.Do(func() { + + if s.conn != nil { + s.conn.conn.Close() + } + if s.listener != nil { s.listener.Close() s.listener = nil