diff --git a/handler/device.go b/handler/device.go index 76eda44..4248b4b 100644 --- a/handler/device.go +++ b/handler/device.go @@ -361,6 +361,7 @@ func VideoFeed(c *gin.Context) { // 创建一个通道用于接收客户端连接关闭的信号 clientClosed := make(chan struct{}) + defer close(clientClosed) c.Stream(func(w io.Writer) bool { // 将读取 Redis 消息通道的逻辑放在这里,方便根据返回值控制循环 ch := pubSub.Channel() @@ -384,22 +385,22 @@ func VideoFeed(c *gin.Context) { _, err = w.Write([]byte("--frame\r\n")) if err != nil { fmt.Println("write video frame error:", err) - continue + return false } _, err = w.Write([]byte("Content-Type: image/jpeg\r\n\r\n")) if err != nil { fmt.Println("write video frame error:", err) - continue + return false } _, err = w.Write(buf) if err != nil { fmt.Println("write video frame error:", err) - continue + return false } _, err = w.Write([]byte("\r\n")) if err != nil { fmt.Println("write video frame error:", err) - continue + return false } case <-clientClosed: // 当接收到客户端关闭连接的信号,返回 false 停止发送视频流