diff --git a/handler/tool.go b/handler/tool.go index b5306ea..5639bce 100644 --- a/handler/tool.go +++ b/handler/tool.go @@ -113,24 +113,25 @@ func GetVideoStream(c *gin.Context) { //设备流 c.Stream(func(w io.Writer) bool { var count int - frame := gocv.NewMat() - defer func() { - //关闭帧 - err4 := frame.Close() - if err4 != nil { - log.Printf("device:%d frame close err:%v", deviceID, err4) - } - }() + var frame gocv.Mat errCount := 0 for { if errCount > 10 { log.Printf("stream device:%d errCount > 10", deviceID) return false } + frame = gocv.NewMat() cnt := service.GetDeviceCurrentFrameV2(&frame, deviceID) + defer func() { + //关闭帧 + err4 := frame.Close() + if err4 != nil { + log.Printf("device:%d frame close err:%v", deviceID, err4) + } + }() if cnt == count || cnt == -1 { time.Sleep(50 * time.Millisecond) - log.Printf("stream device:%d ,cnt =%d,count=%d,errCount=%d", deviceID, cnt, count, errCount) + log.Printf("stream device:%d,cnt =%d,count=%d,errCount=%d", deviceID, cnt, count, errCount) errCount++ continue } @@ -146,6 +147,7 @@ func GetVideoStream(c *gin.Context) { log.Printf("stream img encode err:%v", err2) return false } + defer img.Close() frame_ := img.GetBytes() _, err = w.Write([]byte("--frame\r\nContent-Type: image/jpeg\r\n\r\n")) @@ -251,7 +253,7 @@ func subscribeAndHandleMessagesV3(ws *websocket.Conn, deviceId int) { buf.Close() t++ if t%50 == 0 { - log.Printf("device:%d send frame count:%d,img is closed", deviceId, c) + log.Printf("device:%d send frame count:%d,img and buf had been closed", deviceId, c) } } } else {