mirror of
https://github.com/hkmadao/rtsp2rtmp.git
synced 2025-09-26 19:31:19 +08:00
模板代码改造
This commit is contained in:
@@ -9,8 +9,8 @@ import (
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/fileflvmanager/fileflvwriter"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
type FileFlvManager struct {
|
||||
@@ -55,7 +55,8 @@ func NewFileFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
|
||||
code: code,
|
||||
codecs: codecs,
|
||||
}
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
condition := common.GetEqualCondition("code", code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return ffm
|
||||
|
@@ -13,8 +13,8 @@ import (
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/flv"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
type IFileFlvManager interface {
|
||||
@@ -81,7 +81,8 @@ func NewFileFlvWriter(
|
||||
isStart: false,
|
||||
ffm: ffm,
|
||||
}
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
condition := common.GetEqualCondition("code", code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return ffw
|
||||
|
@@ -10,8 +10,8 @@ import (
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/httpflvmanage/httpflvwriter"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
type HttpFlvManager struct {
|
||||
@@ -55,7 +55,8 @@ func NewHttpFlvManager(pktStream <-chan av.Packet, code string, codecs []av.Code
|
||||
code: code,
|
||||
codecs: codecs,
|
||||
}
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
condition := common.GetEqualCondition("code", code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return hfm
|
||||
|
@@ -9,8 +9,8 @@ import (
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/flv"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
type IHttpFlvManager interface {
|
||||
@@ -82,7 +82,8 @@ func NewHttpFlvWriter(
|
||||
start: false,
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectOne(entity.Camera{Code: code})
|
||||
condition := common.GetEqualCondition("code", code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
return hfw
|
||||
|
@@ -8,8 +8,8 @@ import (
|
||||
"github.com/deepch/vdk/av"
|
||||
"github.com/deepch/vdk/format/rtmp"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
type IRtmpFlvManager interface {
|
||||
@@ -75,9 +75,8 @@ func (rfw *RtmpFlvWriter) StopWrite() {
|
||||
}
|
||||
|
||||
func (rfw *RtmpFlvWriter) createConn() error {
|
||||
var camera entity.Camera
|
||||
camera.Code = rfw.code
|
||||
camera, err := service.CameraSelectOne(camera)
|
||||
condition := common.GetEqualCondition("code", rfw.code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("not found camera : %s", rfw.code)
|
||||
return err
|
||||
@@ -100,9 +99,8 @@ func (rfw *RtmpFlvWriter) flvWrite() {
|
||||
}
|
||||
}()
|
||||
|
||||
var camera entity.Camera
|
||||
camera.Code = rfw.code
|
||||
camera, err := service.CameraSelectOne(camera)
|
||||
condition := common.GetEqualCondition("code", rfw.code)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("not found camera : %s", rfw.code)
|
||||
return
|
||||
|
@@ -10,9 +10,9 @@ import (
|
||||
"github.com/deepch/vdk/format/rtspv2"
|
||||
"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"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
ext_controller "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers/ext"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
var rcmInstance *RtspClientManager
|
||||
@@ -32,7 +32,7 @@ func GetSingleRtspClientManager() *RtspClientManager {
|
||||
|
||||
func (rs *RtspClientManager) StartClient() {
|
||||
go rs.startConnections()
|
||||
go rs.stopConn(controllers.CodeStream())
|
||||
go rs.stopConn(ext_controller.CodeStream())
|
||||
}
|
||||
|
||||
func (rc *RtspClientManager) ExistsPublisher(code string) bool {
|
||||
@@ -76,7 +76,8 @@ func (s *RtspClientManager) startConnections() {
|
||||
logs.Error("rtspManager panic %v", r)
|
||||
}
|
||||
}()
|
||||
es, err := service.CameraSelectAll()
|
||||
condition := common.GetEmptyCondition()
|
||||
es, err := base_service.CameraFindCollectionByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("camera list query error: %s", err)
|
||||
return
|
||||
@@ -85,7 +86,8 @@ func (s *RtspClientManager) startConnections() {
|
||||
for {
|
||||
timeNow := time.Now()
|
||||
if timeNow.After(timeTemp.Add(30 * time.Second)) {
|
||||
es, err = service.CameraSelectAll()
|
||||
condition := common.GetEmptyCondition()
|
||||
es, err = base_service.CameraFindCollectionByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("camera list query error: %s", err)
|
||||
return
|
||||
@@ -118,8 +120,8 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
}()
|
||||
//放置信息表示已经开始
|
||||
s.rcs.Store(code, struct{}{})
|
||||
q := entity.Camera{Code: code}
|
||||
c, err := service.CameraSelectOne(q)
|
||||
condition := common.GetEqualCondition("code", code)
|
||||
c, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("find camera [%s] error : %v", code, err)
|
||||
return
|
||||
@@ -141,7 +143,7 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
logs.Error("camera [%s] conn : %v", c.Code, err)
|
||||
c.OnlineStatus = 0
|
||||
if c.OnlineStatus == 1 {
|
||||
service.CameraUpdate(c)
|
||||
base_service.CameraUpdateById(c)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -149,7 +151,7 @@ func (s *RtspClientManager) connRtsp(code string) {
|
||||
// logs.Warn("camera: %s codecs: %v", code, session.CodecData)
|
||||
|
||||
c.OnlineStatus = 1
|
||||
service.CameraUpdate(c)
|
||||
base_service.CameraUpdateById(c)
|
||||
|
||||
done := make(chan int)
|
||||
//添加缓冲,缓解前后速率不一致问题,但是如果收包平均速率大于消费平均速率,依然会导致丢包
|
||||
@@ -207,12 +209,12 @@ Loop:
|
||||
}
|
||||
|
||||
//offline camera
|
||||
camera, err := service.CameraSelectOne(q)
|
||||
camera, err := base_service.CameraFindOneByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("no camera error : %s", code)
|
||||
} else {
|
||||
camera.OnlineStatus = 0
|
||||
service.CameraUpdate(camera)
|
||||
base_service.CameraUpdateById(camera)
|
||||
}
|
||||
|
||||
logs.Error("camera: %s session Close", code)
|
||||
|
@@ -1,5 +1,10 @@
|
||||
package common
|
||||
|
||||
func GetEmptyCondition() (condition AqCondition) {
|
||||
condition = AqCondition{}
|
||||
return
|
||||
}
|
||||
|
||||
func GetEqualCondition(fieldName string, value interface{}) (condition AqCondition) {
|
||||
filterNode := AqFilterNode{}
|
||||
filterNode.OperatorCode = OPERATOR_CODE_EQUAL
|
||||
@@ -25,3 +30,25 @@ func GetInCondition(fieldName string, values []interface{}) (condition AqConditi
|
||||
condition = AqCondition{LogicNode: &logicNode}
|
||||
return
|
||||
}
|
||||
|
||||
type EqualFilter struct {
|
||||
Name string
|
||||
Value interface{}
|
||||
}
|
||||
|
||||
func GetEqualConditions(equalFilters []EqualFilter) (condition AqCondition) {
|
||||
var filters = []AqFilterNode{}
|
||||
for _, equalFilter := range equalFilters {
|
||||
filterNode := AqFilterNode{}
|
||||
filterNode.OperatorCode = OPERATOR_CODE_EQUAL
|
||||
filterNode.Name = equalFilter.Name
|
||||
filterNode.FilterParams = []interface{}{equalFilter.Value}
|
||||
filters = append(filters, filterNode)
|
||||
}
|
||||
|
||||
logicNode := AqLogicNode{}
|
||||
logicNode.LogicOperatorCode = LOGIC_OPERATOR_CODE_AND
|
||||
logicNode.FilterNodes = filters
|
||||
condition = AqCondition{LogicNode: &logicNode}
|
||||
return
|
||||
}
|
||||
|
@@ -1,16 +1,5 @@
|
||||
package common
|
||||
|
||||
type Page struct {
|
||||
Total int `json:"total"`
|
||||
Page interface{} `json:"page"`
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
Code int `json:"code"`
|
||||
Msg string `json:"msg"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
type AppResult struct {
|
||||
Status uint32 `json:"status"`
|
||||
Message string `json:"message"`
|
||||
|
@@ -1,373 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"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/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func CameraList(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
cameras, err := service.CameraSelectAll()
|
||||
if err != nil {
|
||||
logs.Error("no camera found : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "no camera found"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
page := common.Page{Total: len(cameras), Page: cameras}
|
||||
r.Data = page
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraDetail(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
cameraId := c.Query("id")
|
||||
if cameraId == "" {
|
||||
logs.Error("no cameraId found")
|
||||
r.Code = 0
|
||||
r.Msg = "no cameraId found"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera, err := service.CameraSelectById(cameraId)
|
||||
if err != nil {
|
||||
logs.Error("no camera found : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "no camera found"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
r.Data = camera
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraEdit(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
if q.Id == "" || len(q.Id) == 0 {
|
||||
id, _ := utils.UUID()
|
||||
count, err := service.CameraCountByCode(q.Code)
|
||||
if err != nil {
|
||||
logs.Error("check camera is exist error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "check camera is exist"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
if count > 0 {
|
||||
logs.Error("camera code is exist error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camera code is exist"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
q.Id = id
|
||||
q.Created = time.Now()
|
||||
playAuthCode, _ := utils.UUID()
|
||||
q.PlayAuthCode = playAuthCode
|
||||
_, err = service.CameraInsert(q)
|
||||
if err != nil {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camera insert error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
count, err := service.CameraCountByCode(q.Code)
|
||||
if err != nil {
|
||||
logs.Error("check camera is exist error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "check camera is exist"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
if count > 1 {
|
||||
logs.Error("camera code is exist error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camera code is exist"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera, _ := service.CameraSelectById(q.Id)
|
||||
camera.Code = q.Code
|
||||
camera.RtspUrl = q.RtspUrl
|
||||
camera.RtmpUrl = q.RtmpUrl
|
||||
// camera.Enabled = q.Enabled
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("camera insert error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camera insert error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraDelete(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
id, b := c.Params.Get("id")
|
||||
if !b {
|
||||
r.Code = 0
|
||||
r.Msg = "id is null"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera := entity.Camera{Id: id}
|
||||
_, err := service.CameraDelete(camera)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("delete camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "delete camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
//close camera conn
|
||||
select {
|
||||
case codeStream <- camera.Code:
|
||||
case <-time.After(1 * time.Second):
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraEnabled(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera.Enabled = q.Enabled
|
||||
if q.Enabled != 1 {
|
||||
camera.OnlineStatus = 0
|
||||
}
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("enabled camera status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
||||
r.Msg = "enabled camera status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
if q.Enabled != 1 {
|
||||
logs.Debug("close camera conn: %s", camera.Code)
|
||||
select {
|
||||
case codeStream <- camera.Code:
|
||||
case <-time.After(1 * time.Second):
|
||||
}
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func RtmpPushChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera.RtmpPushStatus = q.RtmpPushStatus
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("RtmpPushEnabled camera status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
||||
r.Msg = "RtmpPushEnabled camera status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.RtmpPushStatus != 1:
|
||||
logs.Info("camera [%s] stop push rtmp", q.Code)
|
||||
flvadmin.GetSingleRtmpFlvAdmin().StopWrite(q.Code)
|
||||
case q.RtmpPushStatus == 1:
|
||||
flvadmin.GetSingleRtmpFlvAdmin().StartWrite(q.Code)
|
||||
logs.Info("camera [%s] start push rtmp", q.Code)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraSaveVideoChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera.SaveVideo = q.SaveVideo
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("SaveVideo camera status %d error : %v", camera.SaveVideo, err)
|
||||
r.Code = 0
|
||||
r.Msg = "SaveVideo camera status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.SaveVideo != 1:
|
||||
logs.Info("camera [%s] stop save video", q.Code)
|
||||
flvadmin.GetSingleFileFlvAdmin().StopWrite(q.Code)
|
||||
case q.SaveVideo == 1:
|
||||
flvadmin.GetSingleFileFlvAdmin().StartWrite(q.Code)
|
||||
logs.Info("camera [%s] start save video", q.Code)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraLiveChange(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera.Live = q.Live
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("Live camera status %d error : %v", camera.Live, err)
|
||||
r.Code = 0
|
||||
r.Msg = "Live camera status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.Live != 1:
|
||||
flvadmin.GetSingleHttpFlvAdmin().StopWrite(q.Code)
|
||||
case q.Live == 1:
|
||||
flvadmin.GetSingleHttpFlvAdmin().StartWrite(q.Code)
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraPlayAuthCodeReset(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.Camera{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camera error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
playAuthCode, _ := utils.UUID()
|
||||
camera.PlayAuthCode = playAuthCode
|
||||
_, err = service.CameraUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("PlayAuthCode camera status %d error : %v", camera.PlayAuthCode, err)
|
||||
r.Code = 0
|
||||
r.Msg = "PlayAuthCode camera status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
flvadmin.GetSingleHttpFlvAdmin().StopWrite(q.Code)
|
||||
flvadmin.GetSingleHttpFlvAdmin().StartWrite(q.Code)
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
var codeStream = make(chan string)
|
||||
|
||||
func CodeStream() <-chan string {
|
||||
return codeStream
|
||||
}
|
@@ -1,153 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func CameraShareList(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
cameraId := c.Query("cameraId")
|
||||
if cameraId == "" {
|
||||
logs.Error("no cameraId found")
|
||||
r.Code = 0
|
||||
r.Msg = "no cameraId found"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
cameraShares, err := service.CameraShareSelectByCameraId(cameraId)
|
||||
if err != nil {
|
||||
logs.Error("no camerashare found : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "no camerashare found"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
page := common.Page{Total: len(cameraShares), Page: cameraShares}
|
||||
r.Data = page
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraShareEdit(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := entity.CameraShare{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = service.CameraSelectById(q.CameraId)
|
||||
if err != nil {
|
||||
logs.Error("not fount camera : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "not fount camera"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
if q.Id == "" || len(q.Id) == 0 {
|
||||
id, _ := utils.UUID()
|
||||
q.Id = id
|
||||
q.Created = time.Now()
|
||||
playAuthCode, _ := utils.UUID()
|
||||
q.AuthCode = playAuthCode
|
||||
_, err = service.CameraShareInsert(q)
|
||||
if err != nil {
|
||||
logs.Error("camerashare insert error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camerashare insert error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
cameraShare, _ := service.CameraShareSelectById(q.Id)
|
||||
cameraShare.Name = q.Name
|
||||
cameraShare.StartTime = q.StartTime
|
||||
cameraShare.Deadline = q.Deadline
|
||||
// camera.Enabled = q.Enabled
|
||||
_, err = service.CameraShareUpdate(cameraShare)
|
||||
if err != nil {
|
||||
logs.Error("camerashare insert error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camerashare insert error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraShareDelete(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
id, b := c.Params.Get("id")
|
||||
if !b {
|
||||
r.Code = 0
|
||||
r.Msg = "id is null"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera := entity.CameraShare{Id: id}
|
||||
_, err := service.CameraShareDelete(camera)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("delete camerashare error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "delete camerashare error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
||||
|
||||
func CameraShareEnabled(c *gin.Context) {
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
r := common.Result{Code: 1, Msg: ""}
|
||||
q := entity.CameraShare{}
|
||||
err := c.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := service.CameraShareSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camerashare error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "query camerashare error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
camera.Enabled = q.Enabled
|
||||
_, err = service.CameraShareUpdate(camera)
|
||||
if err != nil {
|
||||
logs.Error("enabled camerashare status %d error : %v", camera.Enabled, err)
|
||||
r.Code = 0
|
||||
r.Msg = "enabled camerashare status %d error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, r)
|
||||
}
|
212
src/rtsp2rtmp/web/controllers/ext/camera.go
Normal file
212
src/rtsp2rtmp/web/controllers/ext/camera.go
Normal file
@@ -0,0 +1,212 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"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/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
bas_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
func CameraEnabled(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.Camera{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := bas_service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
camera.Enabled = q.Enabled
|
||||
if q.Enabled != 1 {
|
||||
camera.OnlineStatus = 0
|
||||
}
|
||||
_, err = bas_service.CameraUpdateById(camera)
|
||||
if err != nil {
|
||||
logs.Error("enabled camera status %d error : %v", camera.Enabled, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
if q.Enabled != 1 {
|
||||
logs.Debug("close camera conn: %s", camera.Code)
|
||||
select {
|
||||
case codeStream <- camera.Code:
|
||||
case <-time.After(1 * time.Second):
|
||||
}
|
||||
}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", camera)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
func RtmpPushChange(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.Camera{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := bas_service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
camera.RtmpPushStatus = q.RtmpPushStatus
|
||||
_, err = bas_service.CameraUpdateById(camera)
|
||||
if err != nil {
|
||||
logs.Error("RtmpPushEnabled camera status %d error : %v", camera.Enabled, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.RtmpPushStatus != 1:
|
||||
logs.Info("camera [%s] stop push rtmp", q.Code)
|
||||
flvadmin.GetSingleRtmpFlvAdmin().StopWrite(q.Code)
|
||||
case q.RtmpPushStatus == 1:
|
||||
flvadmin.GetSingleRtmpFlvAdmin().StartWrite(q.Code)
|
||||
logs.Info("camera [%s] start push rtmp", q.Code)
|
||||
}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", camera)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
func CameraSaveVideoChange(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.Camera{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := bas_service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
camera.SaveVideo = q.SaveVideo
|
||||
_, err = bas_service.CameraUpdateById(camera)
|
||||
if err != nil {
|
||||
logs.Error("SaveVideo camera status %d error : %v", camera.SaveVideo, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.SaveVideo != 1:
|
||||
logs.Info("camera [%s] stop save video", q.Code)
|
||||
flvadmin.GetSingleFileFlvAdmin().StopWrite(q.Code)
|
||||
case q.SaveVideo == 1:
|
||||
flvadmin.GetSingleFileFlvAdmin().StartWrite(q.Code)
|
||||
logs.Info("camera [%s] start save video", q.Code)
|
||||
}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", camera)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
func CameraLiveChange(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.Camera{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := bas_service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
camera.Live = q.Live
|
||||
_, err = bas_service.CameraUpdateById(camera)
|
||||
if err != nil {
|
||||
logs.Error("Live camera status %d error : %v", camera.Live, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
switch {
|
||||
case q.Live != 1:
|
||||
flvadmin.GetSingleHttpFlvAdmin().StopWrite(q.Code)
|
||||
case q.Live == 1:
|
||||
flvadmin.GetSingleHttpFlvAdmin().StartWrite(q.Code)
|
||||
}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", camera)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
func CameraPlayAuthCodeReset(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.Camera{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
camera, err := bas_service.CameraSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
playAuthCode, _ := utils.UUID()
|
||||
camera.PlayAuthCode = playAuthCode
|
||||
_, err = bas_service.CameraUpdateById(camera)
|
||||
if err != nil {
|
||||
logs.Error("PlayAuthCode camera status %d error : %v", camera.PlayAuthCode, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
flvadmin.GetSingleHttpFlvAdmin().StopWrite(q.Code)
|
||||
flvadmin.GetSingleHttpFlvAdmin().StartWrite(q.Code)
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", camera)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
||||
var codeStream = make(chan string)
|
||||
|
||||
func CodeStream() <-chan string {
|
||||
return codeStream
|
||||
}
|
43
src/rtsp2rtmp/web/controllers/ext/camerashare.go
Normal file
43
src/rtsp2rtmp/web/controllers/ext/camerashare.go
Normal file
@@ -0,0 +1,43 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
func CameraShareEnabled(ctx *gin.Context) {
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
q := entity.CameraShare{}
|
||||
err := ctx.BindJSON(&q)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
result := common.ErrorResult(fmt.Sprintf("param error : %v", err))
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
cameraShare, err := base_service.CameraShareSelectById(q.Id)
|
||||
if err != nil {
|
||||
logs.Error("query camerashare error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
cameraShare.Enabled = q.Enabled
|
||||
_, err = base_service.CameraShareUpdateById(cameraShare)
|
||||
if err != nil {
|
||||
logs.Error("enabled camerashare status %d error : %v", cameraShare.Enabled, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", cameraShare)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
89
src/rtsp2rtmp/web/controllers/ext/httpflv.go
Normal file
89
src/rtsp2rtmp/web/controllers/ext/httpflv.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"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/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
func HttpFlvPlay(ctx *gin.Context) {
|
||||
defer func() {
|
||||
if result := recover(); result != nil {
|
||||
logs.Error("system painc : %v \nstack : %v", result, string(debug.Stack()))
|
||||
}
|
||||
}()
|
||||
ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
ctx.Writer.Header().Set("Connection", "keep-alive")
|
||||
uri := strings.TrimSuffix(strings.TrimLeft(ctx.Request.RequestURI, "/"), ".flv")
|
||||
uris := strings.Split(uri, "/")
|
||||
if len(uris) < 3 || uris[0] != "live" {
|
||||
http.Error(ctx.Writer, "invalid path", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
method := uris[1]
|
||||
code := uris[2]
|
||||
authCode := uris[3]
|
||||
|
||||
conditon := common.GetEqualCondition("code", code)
|
||||
camera, err := base_service.CameraFindOneByCondition(conditon)
|
||||
if err != nil {
|
||||
logs.Error("camera query error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
if !(method == "temp" || method == "permanent") {
|
||||
logs.Error("method error : %s", method)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
if method == "temp" {
|
||||
var filters = []common.EqualFilter{{Name: "cameraId", Value: camera.Id}, {Name: "authCode", Value: authCode}}
|
||||
condition := common.GetEqualConditions(filters)
|
||||
cs, err := base_service.CameraShareFindOneByCondition(condition)
|
||||
|
||||
if err != nil {
|
||||
logs.Error("CameraShareSelectOne error : %v", err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
if time.Now().Before(cs.StartTime) || time.Now().After(cs.Deadline) {
|
||||
logs.Error("camera [%s] AuthCodeTemp expired : %s", camera.Code, authCode)
|
||||
result := common.ErrorResult(fmt.Sprintf("auth error"))
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
if method == "permanent" && authCode != camera.PlayAuthCode {
|
||||
logs.Error("AuthCodePermanent error : %s", authCode)
|
||||
result := common.ErrorResult(fmt.Sprintf("auth error"))
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
|
||||
logs.Info("player [%s] addr [%s] connecting", code, ctx.Request.RemoteAddr)
|
||||
//管理员可以主动中断播放
|
||||
playerDone := make(chan int)
|
||||
defer close(playerDone)
|
||||
const timeout = 10 * time.Second
|
||||
flvPlayerDone, err := flvadmin.GetSingleHttpFlvAdmin().AddHttpFlvPlayer(playerDone, timeout/2, code, ctx.Writer)
|
||||
if err != nil {
|
||||
logs.Error("camera [%s] add player error : %s", code, err)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusBadRequest, result)
|
||||
return
|
||||
}
|
||||
<-flvPlayerDone
|
||||
logs.Info("player [%s] addr [%s] exit", code, ctx.Request.RemoteAddr)
|
||||
}
|
@@ -1,96 +0,0 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"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/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dao/entity"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
)
|
||||
|
||||
func HttpFlvPlay(c *gin.Context) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logs.Error("system painc : %v \nstack : %v", r, string(debug.Stack()))
|
||||
}
|
||||
}()
|
||||
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
|
||||
c.Writer.Header().Set("Connection", "keep-alive")
|
||||
uri := strings.TrimSuffix(strings.TrimLeft(c.Request.RequestURI, "/"), ".flv")
|
||||
uris := strings.Split(uri, "/")
|
||||
if len(uris) < 3 || uris[0] != "live" {
|
||||
http.Error(c.Writer, "invalid path", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
method := uris[1]
|
||||
code := uris[2]
|
||||
authCode := uris[3]
|
||||
r := common.Result{
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
q := entity.Camera{Code: code}
|
||||
camera, err := service.CameraSelectOne(q)
|
||||
if err != nil {
|
||||
logs.Error("camera query error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "camera query error"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
if !(method == "temp" || method == "permanent") {
|
||||
logs.Error("method error : %s", method)
|
||||
r.Code = 0
|
||||
r.Msg = "method error"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
if method == "temp" {
|
||||
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
|
||||
r.Msg = "system error"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
if time.Now().Before(cs.StartTime) || time.Now().After(cs.Deadline) {
|
||||
logs.Error("camera [%s] AuthCodeTemp expired : %s", camera.Code, authCode)
|
||||
r.Code = 0
|
||||
r.Msg = "authCode expired"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
if method == "permanent" && authCode != camera.PlayAuthCode {
|
||||
logs.Error("AuthCodePermanent error : %s", authCode)
|
||||
r.Code = 0
|
||||
r.Msg = "authCode error"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
|
||||
logs.Info("player [%s] addr [%s] connecting", code, c.Request.RemoteAddr)
|
||||
//管理员可以主动中断播放
|
||||
playerDone := make(chan int)
|
||||
defer close(playerDone)
|
||||
const timeout = 10 * time.Second
|
||||
flvPlayerDone, err := flvadmin.GetSingleHttpFlvAdmin().AddHttpFlvPlayer(playerDone, timeout/2, code, c.Writer)
|
||||
if err != nil {
|
||||
logs.Error("camera [%s] add player error : %s", code, err)
|
||||
r.Code = 0
|
||||
r.Msg = "add player error"
|
||||
c.JSON(http.StatusBadRequest, r)
|
||||
return
|
||||
}
|
||||
<-flvPlayerDone
|
||||
logs.Info("player [%s] addr [%s] exit", code, c.Request.RemoteAddr)
|
||||
}
|
34
src/rtsp2rtmp/web/dyn_query/dq_builder_sql.go
Normal file
34
src/rtsp2rtmp/web/dyn_query/dq_builder_sql.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package dyn_query
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func (builder QuerySqlBuilder) GetCountSql() (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildCountSql()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (builder QuerySqlBuilder) GetSql() (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildSql(false)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (builder QuerySqlBuilder) GetPageSql(
|
||||
pageIndex uint64, pageSize uint64,
|
||||
) (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildPageSql(pageIndex, pageSize)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
@@ -47,7 +47,7 @@ func getJoinNamesFromOrders(
|
||||
orders []common.AqOrder,
|
||||
) map[string]uint32 {
|
||||
for _, order := range orders {
|
||||
var names []string = strings.Split(order.Property, ",")
|
||||
var names []string = strings.Split(order.Property, ".")
|
||||
if len(names) > 1 {
|
||||
names = names[:len(names)-1]
|
||||
result_map[strings.Join(names, ".")] = 1
|
||||
@@ -629,8 +629,8 @@ func NewQuerySqlBuilder(
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
selectStatemet.SqlWhere = &conditionExpr
|
||||
}
|
||||
selectStatemet.SqlWhere = &conditionExpr
|
||||
|
||||
var orderExprs = make([]OrderExpr, 0)
|
||||
orderExprs, err = makeColumnOrderBy(orders, main_entity_name, main_table_alias)
|
||||
@@ -652,35 +652,6 @@ func NewQuerySqlBuilder(
|
||||
return
|
||||
}
|
||||
|
||||
func (builder QuerySqlBuilder) GetCountSql() (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildCountSql()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (builder QuerySqlBuilder) GetSql() (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildSql(false)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (builder QuerySqlBuilder) GetPageSql(
|
||||
pageIndex uint64, pageSize uint64,
|
||||
) (sqlStr string, params []interface{}, err error) {
|
||||
sqlStr, params, err = builder.dynQuery.BuildPageSql(pageIndex, pageSize)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("makeSqlByCondition error: %v", err)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type ByLength []string
|
||||
|
||||
func (s ByLength) Len() int { return len(s) }
|
||||
|
@@ -1,105 +0,0 @@
|
||||
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
|
||||
}
|
@@ -1,99 +0,0 @@
|
||||
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 CameraShareInsert(e entity.CameraShare) (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 CameraShareDelete(e entity.CameraShare) (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 CameraShareUpdate(e entity.CameraShare) (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 CameraShareSelectById(id string) (e entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
e = entity.CameraShare{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 CameraShareSelectOne(q entity.CameraShare) (e entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
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
|
||||
}
|
||||
return e, nil
|
||||
}
|
||||
|
||||
func CameraShareCountByCode(code string) (count int64, err error) {
|
||||
o := orm.NewOrm()
|
||||
count, err = o.QueryTable(new(entity.CameraShare)).Filter("code", code).Count()
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return count, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
func CameraShareSelectAll() (es []entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
num, err := o.QueryTable(new(entity.CameraShare)).All(&es)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
||||
}
|
||||
logs.Debug("查询到%d条记录", num)
|
||||
return es, nil
|
||||
}
|
||||
|
||||
func CameraShareSelectByCameraId(cameraId string) (es []entity.CameraShare, err error) {
|
||||
o := orm.NewOrm()
|
||||
num, err := o.QueryTable(new(entity.CameraShare)).Filter("CameraId", cameraId).All(&es)
|
||||
if err != nil {
|
||||
logs.Error("查询出错:%v", err)
|
||||
return es, err
|
||||
}
|
||||
logs.Info("查询到%d条记录", num)
|
||||
return es, nil
|
||||
}
|
1
src/rtsp2rtmp/web/service/ext/camera.go
Normal file
1
src/rtsp2rtmp/web/service/ext/camera.go
Normal file
@@ -0,0 +1 @@
|
||||
package service
|
1
src/rtsp2rtmp/web/service/ext/camerashare.go
Normal file
1
src/rtsp2rtmp/web/service/ext/camerashare.go
Normal file
@@ -0,0 +1 @@
|
||||
package service
|
@@ -7,7 +7,8 @@ import (
|
||||
"github.com/beego/beego/v2/core/logs"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/rtspclientmanager"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
|
||||
)
|
||||
|
||||
var taskInstance *task
|
||||
@@ -47,7 +48,8 @@ func (t *task) offlineCamera() {
|
||||
}
|
||||
}()
|
||||
for {
|
||||
css, err := service.CameraSelectAll()
|
||||
condition := common.GetEmptyCondition()
|
||||
css, err := base_service.CameraFindCollectionByCondition(condition)
|
||||
if err != nil {
|
||||
logs.Error("query camera error : %v", err)
|
||||
}
|
||||
@@ -57,7 +59,7 @@ func (t *task) offlineCamera() {
|
||||
}
|
||||
if exists := rtspclientmanager.GetSingleRtspClientManager().ExistsPublisher(cs.Code); !exists {
|
||||
cs.OnlineStatus = 0
|
||||
service.CameraUpdate(cs)
|
||||
base_service.CameraUpdateById(cs)
|
||||
}
|
||||
}
|
||||
<-time.After(10 * time.Minute)
|
||||
|
@@ -13,8 +13,8 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/utils"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
|
||||
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers"
|
||||
base_controller "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers/base"
|
||||
ext_controller "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/controllers/ext"
|
||||
)
|
||||
|
||||
var tokens sync.Map
|
||||
@@ -52,8 +52,8 @@ func (w *web) StartWeb() {
|
||||
|
||||
func (w *web) webRun() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
logs.Error("system painc : %v \nstack : %v", r, string(debug.Stack()))
|
||||
if result := recover(); result != nil {
|
||||
logs.Error("system painc : %v \nstack : %v", result, string(debug.Stack()))
|
||||
}
|
||||
}()
|
||||
router := gin.Default()
|
||||
@@ -62,7 +62,7 @@ func (w *web) webRun() {
|
||||
|
||||
router.POST("/system/login", login)
|
||||
|
||||
router.GET("/live/:method/:code/:authCode.flv", controllers.HttpFlvPlay)
|
||||
router.GET("/live/:method/:code/:authCode.flv", ext_controller.HttpFlvPlay)
|
||||
// camera
|
||||
router.POST("/camera/add", base_controller.CameraAdd)
|
||||
router.POST("/camera/update", base_controller.CameraUpdate)
|
||||
@@ -80,20 +80,20 @@ func (w *web) webRun() {
|
||||
router.POST("/cameraShare/aq", base_controller.CameraShareAq)
|
||||
router.POST("/cameraShare/aqPage", base_controller.CameraShareAqPage)
|
||||
|
||||
router.GET("/camera/list", controllers.CameraList)
|
||||
router.GET("/camera/detail", controllers.CameraDetail)
|
||||
router.POST("/camera/edit", controllers.CameraEdit)
|
||||
router.POST("/camera/delete/:id", controllers.CameraDelete)
|
||||
router.POST("/camera/enabled", controllers.CameraEnabled)
|
||||
router.POST("/camera/rtmppushchange", controllers.RtmpPushChange)
|
||||
router.POST("/camera/savevideochange", controllers.CameraSaveVideoChange)
|
||||
router.POST("/camera/livechange", controllers.CameraLiveChange)
|
||||
router.POST("/camera/playauthcodereset", controllers.CameraPlayAuthCodeReset)
|
||||
// router.GET("/camera/list", ext_controller.CameraList)
|
||||
// router.GET("/camera/detail", ext_controller.CameraDetail)
|
||||
// router.POST("/camera/edit", ext_controller.CameraEdit)
|
||||
// router.POST("/camera/delete/:id", ext_controller.CameraDelete)
|
||||
router.POST("/camera/enabled", ext_controller.CameraEnabled)
|
||||
router.POST("/camera/rtmpPushChange", ext_controller.RtmpPushChange)
|
||||
router.POST("/camera/saveVideoChange", ext_controller.CameraSaveVideoChange)
|
||||
router.POST("/camera/liveChange", ext_controller.CameraLiveChange)
|
||||
router.POST("/camera/playAuthCodeReset", ext_controller.CameraPlayAuthCodeReset)
|
||||
|
||||
router.GET("/camerashare/list", controllers.CameraShareList)
|
||||
router.POST("/camerashare/edit", controllers.CameraShareEdit)
|
||||
router.POST("/camerashare/delete/:id", controllers.CameraShareDelete)
|
||||
router.POST("/camerashare/enabled", controllers.CameraShareEnabled)
|
||||
// router.GET("/camerashare/list", ext_controller.CameraShareList)
|
||||
// router.POST("/camerashare/edit", ext_controller.CameraShareEdit)
|
||||
// router.POST("/camerashare/delete/:id", ext_controller.CameraShareDelete)
|
||||
router.POST("/cameraShare/enabled", ext_controller.CameraShareEnabled)
|
||||
|
||||
staticPath, err := config.String("server.http.static.path")
|
||||
if err != nil {
|
||||
@@ -165,34 +165,27 @@ func Validate() gin.HandlerFunc {
|
||||
ctx.Next()
|
||||
return
|
||||
}
|
||||
r := common.Result{
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
token := ctx.Request.Header.Get("token")
|
||||
if len(token) == 0 {
|
||||
logs.Error("token is null")
|
||||
r.Code = 0
|
||||
r.Msg = "token is null"
|
||||
ctx.JSON(http.StatusUnauthorized, r)
|
||||
logs.Error("token is empty")
|
||||
result := common.ErrorResult("token is empty")
|
||||
ctx.JSON(http.StatusUnauthorized, result)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
tokenTime, b := tokens.Load(token)
|
||||
if !b {
|
||||
logs.Error("token error")
|
||||
r.Code = 0
|
||||
r.Msg = "token error"
|
||||
ctx.JSON(http.StatusUnauthorized, r)
|
||||
result := common.ErrorResult("token error")
|
||||
ctx.JSON(http.StatusUnauthorized, result)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
timeout := time.Now().After(tokenTime.(time.Time).Add(30 * time.Minute))
|
||||
if timeout {
|
||||
logs.Error("token is timeout")
|
||||
r.Code = 0
|
||||
r.Msg = "token is timeout"
|
||||
ctx.JSON(http.StatusUnauthorized, r)
|
||||
result := common.ErrorResult("token is timeout")
|
||||
ctx.JSON(http.StatusUnauthorized, result)
|
||||
ctx.Abort()
|
||||
return
|
||||
}
|
||||
@@ -201,18 +194,13 @@ func Validate() gin.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
func login(c *gin.Context) {
|
||||
r := common.Result{
|
||||
Code: 1,
|
||||
Msg: "",
|
||||
}
|
||||
func login(ctx *gin.Context) {
|
||||
params := make(map[string]interface{})
|
||||
err := c.BindJSON(¶ms)
|
||||
err := ctx.BindJSON(¶ms)
|
||||
if err != nil {
|
||||
logs.Error("param error : %v", err)
|
||||
r.Code = 0
|
||||
r.Msg = "param error"
|
||||
c.JSON(http.StatusOK, r)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
userNameParam := params["userName"].(string)
|
||||
@@ -221,21 +209,20 @@ func login(c *gin.Context) {
|
||||
password := config.DefaultString("server.user.password", "")
|
||||
if userNameParam == "" || passwordParam == "" || userNameParam != userName || passwordParam != password {
|
||||
logs.Error("userName : %s , password : %s error", userNameParam, passwordParam)
|
||||
r.Code = 0
|
||||
r.Msg = "userName or password error ! "
|
||||
c.JSON(http.StatusOK, r)
|
||||
result := common.ErrorResult("userName or password error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
logs.Info("用户[%s]登录成功!", userName)
|
||||
token, err := utils.NextToke()
|
||||
if err != nil {
|
||||
logs.Error("create token fail")
|
||||
r.Code = 0
|
||||
r.Msg = "create token fail"
|
||||
c.JSON(http.StatusOK, r)
|
||||
result := common.ErrorResult("internal error")
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
return
|
||||
}
|
||||
r.Data = map[string]string{"token": token}
|
||||
|
||||
result := common.SuccessResultWithMsg("succss", map[string]string{"token": token})
|
||||
tokens.Store(token, time.Now())
|
||||
c.JSON(http.StatusOK, r)
|
||||
ctx.JSON(http.StatusOK, result)
|
||||
}
|
||||
|
Reference in New Issue
Block a user