diff --git a/handler/tool.go b/handler/tool.go index cebb750..e1f55ee 100644 --- a/handler/tool.go +++ b/handler/tool.go @@ -34,7 +34,7 @@ func SetUpToolGroup(router *gin.Engine) { } // 跨域访问:cross origin resource share -func CrosHandler() gin.HandlerFunc { +func CorsHandler() gin.HandlerFunc { return func(context *gin.Context) { //method := context.Request.Method context.Writer.Header().Set("Access-Control-Allow-Origin", "*") @@ -105,14 +105,31 @@ 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) + } + }() for { - frame, cnt := service.GetDeviceCurrentFrame(deviceID) + cnt := service.GetDeviceCurrentFrameV2(&frame, deviceID) if cnt == count { time.Sleep(50 * time.Millisecond) continue } + if frame.Empty() { + log.Printf("stream device:%d frame is empty", deviceID) + time.Sleep(100 * time.Millisecond) + continue + } //gocv.Matrix转为jpeg - img, err := gocv.IMEncode(".jpg", frame) + img, err2 := gocv.IMEncode(".jpg", frame) + if err2 != nil { + log.Printf("stream img encode err:%v", err2) + return false + } frame_ := img.GetBytes() _, err = w.Write([]byte("--frame\r\nContent-Type: image/jpeg\r\n\r\n")) diff --git a/main.go b/main.go index ec0aa5b..0636f90 100644 --- a/main.go +++ b/main.go @@ -35,7 +35,7 @@ func main() { if err0 != nil { panic("failed to connect redis:" + err0.Error()) } - r.Use(handler.CrosHandler()) + r.Use(handler.CorsHandler()) r.Use(JWTAuthMiddleware()) // 使用 JWT 认证中间件 handler.SetUpToolGroup(r) // Tool err := worker.InitRedis()