添加实时查看视频功能ws接口
This commit is contained in:
parent
22d0bffdf3
commit
f626d89d30
|
|
@ -13,6 +13,7 @@ type User struct {
|
|||
Email string `gorm:"column:email"`
|
||||
Password string `gorm:"column:password"`
|
||||
Gender string `gorm:"column:gender"`
|
||||
Role string `gorm:"column:role"`
|
||||
CreateTime string `gorm:"column:create_time"`
|
||||
UpdateTime string `gorm:"column:update_time"`
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,11 +1,16 @@
|
|||
package handler
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/gorilla/websocket"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
"videoplayer/proto"
|
||||
"videoplayer/service"
|
||||
"videoplayer/worker"
|
||||
)
|
||||
|
||||
type DeviceAddReq struct {
|
||||
|
|
@ -199,3 +204,64 @@ func Restart(ip string) bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 接收及发送消息
|
||||
func GetRealTimeImage(c *gin.Context) {
|
||||
id, _ := c.Get("id")
|
||||
id1 := int(id.(float64))
|
||||
device_id := c.Query("device_id")
|
||||
//字符串转int
|
||||
device_id_int, _ := strconv.Atoi(device_id)
|
||||
device := service.GetDevice(device_id_int, id1)
|
||||
if device.ID == 0 {
|
||||
c.JSON(http.StatusOK, gin.H{"code": proto.DataNotFound, "message": "device not found"})
|
||||
return
|
||||
}
|
||||
//建立连接
|
||||
// 升级HTTP连接为WebSocket连接
|
||||
ws, err := upgrader.Upgrade(c.Writer, c.Request, nil)
|
||||
clients[ws] = true
|
||||
if err != nil {
|
||||
// log.Println(err)
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer ws.Close()
|
||||
worker.SetRedisWithExpire(strconv.Itoa(int(device.ID))+"_is_play", "1", time.Minute*5) //设置播放状态
|
||||
// 接收客户端消息并发送到指定用户
|
||||
|
||||
go func(ws *websocket.Conn, device_id int) {
|
||||
|
||||
}(ws, device_id_int)
|
||||
|
||||
for {
|
||||
if v := clients[ws]; v == true {
|
||||
res2 := worker.PopRedisListLeft(device_id + "_frames")
|
||||
var res3 []byte
|
||||
var msg proto.Message
|
||||
if res2 != "" {
|
||||
//若有消息则发送消息
|
||||
msg.Type = "img"
|
||||
msg.Msg = res2
|
||||
msg.From_user_id = id1
|
||||
res3, _ = json.Marshal(msg)
|
||||
} else {
|
||||
//若无消息则发送心跳包
|
||||
msg.Type = "check"
|
||||
msg.Msg = "check"
|
||||
msg.From_user_id = -1
|
||||
res3, _ = json.Marshal(msg)
|
||||
}
|
||||
err2 := ws.WriteMessage(websocket.TextMessage, res3)
|
||||
if err2 != nil {
|
||||
clientsMux.Lock()
|
||||
clients[ws] = false
|
||||
clientsMux.Unlock()
|
||||
//设置ws关闭状态信息
|
||||
worker.SetRedisWithExpire(strconv.Itoa(int(device.ID))+"_is_play", "0", time.Minute*5) //设置播放状态
|
||||
break
|
||||
}
|
||||
time.Sleep(time.Millisecond * 100) //设置延时100ms
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue