包结构整理;动态sql功能;

This commit is contained in:
madao
2024-12-06 02:29:11 +08:00
parent 8ee2b1eaa4
commit de872cc2c8
23 changed files with 590 additions and 214 deletions

View File

@@ -7,8 +7,9 @@ import (
_ "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/conf" // 必须先导入配置文件
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclientmanager"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/task"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web"
_ "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/register"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/task"
// "net/http"
// _ "net/http/pprof"

View File

@@ -8,8 +8,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/fileflvmanager/fileflvwriter"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
type FileFlvManager struct {
@@ -54,7 +55,7 @@ func NewFileFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
code: code,
codecs: codecs,
}
camera, err := models.CameraSelectOne(models.Camera{Code: code})
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
if err != nil {
logs.Error("query camera error : %v", err)
return ffm
@@ -120,7 +121,7 @@ func (ffm *FileFlvManager) StopWrite() {
}()
}
//Write extends to writer.Writer
// Write extends to writer.Writer
func (ffm *FileFlvManager) flvWrite() {
defer func() {
if r := recover(); r != nil {

View File

@@ -12,8 +12,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/flv"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
type IFileFlvManager interface {
@@ -80,7 +81,7 @@ func NewFileFlvWriter(
isStart: false,
ffm: ffm,
}
camera, err := models.CameraSelectOne(models.Camera{Code: code})
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
if err != nil {
logs.Error("query camera error : %v", err)
return ffw
@@ -162,7 +163,7 @@ func (ffw *FileFlvWriter) createFlvFile() error {
return nil
}
//Write extends to writer.Writer
// Write extends to writer.Writer
func (ffw *FileFlvWriter) flvWrite() {
defer func() {
if r := recover(); r != nil {

View File

@@ -9,8 +9,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/httpflvmanage/httpflvwriter"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
type HttpFlvManager struct {
@@ -54,7 +55,7 @@ func NewHttpFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
code: code,
codecs: codecs,
}
camera, err := models.CameraSelectOne(models.Camera{Code: code})
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
if err != nil {
logs.Error("query camera error : %v", err)
return hfm
@@ -92,7 +93,7 @@ func (hfm *HttpFlvManager) StopWrite() {
}()
}
//Write extends to writer.Writer
// Write extends to writer.Writer
func (hfm *HttpFlvManager) flvWrite() {
defer func() {
if r := recover(); r != nil {
@@ -114,7 +115,7 @@ func (hfm *HttpFlvManager) flvWrite() {
}
}
//添加播放者
// 添加播放者
func (hfm *HttpFlvManager) AddHttpFlvPlayer(
playerDone <-chan int,
pulseInterval time.Duration,

View File

@@ -8,8 +8,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/flv"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
type IHttpFlvManager interface {
@@ -81,7 +82,7 @@ func NewHttpFlvWriter(
start: false,
}
camera, err := models.CameraSelectOne(models.Camera{Code: code})
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
if err != nil {
logs.Error("query camera error : %v", err)
return hfw
@@ -191,7 +192,7 @@ func (hfw *HttpFlvWriter) writerPacket(pkt av.Packet, templateTime *time.Time) e
return nil
}
//Write extends to io.Writer
// Write extends to io.Writer
func (hfw *HttpFlvWriter) Write(p []byte) (n int, err error) {
// start := time.Now()
defer func() {

View File

@@ -7,8 +7,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/rtmp"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
type IRtmpFlvManager interface {
@@ -74,9 +75,9 @@ func (rfw *RtmpFlvWriter) StopWrite() {
}
func (rfw *RtmpFlvWriter) createConn() error {
var camera models.Camera
var camera entity.Camera
camera.Code = rfw.code
camera, err := models.CameraSelectOne(camera)
camera, err := service.CameraSelectOne(camera)
if err != nil {
logs.Error("not found camera : %s", rfw.code)
return err
@@ -91,7 +92,7 @@ func (rfw *RtmpFlvWriter) createConn() error {
return nil
}
//Write extends to writer.Writer
// Write extends to writer.Writer
func (rfw *RtmpFlvWriter) flvWrite() {
defer func() {
if r := recover(); r != nil {
@@ -99,9 +100,9 @@ func (rfw *RtmpFlvWriter) flvWrite() {
}
}()
var camera models.Camera
var camera entity.Camera
camera.Code = rfw.code
camera, err := models.CameraSelectOne(camera)
camera, err := service.CameraSelectOne(camera)
if err != nil {
logs.Error("not found camera : %s", rfw.code)
return

View File

@@ -1,103 +0,0 @@
package models
import (
"time"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
)
type Camera struct {
Id string `orm:"pk;column(id)" json:"id"`
Code string `orm:"column(code)" json:"code"`
RtspURL string `orm:"column(rtsp_url)" json:"rtspURL"`
RtmpURL string `orm:"column(rtmp_url)" json:"rtmpURL"`
PlayAuthCode string `orm:"column(play_auth_code)" json:"playAuthCode"`
OnlineStatus int `orm:"column(online_status)" json:"onlineStatus"`
Enabled int `orm:"column(enabled)" json:"enabled"`
RtmpPushStatus int `orm:"column(rtmp_push_status)" json:"rtmpPushStatus"`
SaveVideo int `orm:"column(save_video)" json:"saveVideo"`
Live int `orm:"column(live)" json:"live"`
Created time.Time `orm:"column(created)" json:"created"`
}
func CameraInsert(e Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Insert(&e)
if err != nil && err != orm.ErrLastInsertIdUnavailable {
logs.Error("camera insert error : %v", err)
return i, err
}
return i, nil
}
func CameraDelete(e Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Delete(&e)
if err != nil {
logs.Error("camera delete error : %v", err)
return 0, err
}
return i, nil
}
func CameraUpdate(e Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Update(&e)
if err != nil {
logs.Error("camera update error : %v", err)
return 0, err
}
return i, nil
}
func CameraSelectById(id string) (e Camera, err error) {
o := orm.NewOrm()
e = Camera{Id: id}
err = o.Read(&e)
if err == orm.ErrNoRows {
logs.Error("查询不到")
return e, err
} else if err == orm.ErrMissPK {
logs.Error("找不到主键")
return e, err
} else if err != nil {
logs.Error("错误: %v", err)
return e, err
} else {
return e, nil
}
}
func CameraSelectOne(q Camera) (e Camera, err error) {
o := orm.NewOrm()
err = o.QueryTable(new(Camera)).Filter("code", q.Code).One(&e)
if err != nil {
logs.Error("查询出错:%v", err)
return e, err
}
return e, nil
}
func CameraCountByCode(code string) (count int64, err error) {
o := orm.NewOrm()
count, err = o.QueryTable(new(Camera)).Filter("code", code).Count()
if err != nil {
logs.Error("查询出错:%v", err)
return count, err
}
return count, nil
}
func CameraSelectAll() (es []Camera, err error) {
o := orm.NewOrm()
num, err := o.QueryTable(new(Camera)).All(&es)
if err != nil {
logs.Error("查询出错:%v", err)
return es, err
}
logs.Debug("查询到%d条记录", num)
return es, nil
}

View File

@@ -8,10 +8,11 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/rtspv2"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/controllers"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclient"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
var rcmInstance *RtspClientManager
@@ -75,7 +76,7 @@ func (s *RtspClientManager) startConnections() {
logs.Error("rtspManager panic %v", r)
}
}()
es, err := models.CameraSelectAll()
es, err := service.CameraSelectAll()
if err != nil {
logs.Error("camera list query error: %s", err)
return
@@ -84,7 +85,7 @@ func (s *RtspClientManager) startConnections() {
for {
timeNow := time.Now()
if timeNow.After(timeTemp.Add(30 * time.Second)) {
es, err = models.CameraSelectAll()
es, err = service.CameraSelectAll()
if err != nil {
logs.Error("camera list query error: %s", err)
return
@@ -117,8 +118,8 @@ func (s *RtspClientManager) connRtsp(code string) {
}()
//放置信息表示已经开始
s.rcs.Store(code, struct{}{})
q := models.Camera{Code: code}
c, err := models.CameraSelectOne(q)
q := entity.Camera{Code: code}
c, err := service.CameraSelectOne(q)
if err != nil {
logs.Error("find camera [%s] error : %v", code, err)
return
@@ -140,7 +141,7 @@ func (s *RtspClientManager) connRtsp(code string) {
logs.Error("camera [%s] conn : %v", c.Code, err)
c.OnlineStatus = 0
if c.OnlineStatus == 1 {
models.CameraUpdate(c)
service.CameraUpdate(c)
}
return
}
@@ -148,7 +149,7 @@ func (s *RtspClientManager) connRtsp(code string) {
// logs.Warn("camera: %s codecs: %v", code, session.CodecData)
c.OnlineStatus = 1
models.CameraUpdate(c)
service.CameraUpdate(c)
done := make(chan int)
//添加缓冲,缓解前后速率不一致问题,但是如果收包平均速率大于消费平均速率,依然会导致丢包
@@ -206,12 +207,12 @@ Loop:
}
//offline camera
camera, err := models.CameraSelectOne(q)
camera, err := service.CameraSelectOne(q)
if err != nil {
logs.Error("no camera error : %s", code)
} else {
camera.OnlineStatus = 0
models.CameraUpdate(camera)
service.CameraUpdate(camera)
}
logs.Error("camera: %s session Close", code)

View File

@@ -7,15 +7,16 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/gin-gonic/gin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
func CameraList(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
cameras, err := models.CameraSelectAll()
cameras, err := service.CameraSelectAll()
if err != nil {
logs.Error("no camera found : %v", err)
r.Code = 0
@@ -39,7 +40,7 @@ func CameraDetail(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
camera, err := models.CameraSelectById(cameraId)
camera, err := service.CameraSelectById(cameraId)
if err != nil {
logs.Error("no camera found : %v", err)
r.Code = 0
@@ -57,7 +58,7 @@ func CameraEdit(c *gin.Context) {
Code: 1,
Msg: "",
}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -69,7 +70,7 @@ func CameraEdit(c *gin.Context) {
if q.Id == "" || len(q.Id) == 0 {
id, _ := utils.UUID()
count, err := models.CameraCountByCode(q.Code)
count, err := service.CameraCountByCode(q.Code)
if err != nil {
logs.Error("check camera is exist error : %v", err)
r.Code = 0
@@ -88,7 +89,7 @@ func CameraEdit(c *gin.Context) {
q.Created = time.Now()
playAuthCode, _ := utils.UUID()
q.PlayAuthCode = playAuthCode
_, err = models.CameraInsert(q)
_, err = service.CameraInsert(q)
if err != nil {
logs.Error("camera insert error : %v", err)
r.Code = 0
@@ -99,7 +100,7 @@ func CameraEdit(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
count, err := models.CameraCountByCode(q.Code)
count, err := service.CameraCountByCode(q.Code)
if err != nil {
logs.Error("check camera is exist error : %v", err)
r.Code = 0
@@ -114,12 +115,12 @@ func CameraEdit(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
camera, _ := models.CameraSelectById(q.Id)
camera, _ := service.CameraSelectById(q.Id)
camera.Code = q.Code
camera.RtspURL = q.RtspURL
camera.RtmpURL = q.RtmpURL
// camera.Enabled = q.Enabled
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("camera insert error : %v", err)
r.Code = 0
@@ -140,8 +141,8 @@ func CameraDelete(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
camera := models.Camera{Id: id}
_, err := models.CameraDelete(camera)
camera := entity.Camera{Id: id}
_, err := service.CameraDelete(camera)
if err != nil {
logs.Error("delete camera error : %v", err)
@@ -162,7 +163,7 @@ func CameraDelete(c *gin.Context) {
func CameraEnabled(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -172,7 +173,7 @@ func CameraEnabled(c *gin.Context) {
return
}
camera, err := models.CameraSelectById(q.Id)
camera, err := service.CameraSelectById(q.Id)
if err != nil {
logs.Error("query camera error : %v", err)
r.Code = 0
@@ -184,7 +185,7 @@ func CameraEnabled(c *gin.Context) {
if q.Enabled != 1 {
camera.OnlineStatus = 0
}
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("enabled camera status %d error : %v", camera.Enabled, err)
r.Code = 0
@@ -206,7 +207,7 @@ func CameraEnabled(c *gin.Context) {
func RtmpPushChange(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -216,7 +217,7 @@ func RtmpPushChange(c *gin.Context) {
return
}
camera, err := models.CameraSelectById(q.Id)
camera, err := service.CameraSelectById(q.Id)
if err != nil {
logs.Error("query camera error : %v", err)
r.Code = 0
@@ -225,7 +226,7 @@ func RtmpPushChange(c *gin.Context) {
return
}
camera.RtmpPushStatus = q.RtmpPushStatus
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("RtmpPushEnabled camera status %d error : %v", camera.Enabled, err)
r.Code = 0
@@ -248,7 +249,7 @@ func RtmpPushChange(c *gin.Context) {
func CameraSaveVideoChange(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -258,7 +259,7 @@ func CameraSaveVideoChange(c *gin.Context) {
return
}
camera, err := models.CameraSelectById(q.Id)
camera, err := service.CameraSelectById(q.Id)
if err != nil {
logs.Error("query camera error : %v", err)
r.Code = 0
@@ -267,7 +268,7 @@ func CameraSaveVideoChange(c *gin.Context) {
return
}
camera.SaveVideo = q.SaveVideo
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("SaveVideo camera status %d error : %v", camera.SaveVideo, err)
r.Code = 0
@@ -290,7 +291,7 @@ func CameraSaveVideoChange(c *gin.Context) {
func CameraLiveChange(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -300,7 +301,7 @@ func CameraLiveChange(c *gin.Context) {
return
}
camera, err := models.CameraSelectById(q.Id)
camera, err := service.CameraSelectById(q.Id)
if err != nil {
logs.Error("query camera error : %v", err)
r.Code = 0
@@ -309,7 +310,7 @@ func CameraLiveChange(c *gin.Context) {
return
}
camera.Live = q.Live
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("Live camera status %d error : %v", camera.Live, err)
r.Code = 0
@@ -330,7 +331,7 @@ func CameraLiveChange(c *gin.Context) {
func CameraPlayAuthCodeReset(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.Camera{}
q := entity.Camera{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -340,7 +341,7 @@ func CameraPlayAuthCodeReset(c *gin.Context) {
return
}
camera, err := models.CameraSelectById(q.Id)
camera, err := service.CameraSelectById(q.Id)
if err != nil {
logs.Error("query camera error : %v", err)
r.Code = 0
@@ -350,7 +351,7 @@ func CameraPlayAuthCodeReset(c *gin.Context) {
}
playAuthCode, _ := utils.UUID()
camera.PlayAuthCode = playAuthCode
_, err = models.CameraUpdate(camera)
_, err = service.CameraUpdate(camera)
if err != nil {
logs.Error("PlayAuthCode camera status %d error : %v", camera.PlayAuthCode, err)
r.Code = 0

View File

@@ -6,9 +6,10 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/gin-gonic/gin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
func CameraShareList(c *gin.Context) {
@@ -22,7 +23,7 @@ func CameraShareList(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
cameraShares, err := models.CameraShareSelectByCameraId(cameraId)
cameraShares, err := service.CameraShareSelectByCameraId(cameraId)
if err != nil {
logs.Error("no camerashare found : %v", err)
r.Code = 0
@@ -41,7 +42,7 @@ func CameraShareEdit(c *gin.Context) {
Code: 1,
Msg: "",
}
q := models.CameraShare{}
q := entity.CameraShare{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -51,7 +52,7 @@ func CameraShareEdit(c *gin.Context) {
return
}
_, err = models.CameraSelectById(q.CameraId)
_, err = service.CameraSelectById(q.CameraId)
if err != nil {
logs.Error("not fount camera : %v", err)
r.Code = 0
@@ -66,7 +67,7 @@ func CameraShareEdit(c *gin.Context) {
q.Created = time.Now()
playAuthCode, _ := utils.UUID()
q.AuthCode = playAuthCode
_, err = models.CameraShareInsert(q)
_, err = service.CameraShareInsert(q)
if err != nil {
logs.Error("camerashare insert error : %v", err)
r.Code = 0
@@ -77,12 +78,12 @@ func CameraShareEdit(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
cameraShare, _ := models.CameraShareSelectById(q.Id)
cameraShare, _ := service.CameraShareSelectById(q.Id)
cameraShare.Name = q.Name
cameraShare.StartTime = q.StartTime
cameraShare.Deadline = q.Deadline
// camera.Enabled = q.Enabled
_, err = models.CameraShareUpdate(cameraShare)
_, err = service.CameraShareUpdate(cameraShare)
if err != nil {
logs.Error("camerashare insert error : %v", err)
r.Code = 0
@@ -103,8 +104,8 @@ func CameraShareDelete(c *gin.Context) {
c.JSON(http.StatusOK, r)
return
}
camera := models.CameraShare{Id: id}
_, err := models.CameraShareDelete(camera)
camera := entity.CameraShare{Id: id}
_, err := service.CameraShareDelete(camera)
if err != nil {
logs.Error("delete camerashare error : %v", err)
@@ -120,7 +121,7 @@ func CameraShareDelete(c *gin.Context) {
func CameraShareEnabled(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
r := result.Result{Code: 1, Msg: ""}
q := models.CameraShare{}
q := entity.CameraShare{}
err := c.BindJSON(&q)
if err != nil {
logs.Error("param error : %v", err)
@@ -130,7 +131,7 @@ func CameraShareEnabled(c *gin.Context) {
return
}
camera, err := models.CameraShareSelectById(q.Id)
camera, err := service.CameraShareSelectById(q.Id)
if err != nil {
logs.Error("query camerashare error : %v", err)
r.Code = 0
@@ -139,7 +140,7 @@ func CameraShareEnabled(c *gin.Context) {
return
}
camera.Enabled = q.Enabled
_, err = models.CameraShareUpdate(camera)
_, err = service.CameraShareUpdate(camera)
if err != nil {
logs.Error("enabled camerashare status %d error : %v", camera.Enabled, err)
r.Code = 0

View File

@@ -9,8 +9,9 @@ import (
"github.com/beego/beego/v2/core/logs"
"github.com/gin-gonic/gin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
func HttpFlvPlay(c *gin.Context) {
@@ -34,8 +35,8 @@ func HttpFlvPlay(c *gin.Context) {
Code: 1,
Msg: "",
}
q := models.Camera{Code: code}
camera, err := models.CameraSelectOne(q)
q := entity.Camera{Code: code}
camera, err := service.CameraSelectOne(q)
if err != nil {
logs.Error("camera query error : %v", err)
r.Code = 0
@@ -51,8 +52,8 @@ func HttpFlvPlay(c *gin.Context) {
return
}
if method == "temp" {
csq := models.CameraShare{CameraId: camera.Id, AuthCode: authCode}
cs, err := models.CameraShareSelectOne(csq)
csq := entity.CameraShare{CameraId: camera.Id, AuthCode: authCode}
cs, err := service.CameraShareSelectOne(csq)
if err != nil {
logs.Error("CameraShareSelectOne error : %v", err)
r.Code = 0

View File

@@ -0,0 +1,20 @@
package entity
import (
"time"
)
type Camera struct {
Id string `orm:"pk;column(id)" json:"id"`
Code string `orm:"column(code)" json:"code"`
RtspURL string `orm:"column(rtsp_url)" json:"rtspURL"`
RtmpURL string `orm:"column(rtmp_url)" json:"rtmpURL"`
PlayAuthCode string `orm:"column(play_auth_code)" json:"playAuthCode"`
OnlineStatus int `orm:"column(online_status)" json:"onlineStatus"`
Enabled int `orm:"column(enabled)" json:"enabled"`
RtmpPushStatus int `orm:"column(rtmp_push_status)" json:"rtmpPushStatus"`
SaveVideo int `orm:"column(save_video)" json:"saveVideo"`
Live int `orm:"column(live)" json:"live"`
Created time.Time `orm:"column(created)" json:"created"`
CameraShares []CameraShare `orm:"-" json:"cameraShares"`
}

View File

@@ -0,0 +1,17 @@
package entity
import (
"time"
)
type CameraShare struct {
Id string `orm:"pk;column(id)" json:"id"`
Name string `orm:"column(name)" json:"name"`
AuthCode string `orm:"column(auth_code)" json:"authCode"`
Enabled int `orm:"column(enabled)" json:"enabled"`
Created time.Time `orm:"column(created)" json:"created"`
StartTime time.Time `orm:"column(start_time)" json:"startTime"`
Deadline time.Time `orm:"column(deadline)" json:"deadline"`
CameraId string `orm:"column(camera_id)" json:"cameraId"`
Camera Camera `orm:"-" json:"camera"`
}

View File

@@ -1,9 +1,10 @@
package models
package register
import (
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/core/logs"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
_ "github.com/lib/pq"
)
@@ -38,6 +39,6 @@ func init() {
func init() {
// 需要在init中注册定义的model
orm.RegisterModel(new(Camera))
orm.RegisterModel(new(CameraShare))
orm.RegisterModel(new(entity.Camera))
orm.RegisterModel(new(entity.CameraShare))
}

View File

@@ -0,0 +1,5 @@
package dyn_query
type DynQuery interface {
BuildSql(selectStatement SelectStatement) (string, error)
}

View File

@@ -0,0 +1,207 @@
package dyn_query
import (
"fmt"
"strings"
)
type DynQueryMysql struct {
}
func (dynQueryMysql *DynQueryMysql) BuildSql(selectStatement SelectStatement) (sqlStr string, err error) {
if len(selectStatement.From) == 0 {
err = fmt.Errorf("from is empty")
return
}
var tokens = make([]string, 0)
// select expr
var selectTokens = make([]string, 0)
if len(selectStatement.Selects) == 0 {
var mainTable = selectStatement.From[0]
selectTokens = append(selectTokens, "`"+mainTable.AliasName+"`.*")
} else {
for _, selectExpr := range selectStatement.Selects {
selectTokens = append(selectTokens, "`"+selectExpr.TableAliasName+"`.`"+selectExpr.ColumnName+"`")
}
}
tokens = append(tokens, "SELECT", strings.Join(selectTokens, ","))
// from expr
var fromTokens = make([]string, 0)
for _, tableRef := range selectStatement.From {
fromTokens = append(fromTokens, "`"+tableRef.TableName+"` `"+tableRef.AliasName+"`")
}
tokens = append(tokens, "FROM", strings.Join(fromTokens, ","))
// join expr
var fullJoinTokens = make([]string, 0)
if len(selectStatement.Join) > 0 {
for _, joinExpr := range selectStatement.Join {
var joinTokens = make([]string, 0)
if joinExpr.JoinType == InnerJoin {
joinTokens = append(joinTokens, "INNER JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
var conditions = joinExpr.On
conditionTokens, makeErr := makeConditionsToken(conditions)
if makeErr != nil {
err = fmt.Errorf("make inner join token error: %v", makeErr)
return
}
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
} else if joinExpr.JoinType == LeftJoin {
joinTokens = append(joinTokens, "LEFT JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
var conditions = joinExpr.On
conditionTokens, makeErr := makeConditionsToken(conditions)
if makeErr != nil {
err = fmt.Errorf("make left join token error: %v", makeErr)
return
}
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
} else if joinExpr.JoinType == RightJoin {
joinTokens = append(joinTokens, "RIGHT JION `"+joinExpr.TableName+"` `"+joinExpr.AliasName+"`")
var conditions = joinExpr.On
conditionTokens, makeErr := makeConditionsToken(conditions)
if makeErr != nil {
err = fmt.Errorf("make right join token error: %v", makeErr)
return
}
joinTokens = append(joinTokens, strings.Join(conditionTokens, " "))
} else {
err = fmt.Errorf("unsupport join: %d", joinExpr.JoinType)
return
}
fullJoinTokens = append(fullJoinTokens, strings.Join(joinTokens, " "))
}
}
tokens = append(tokens, strings.Join(fullJoinTokens, " "))
// where expr
var whereTokens = make([]string, 0)
if len(selectStatement.SqlWhere) > 0 {
var conditions = selectStatement.SqlWhere
conditionTokens, makeErr := makeConditionsToken(conditions)
if makeErr != nil {
err = fmt.Errorf("make where token error: %v", makeErr)
return
}
whereTokens = append(whereTokens, strings.Join(conditionTokens, " "))
tokens = append(tokens, "WHERE", strings.Join(whereTokens, " "))
}
// having expr
var havingTokens = make([]string, 0)
if len(selectStatement.Having) > 0 {
var conditions = selectStatement.Having
conditionTokens, makeErr := makeConditionsToken(conditions)
if makeErr != nil {
err = fmt.Errorf("make having token error: %v", makeErr)
return
}
havingTokens = append(havingTokens, strings.Join(conditionTokens, " "))
tokens = append(tokens, "HAVING", strings.Join(havingTokens, " "))
}
// order expr
var orderTokens = make([]string, 0)
if len(selectStatement.Orders) > 0 {
for _, orderExpr := range selectStatement.Orders {
if orderExpr.OrderType == ASC {
orderTokens = append(orderTokens, "`"+orderExpr.TableAliasName+"`.`"+orderExpr.ColumnName+"` ASC")
} else if orderExpr.OrderType == DESC {
orderTokens = append(orderTokens, "`"+orderExpr.TableAliasName+"`.`"+orderExpr.ColumnName+"` DESC")
} else {
err = fmt.Errorf("unsupport OrderType: %d", orderExpr.OrderType)
return
}
}
tokens = append(tokens, "ORDER BY", strings.Join(orderTokens, ","))
}
sqlStr = strings.Join(tokens, " ")
return
}
func makeConditionsToken(conditionExprs []ConditionExpression) (conditionTokens []string, err error) {
conditionTokens = make([]string, 0)
if len(conditionExprs) > 0 {
for _, conditionExpr := range conditionExprs {
var logicCode = "AND"
if conditionExpr.ConditionType == OR {
logicCode = "OR"
}
var andTokens = make([]string, 0)
if len(conditionExpr.SimpleExprs) > 0 {
for _, simpleExpr := range conditionExpr.SimpleExprs {
var simpleExprTokens = make([]string, 0)
simpleExprTokens = append(simpleExprTokens, "`"+simpleExpr.TableAliasName+"` `"+simpleExpr.ColumnName+"`")
if simpleExpr.ExprType == IsNull {
simpleExprTokens = append(simpleExprTokens, "IS NULL")
} else if simpleExpr.ExprType == NotNull {
simpleExprTokens = append(simpleExprTokens, "NOT NULL")
} else if simpleExpr.ExprType == Like {
simpleExprTokens = append(simpleExprTokens, "LIKE", "'%"+simpleExpr.Values[0]+"%'")
} else if simpleExpr.ExprType == LeftLike {
simpleExprTokens = append(simpleExprTokens, "LIKE", "'%"+simpleExpr.Values[0]+"'")
} else if simpleExpr.ExprType == RightJoin {
simpleExprTokens = append(simpleExprTokens, "LIKE", "'"+simpleExpr.Values[0]+"%'")
} else if simpleExpr.ExprType == Equal {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "=", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, "=", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == NotEqual {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "!=", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, "!=", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == GT {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, ">", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, ">", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == GTE {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, ">=", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, ">=", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == LT {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "<", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, "<", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == LTE {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "<=", "'"+simpleExpr.Values[0]+"'")
} else {
simpleExprTokens = append(simpleExprTokens, "<=", simpleExpr.Values[0])
}
} else if simpleExpr.ExprType == In {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "IN(", "'"+strings.Join(simpleExpr.Values, "','")+"')")
} else {
simpleExprTokens = append(simpleExprTokens, "IN(", strings.Join(simpleExpr.Values, ","), ")")
}
} else if simpleExpr.ExprType == NotIn {
if simpleExpr.ValueType == String {
simpleExprTokens = append(simpleExprTokens, "NOT IN(", "'"+strings.Join(simpleExpr.Values, "','")+"')")
} else {
simpleExprTokens = append(simpleExprTokens, "NOT IN(", strings.Join(simpleExpr.Values, ","), ")")
}
} else {
err = fmt.Errorf("unsupport expr type: %d", simpleExpr.ExprType)
return
}
andTokens = append(andTokens, strings.Join(simpleExprTokens, " "))
}
}
conditionTokens = append(conditionTokens, strings.Join(andTokens, logicCode))
}
}
return
}

View File

@@ -0,0 +1,126 @@
package dyn_query
type SelectStatement struct {
Selects []SelectExpr
From []TableRef
Join []JoinExpr
SqlWhere []ConditionExpression
Having []ConditionExpression
Orders []OrderExpr
}
type SelectExpr = ColumnRef
type ColumnRef struct {
TableAliasName string
ColumnName string
}
type TableRef struct {
AliasName string
TableName string
}
type JoinExpr struct {
JoinType EJoinType
TableRef
On []ConditionExpression
}
type ConditionExpression struct {
ConditionType EConditionType
SimpleExprs []SimpleExpr
}
type SimpleExpr struct {
ExprType EExprType
ColumnRef
ValueType EValueType
Values []string
}
type OrderExpr struct {
OrderType EOrderType
ColumnRef
}
type EValueType = uint32
const (
String = iota
Number
)
type EOrderType = uint32
const (
ASC = iota
DESC
)
type EExprType uint32
const (
IsNull = iota
NotNull
Like
LeftLike
RightLike
Equal
NotEqual
GTE
GT
LT
LTE
In
NotIn
)
type EConditionType uint32
const (
AND = iota
OR
)
type EJoinType uint32
const (
InnerJoin = iota
LeftJoin
RightJoin
)
func StartBuild() *SelectStatement {
return new(SelectStatement)
}
func (selectStatemet *SelectStatement) BuildSelect(selectExprs ...SelectExpr) *SelectStatement {
selectStatemet.Selects = append(selectStatemet.Selects, selectExprs...)
return selectStatemet
}
func (selectStatemet *SelectStatement) BuildFrom(tableRefs ...TableRef) *SelectStatement {
selectStatemet.From = append(selectStatemet.From, tableRefs...)
return selectStatemet
}
func (selectStatemet *SelectStatement) BuildJoin(joinExprs ...JoinExpr) *SelectStatement {
selectStatemet.Join = append(selectStatemet.Join, joinExprs...)
return selectStatemet
}
func (selectStatemet *SelectStatement) BuildWhere(conditions ...ConditionExpression) *SelectStatement {
selectStatemet.SqlWhere = append(selectStatemet.SqlWhere, conditions...)
return selectStatemet
}
func (selectStatemet *SelectStatement) BuildHaving(conditions ...ConditionExpression) *SelectStatement {
selectStatemet.Having = append(selectStatemet.Having, conditions...)
return selectStatemet
}
func (selectStatemet *SelectStatement) BuildOrder(orders ...OrderExpr) *SelectStatement {
selectStatemet.Orders = append(selectStatemet.Orders, orders...)
return selectStatemet
}

View File

@@ -0,0 +1,105 @@
package service
import (
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
)
func CameraInsert(e entity.Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Insert(&e)
if err != nil && err != orm.ErrLastInsertIdUnavailable {
logs.Error("camera insert error : %v", err)
return i, err
}
return i, nil
}
func CameraDelete(e entity.Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Delete(&e)
if err != nil {
logs.Error("camera delete error : %v", err)
return 0, err
}
return i, nil
}
func CameraUpdate(e entity.Camera) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Update(&e)
if err != nil {
logs.Error("camera update error : %v", err)
return 0, err
}
return i, nil
}
func CameraSelectById(id string) (e entity.Camera, err error) {
o := orm.NewOrm()
e = entity.Camera{Id: id}
err = o.Read(&e)
if err == orm.ErrNoRows {
logs.Error("查询不到")
return e, err
} else if err == orm.ErrMissPK {
logs.Error("找不到主键")
return e, err
} else if err != nil {
logs.Error("错误: %v", err)
return e, err
} else {
return e, nil
}
}
func CameraSelectOne(q entity.Camera) (e entity.Camera, err error) {
o := orm.NewOrm()
err = o.QueryTable(new(entity.Camera)).Filter("code", q.Code).One(&e)
if err != nil {
logs.Error("查询出错:%v", err)
return e, err
}
return e, nil
}
func CameraCountByCode(code string) (count int64, err error) {
o := orm.NewOrm()
count, err = o.QueryTable(new(entity.Camera)).Filter("code", code).Count()
if err != nil {
logs.Error("查询出错:%v", err)
return count, err
}
return count, nil
}
func CameraSelectAll() (es []entity.Camera, err error) {
o := orm.NewOrm()
// num, err := o.QueryTable(new(entity.Camera)).All(&es)
qb, _ := orm.NewQueryBuilder("postgres")
// Construct query object
qb.Select("*").
From("camera").
LeftJoin("camera_share").On("camera_share.camera_id = camera.id").
Where("camera.code like ?").
// OrderBy("camera.id").Desc().
Limit(1000).Offset(0)
// export raw query string from QueryBuilder object
sql := qb.String()
// execute the raw query string
o.Raw(sql, "%%").QueryRows(&es)
if err != nil {
logs.Error("查询出错:%v", err)
return es, err
}
logs.Debug("查询到%d条记录", 20)
return es, nil
}

View File

@@ -1,24 +1,12 @@
package models
package service
import (
"time"
"github.com/beego/beego/v2/client/orm"
"github.com/beego/beego/v2/core/logs"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
)
type CameraShare struct {
Id string `orm:"pk;column(id)" json:"id"`
CameraId string `orm:"column(camera_id)" json:"cameraId"`
Name string `orm:"column(name)" json:"name"`
AuthCode string `orm:"column(auth_code)" json:"authCode"`
Enabled int `orm:"column(enabled)" json:"enabled"`
Created time.Time `orm:"column(created)" json:"created"`
StartTime time.Time `orm:"column(start_time)" json:"startTime"`
Deadline time.Time `orm:"column(deadline)" json:"deadline"`
}
func CameraShareInsert(e CameraShare) (i int64, err error) {
func CameraShareInsert(e entity.CameraShare) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Insert(&e)
if err != nil && err != orm.ErrLastInsertIdUnavailable {
@@ -28,7 +16,7 @@ func CameraShareInsert(e CameraShare) (i int64, err error) {
return i, nil
}
func CameraShareDelete(e CameraShare) (i int64, err error) {
func CameraShareDelete(e entity.CameraShare) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Delete(&e)
if err != nil {
@@ -38,7 +26,7 @@ func CameraShareDelete(e CameraShare) (i int64, err error) {
return i, nil
}
func CameraShareUpdate(e CameraShare) (i int64, err error) {
func CameraShareUpdate(e entity.CameraShare) (i int64, err error) {
o := orm.NewOrm()
i, err = o.Update(&e)
if err != nil {
@@ -48,9 +36,9 @@ func CameraShareUpdate(e CameraShare) (i int64, err error) {
return i, nil
}
func CameraShareSelectById(id string) (e CameraShare, err error) {
func CameraShareSelectById(id string) (e entity.CameraShare, err error) {
o := orm.NewOrm()
e = CameraShare{Id: id}
e = entity.CameraShare{Id: id}
err = o.Read(&e)
@@ -68,9 +56,9 @@ func CameraShareSelectById(id string) (e CameraShare, err error) {
}
}
func CameraShareSelectOne(q CameraShare) (e CameraShare, err error) {
func CameraShareSelectOne(q entity.CameraShare) (e entity.CameraShare, err error) {
o := orm.NewOrm()
err = o.QueryTable(new(CameraShare)).Filter("CameraId", q.CameraId).Filter("AuthCode", q.AuthCode).One(&e)
err = o.QueryTable(new(entity.CameraShare)).Filter("CameraId", q.CameraId).Filter("AuthCode", q.AuthCode).One(&e)
if err != nil {
logs.Error("查询出错:%v", err)
return e, err
@@ -80,7 +68,7 @@ func CameraShareSelectOne(q CameraShare) (e CameraShare, err error) {
func CameraShareCountByCode(code string) (count int64, err error) {
o := orm.NewOrm()
count, err = o.QueryTable(new(CameraShare)).Filter("code", code).Count()
count, err = o.QueryTable(new(entity.CameraShare)).Filter("code", code).Count()
if err != nil {
logs.Error("查询出错:%v", err)
return count, err
@@ -88,9 +76,9 @@ func CameraShareCountByCode(code string) (count int64, err error) {
return count, nil
}
func CameraShareSelectAll() (es []CameraShare, err error) {
func CameraShareSelectAll() (es []entity.CameraShare, err error) {
o := orm.NewOrm()
num, err := o.QueryTable(new(CameraShare)).All(&es)
num, err := o.QueryTable(new(entity.CameraShare)).All(&es)
if err != nil {
logs.Error("查询出错:%v", err)
return es, err
@@ -99,9 +87,9 @@ func CameraShareSelectAll() (es []CameraShare, err error) {
return es, nil
}
func CameraShareSelectByCameraId(cameraId string) (es []CameraShare, err error) {
func CameraShareSelectByCameraId(cameraId string) (es []entity.CameraShare, err error) {
o := orm.NewOrm()
num, err := o.QueryTable(new(CameraShare)).Filter("CameraId", cameraId).All(&es)
num, err := o.QueryTable(new(entity.CameraShare)).Filter("CameraId", cameraId).All(&es)
if err != nil {
logs.Error("查询出错:%v", err)
return es, err

View File

@@ -5,9 +5,9 @@ import (
"time"
"github.com/beego/beego/v2/core/logs"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/models"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclientmanager"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
)
var taskInstance *task
@@ -47,7 +47,7 @@ func (t *task) offlineCamera() {
}
}()
for {
css, err := models.CameraSelectAll()
css, err := service.CameraSelectAll()
if err != nil {
logs.Error("query camera error : %v", err)
}
@@ -57,7 +57,7 @@ func (t *task) offlineCamera() {
}
if exists := rtspclientmanager.GetSingleRtspClientManager().ExistsPublisher(cs.Code); !exists {
cs.OnlineStatus = 0
models.CameraUpdate(cs)
service.CameraUpdate(cs)
}
}
<-time.After(10 * time.Minute)

View File

@@ -11,9 +11,9 @@ import (
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/core/logs"
"github.com/gin-gonic/gin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/controllers"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/result"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/result"
)
var tokens sync.Map
@@ -124,7 +124,7 @@ func Cors() gin.HandlerFunc {
}
}
//验证token
// 验证token
func Validate() gin.HandlerFunc {
return func(c *gin.Context) {
if c.Request.URL.Path == "/system/login" || strings.HasPrefix(c.Request.URL.Path, "/live/") ||