Compare commits

..

3 Commits

Author SHA1 Message Date
lijun 7d55d68c90 接口查看设备是否在获取图像 2025-01-19 15:44:18 +08:00
lijun b00537b5ec release版本,输出每小时一次 2025-01-19 15:13:51 +08:00
lijun 2b3724a00a release版本,输出每小时一次 2025-01-18 21:14:21 +08:00
3 changed files with 40 additions and 8 deletions

View File

@ -102,6 +102,14 @@ func GetVideoStream(c *gin.Context) {
c.JSON(400, gin.H{"error": "key error"})
return
}
//查看设备是否在获取
isGetting := worker.GetRedis(fmt.Sprintf("device_%d_is_getting", deviceID))
if isGetting != "true" {
c.JSON(400, gin.H{"error": "device is not getting or not exist"})
log.Printf("stream device_id:%d is not getting or not exist", deviceID)
return
}
//设备流
c.Stream(func(w io.Writer) bool {
var count int
@ -120,8 +128,9 @@ func GetVideoStream(c *gin.Context) {
return false
}
cnt := service.GetDeviceCurrentFrameV2(&frame, deviceID)
if cnt == count {
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)
errCount++
continue
}
@ -185,6 +194,12 @@ func GetRealTimeImage(c *gin.Context) {
}
worker.SetRedisWithExpire(strconv.Itoa(int(device.ID))+"_is_play", "1", time.Minute*5)
log.Printf("device_id:%d has set is_play to 1", deviceIdInt)
isGetting = worker.GetRedis(fmt.Sprintf("device_%d_is_getting", device.ID))
if isGetting != "true" {
c.JSON(http.StatusOK, gin.H{"code": 5, "message": "device is not getting or not exist"})
log.Printf("device_id:%d is not getting or not exist", deviceIdInt)
return
}
go subscribeAndHandleMessagesV3(ws, deviceIdInt)
}
@ -203,6 +218,11 @@ func subscribeAndHandleMessagesV3(ws *websocket.Conn, device_id int) {
//从service获取当前帧
c := service.GetDeviceCurrentFrameV2(&img, device_id)
if c != count {
if c == -1 {
log.Printf("device:%d get frame err!", device_id)
worker.SetRedisSetRemove(online_conn_key, con_id)
break
}
//将img转[]byte
if img.Empty() {
log.Printf("device:%d img is empty! count = %d \n", device_id, c)

17
main.go
View File

@ -183,13 +183,16 @@ func JWTAuthMiddleware() gin.HandlerFunc {
if worker.IsContainSet("super_permission_tokens", tokenString) {
s_id := c.Request.Header.Get("super_id")
if s_id == "" {
c.AbortWithStatus(200)
c.JSON(200, gin.H{
"message": "NOT_LOGIN",
"error": "super_id is empty",
"code": 3,
})
return
s_id = c.Query("super_id")
if s_id == "" {
c.AbortWithStatus(200)
c.JSON(200, gin.H{
"message": "NOT_LOGIN",
"error": "super_id is empty",
"code": 3,
})
return
}
}
id, _ := strconv.Atoi(s_id)
//查看s_id类型

View File

@ -115,16 +115,25 @@ func GetDeviceCurrentFrameV2(frame *gocv.Mat, deviceId int) int {
if (*frame).Empty() {
*frame = gocv.NewMatWithSize(Device1CurrentFrame.Rows(), Device1CurrentFrame.Cols(), Device1CurrentFrame.Type())
}
if Device1CurrentFrame.Empty() {
return -1
}
Device1CurrentFrame.CopyTo(frame)
case 50:
if (*frame).Empty() {
*frame = gocv.NewMatWithSize(Device50CurrentFrame.Rows(), Device50CurrentFrame.Cols(), Device50CurrentFrame.Type())
}
if Device50CurrentFrame.Empty() {
return -1
}
Device50CurrentFrame.CopyTo(frame)
case 73:
if (*frame).Empty() {
*frame = gocv.NewMatWithSize(Device73CurrentFrame.Rows(), Device73CurrentFrame.Cols(), Device73CurrentFrame.Type())
}
if Device73CurrentFrame.Empty() {
return -1
}
Device73CurrentFrame.CopyTo(frame)
}