bilibili-backup/app/service/video/stream-mng/server/http/screen-shot.go
2019-04-22 02:59:20 +00:00

236 lines
6.0 KiB
Go

package http
import (
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
"strconv"
"strings"
"time"
)
// 截图相关业务
// getScreeShotByRoomID 得到一个房间某个时间段的截图
func getSingleScreenShot(c *bm.Context) {
params := c.Request.URL.Query()
room := params.Get("room_id")
// 2018-10-24 14:27:07
start := params.Get("start_time")
end := params.Get("end_time")
channel := params.Get("channel")
c.Set("input_params", params)
if room == "" || start == "" || end == "" {
c.Set("output_data", "some fields are empty")
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
c.Abort()
return
}
roomID, err := strconv.ParseInt(room, 10, 64)
if err != nil || roomID <= 0 {
c.Set("output_data", "room_id is not right")
c.JSONMap(map[string]interface{}{"message": "room_id is not right"}, ecode.RequestErr)
c.Abort()
return
}
startTime, err := time.ParseInLocation("2006-01-02 15:04:05", start, time.Local)
if err != nil {
c.Set("output_data", "Start time format is incorrect")
c.JSONMap(map[string]interface{}{"message": "Start time format is incorrect"}, ecode.RequestErr)
c.Abort()
return
}
endTime, err := time.ParseInLocation("2006-01-02 15:04:05", end, time.Local)
if err != nil {
c.Set("output_data", "End time format is incorrect")
c.JSONMap(map[string]interface{}{"message": "End time format is incorrect"}, ecode.RequestErr)
c.Abort()
return
}
info, err := srv.GetSingleScreeShot(c, roomID, startTime.Unix(), endTime.Unix(), channel)
if err != nil {
c.Set("output_data", err.Error())
c.JSONMap(map[string]interface{}{"message": err.Error()}, ecode.RequestErr)
c.Abort()
return
}
c.Set("output_data", info)
c.JSONMap(map[string]interface{}{"data": map[string][]string{"list": info}}, nil)
}
// getMultiScreenShot 得到多个房间一个时间点截图
func getMultiScreenShot(c *bm.Context) {
params := c.Request.URL.Query()
rooms := params.Get("room_ids")
ts := params.Get("ts")
channel := params.Get("channel")
c.Set("input_params", params)
if rooms == "" || ts == "" {
c.Set("output_data", "some fields are empty")
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
c.Abort()
return
}
// 切割room_id
roomIDs := strings.Split(rooms, ",")
if len(roomIDs) <= 0 {
c.Set("output_data", "room_ids is not right")
c.JSONMap(map[string]interface{}{"message": "room_ids is not right"}, ecode.RequestErr)
c.Abort()
return
}
tsInt, _ := strconv.ParseInt(ts, 10, 64)
rids := []int64{}
for _, v := range roomIDs {
roomID, err := strconv.ParseInt(v, 10, 64)
if err != nil {
log.Warn("room id is not right")
continue
}
rids = append(rids, roomID)
}
resp, err := srv.GetMultiScreenShot(c, rids, tsInt, channel)
if err != nil {
c.Set("output_data", err.Error())
c.JSONMap(map[string]interface{}{"message": err.Error()}, ecode.RequestErr)
c.Abort()
return
}
c.Set("output_data", resp)
c.JSONMap(map[string]interface{}{"data": map[string]interface{}{"list": resp}}, nil)
}
// getOriginScreenShotPic 获取原始图片地址
func getOriginScreenShotPic(c *bm.Context) {
params := c.Request.URL.Query()
rooms := params.Get("room_ids")
ts := params.Get("ts")
//tp := params.Get("type")
c.Set("input_params", params)
if rooms == "" {
c.Set("output_data", "some fields are empty")
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
c.Abort()
return
}
// 切割room_id
roomIDs := strings.Split(rooms, ",")
if len(roomIDs) <= 0 {
c.Set("output_data", "room_ids is not right")
c.JSONMap(map[string]interface{}{"message": "room_ids is not right"}, ecode.RequestErr)
c.Abort()
return
}
tsInt, _ := strconv.ParseInt(ts, 10, 64)
rids := []int64{}
for _, v := range roomIDs {
roomID, err := strconv.ParseInt(v, 10, 64)
if err != nil {
log.Warn("room id is not right")
continue
}
rids = append(rids, roomID)
}
resp, err := srv.GetOriginScreenShotPic(c, rids, tsInt)
if err != nil {
c.Set("output_data", err.Error())
c.JSONMap(map[string]interface{}{"message": err.Error()}, ecode.RequestErr)
c.Abort()
return
}
c.Set("output_data", resp)
c.JSONMap(map[string]interface{}{"data": map[string]interface{}{"list": resp}}, nil)
}
// getTimePeriodScreenShot 获取多个房间一个时间段内的截图
func getTimePeriodScreenShot(c *bm.Context) {
params := c.Request.URL.Query()
room := params.Get("room_ids")
// 2018-10-24 14:27:07
start := params.Get("start_time")
end := params.Get("end_time")
channel := params.Get("channel")
c.Set("input_params", params)
if room == "" || start == "" || end == "" {
c.Set("output_data", "some fields are empty")
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
c.Abort()
return
}
startTime, err := time.ParseInLocation("2006-01-02 15:04:05", start, time.Local)
if err != nil {
c.Set("output_data", "Start time format is incorrect")
c.JSONMap(map[string]interface{}{"message": "Start time format is incorrect"}, ecode.RequestErr)
c.Abort()
return
}
endTime, err := time.ParseInLocation("2006-01-02 15:04:05", end, time.Local)
if err != nil {
c.Set("output_data", "End time format is incorrect")
c.JSONMap(map[string]interface{}{"message": "End time format is incorrect"}, ecode.RequestErr)
c.Abort()
return
}
// 切割room_id
roomIDs := strings.Split(room, ",")
if len(roomIDs) <= 0 {
c.Set("output_data", "room_ids is not right")
c.JSONMap(map[string]interface{}{"message": "room_ids is not right"}, ecode.RequestErr)
c.Abort()
return
}
resp := map[int64][]string{}
for _, v := range roomIDs {
roomID, err := strconv.ParseInt(v, 10, 64)
if err != nil {
log.Warn("room id is not right")
continue
}
urls, err := srv.GetSingleScreeShot(c, roomID, startTime.Unix(), endTime.Unix(), channel)
if err != nil {
log.Warn("%v", err)
continue
}
resp[roomID] = urls
}
c.Set("output_data", resp)
c.JSONMap(map[string]interface{}{"data": resp}, nil)
}