Files
go-common/app/service/video/stream-mng/service/stream-info.go
2019-04-22 18:49:16 +08:00

95 lines
2.6 KiB
Go

package service
import (
"context"
"fmt"
"go-common/app/service/video/stream-mng/common"
"go-common/app/service/video/stream-mng/model"
)
// GetStreamInfo 获取单个流信息
func (s *Service) GetStreamInfo(c context.Context, roomID int64, sname string) (*model.StreamFullInfo, error) {
result, err := s.dao.StreamFullInfo(c, roomID, sname)
return result, err
}
// AddHotStreamInfo 增加热流信息到REDIS
func (s *Service) AddHotStreamInfo(c context.Context, streamName string) (string, error) {
roomid, _, err := s.dao.OriginUpStreamInfoBySName(c, streamName)
if err != nil {
return "error", err
} else {
if roomid <= 0 {
return "error", fmt.Errorf("room id < 0")
}
err := s.dao.UpdateRoomHotStatusCache(c, roomid, 1)
//err := s.dao.AddRoomHotCache(c, roomid)
if err == nil {
return "success", nil
}
return "error", err
}
}
// GetMultiStreamInfo 批量获取流信息
func (s *Service) GetMultiStreamInfo(c context.Context, rids []int64) (map[int64]*model.StreamFullInfo, error) {
result, err := s.dao.MultiStreamInfo(c, rids)
return result, err
}
// GetStreamInfoByRIDMapSrcFromDB 传入房间号,返回房间流信息,包含备用流+使用原始src
func (s *Service) GetStreamInfoByRIDMapSrcFromDB(c context.Context, roomID int64) (*model.StreamFullInfo, error) {
info, err := s.GetStreamInfo(c, roomID, "")
if err != nil {
return nil, err
}
return s.translateInfoBit2Src(info), nil
}
// GetStreamInfoBySNameMapSrcFromDB 传入流名,返回房间流信息,包含备用流+使用原始src
func (s *Service) GetStreamInfoBySNameMapSrcFromDB(c context.Context, sname string) (*model.StreamFullInfo, error) {
info, err := s.GetStreamInfo(c, 0, sname)
if err != nil {
return nil, err
}
return s.translateInfoBit2Src(info), nil
}
// translatebit2Src 将cdn对应的bit 转为原始的src
func (s *Service) translatebit2Src(b int64) int64 {
for k, v := range common.CdnBitwiseMap {
if v == b {
return int64(common.CdnMapSrc[k])
}
}
return 0
}
// translateInfoBit2Src 将原始结构转为src对应的list
func (s *Service) translateInfoBit2Src(info *model.StreamFullInfo) *model.StreamFullInfo {
resp := &model.StreamFullInfo{}
// 适配src
if info != nil {
resp.RoomID = info.RoomID
for _, v := range info.List {
fw := []int64{}
for _, v2 := range v.Forward {
fw = append(fw, s.translatebit2Src(v2))
}
resp.List = append(resp.List, &model.StreamBase{
StreamName: v.StreamName,
DefaultUpStream: s.translatebit2Src(v.DefaultUpStream),
Origin: s.translatebit2Src(v.Origin),
Forward: fw,
Type: v.Type,
})
}
}
return resp
}