mirror of
https://github.com/lkmio/gb-cms.git
synced 2025-09-26 19:51:22 +08:00
313 lines
12 KiB
Go
313 lines
12 KiB
Go
package main
|
|
|
|
import (
|
|
"gb-cms/common"
|
|
"gb-cms/dao"
|
|
"gb-cms/stack"
|
|
"strconv"
|
|
)
|
|
|
|
type LiveGBSDevice struct {
|
|
AlarmSubscribe bool `json:"AlarmSubscribe"`
|
|
CatalogInterval int `json:"CatalogInterval"`
|
|
CatalogProgress string `json:"CatalogProgress,omitempty"` // 查询目录进度recvSize/totalSize
|
|
CatalogSubscribe bool `json:"CatalogSubscribe"`
|
|
ChannelCount int `json:"ChannelCount"`
|
|
ChannelOverLoad bool `json:"ChannelOverLoad"`
|
|
Charset string `json:"Charset"`
|
|
CivilCodeFirst bool `json:"CivilCodeFirst"`
|
|
CommandTransport string `json:"CommandTransport"`
|
|
ContactIP string `json:"ContactIP"`
|
|
CreatedAt string `json:"CreatedAt"`
|
|
CustomName string `json:"CustomName"`
|
|
DropChannelType string `json:"DropChannelType"`
|
|
GBVer string `json:"GBVer"`
|
|
ID string `json:"ID"`
|
|
KeepOriginalTree bool `json:"KeepOriginalTree"`
|
|
LastKeepaliveAt string `json:"LastKeepaliveAt"`
|
|
LastRegisterAt string `json:"LastRegisterAt"`
|
|
Latitude float64 `json:"Latitude"`
|
|
Longitude float64 `json:"Longitude"`
|
|
Manufacturer string `json:"Manufacturer"`
|
|
MediaTransport string `json:"MediaTransport"`
|
|
MediaTransportMode string `json:"MediaTransportMode"`
|
|
Name string `json:"Name"`
|
|
Online bool `json:"Online"`
|
|
PTZSubscribe bool `json:"PTZSubscribe"`
|
|
Password string `json:"Password"`
|
|
PositionSubscribe bool `json:"PositionSubscribe"`
|
|
RecordCenter bool `json:"RecordCenter"`
|
|
RecordIndistinct bool `json:"RecordIndistinct"`
|
|
RecvStreamIP string `json:"RecvStreamIP"`
|
|
RemoteIP string `json:"RemoteIP"`
|
|
RemotePort int `json:"RemotePort"`
|
|
RemoteRegion string `json:"RemoteRegion"`
|
|
SMSGroupID string `json:"SMSGroupID"`
|
|
SMSID string `json:"SMSID"`
|
|
StreamMode string `json:"StreamMode"`
|
|
SubscribeInterval int `json:"SubscribeInterval"`
|
|
Type string `json:"Type"`
|
|
UpdatedAt string `json:"UpdatedAt"`
|
|
}
|
|
|
|
type LiveGBSChannel struct {
|
|
Address string `json:"Address"`
|
|
Altitude int `json:"Altitude"`
|
|
AudioEnable bool `json:"AudioEnable"`
|
|
BatteryLevel int `json:"BatteryLevel"`
|
|
Block string `json:"Block"`
|
|
Channel int `json:"Channel"`
|
|
CivilCode string `json:"CivilCode"`
|
|
CloudRecord bool `json:"CloudRecord"`
|
|
CreatedAt string `json:"CreatedAt"`
|
|
Custom bool `json:"Custom"`
|
|
CustomAddress string `json:"CustomAddress"`
|
|
CustomBlock string `json:"CustomBlock"`
|
|
CustomCivilCode string `json:"CustomCivilCode"`
|
|
CustomFirmware string `json:"CustomFirmware"`
|
|
CustomID string `json:"CustomID"`
|
|
CustomIPAddress string `json:"CustomIPAddress"`
|
|
CustomLatitude int `json:"CustomLatitude"`
|
|
CustomLongitude int `json:"CustomLongitude"`
|
|
CustomManufacturer string `json:"CustomManufacturer"`
|
|
CustomModel string `json:"CustomModel"`
|
|
CustomName string `json:"CustomName"`
|
|
CustomPTZType int `json:"CustomPTZType"`
|
|
CustomParentID string `json:"CustomParentID"`
|
|
CustomPort int `json:"CustomPort"`
|
|
CustomSerialNumber string `json:"CustomSerialNumber"`
|
|
CustomStatus string `json:"CustomStatus"`
|
|
Description string `json:"Description"`
|
|
DeviceCustomName string `json:"DeviceCustomName"`
|
|
DeviceID string `json:"DeviceID"`
|
|
DeviceName string `json:"DeviceName"`
|
|
DeviceOnline bool `json:"DeviceOnline"`
|
|
DeviceType string `json:"DeviceType"`
|
|
Direction int `json:"Direction"`
|
|
DownloadSpeed string `json:"DownloadSpeed"`
|
|
Firmware string `json:"Firmware"`
|
|
ID string `json:"ID"`
|
|
IPAddress string `json:"IPAddress"`
|
|
Latitude float64 `json:"Latitude"`
|
|
Longitude float64 `json:"Longitude"`
|
|
Manufacturer string `json:"Manufacturer"`
|
|
Model string `json:"Model"`
|
|
Name string `json:"Name"`
|
|
NumOutputs int `json:"NumOutputs"`
|
|
Ondemand bool `json:"Ondemand"`
|
|
Owner string `json:"Owner"`
|
|
PTZType int `json:"PTZType"`
|
|
ParentID string `json:"ParentID"`
|
|
Parental int `json:"Parental"`
|
|
Port int `json:"Port"`
|
|
Quality string `json:"Quality"`
|
|
RegisterWay int `json:"RegisterWay"`
|
|
Secrecy int `json:"Secrecy"`
|
|
SerialNumber string `json:"SerialNumber"`
|
|
Shared bool `json:"Shared"`
|
|
SignalLevel int `json:"SignalLevel"`
|
|
SnapURL string `json:"SnapURL"`
|
|
Speed int `json:"Speed"`
|
|
Status string `json:"Status"`
|
|
StreamID string `json:"StreamID"`
|
|
SubCount int `json:"SubCount"`
|
|
UpdatedAt string `json:"UpdatedAt"`
|
|
}
|
|
|
|
type LiveGBSStreamStart struct {
|
|
Serial string
|
|
Code string
|
|
}
|
|
|
|
type LiveGBSStream struct {
|
|
AudioEnable bool `json:"AudioEnable"`
|
|
CDN string `json:"CDN"`
|
|
CascadeSize int `json:"CascadeSize"`
|
|
ChannelID string `json:"ChannelID"`
|
|
ChannelName string `json:"ChannelName"`
|
|
ChannelPTZType int `json:"ChannelPTZType"`
|
|
CloudRecord bool `json:"CloudRecord"`
|
|
DecodeSize int `json:"DecodeSize"`
|
|
DeviceID string `json:"DeviceID"`
|
|
Duration int `json:"Duration"`
|
|
FLV string `json:"FLV"`
|
|
HLS string `json:"HLS"`
|
|
InBitRate int `json:"InBitRate"`
|
|
InBytes int `json:"InBytes"`
|
|
NumOutputs int `json:"NumOutputs"`
|
|
Ondemand bool `json:"Ondemand"`
|
|
OutBytes int `json:"OutBytes"`
|
|
RTMP string `json:"RTMP"`
|
|
RTPCount int `json:"RTPCount"`
|
|
RTPLostCount int `json:"RTPLostCount"`
|
|
RTPLostRate int `json:"RTPLostRate"`
|
|
RTSP string `json:"RTSP"`
|
|
RecordStartAt string `json:"RecordStartAt"`
|
|
RelaySize int `json:"RelaySize"`
|
|
SMSID string `json:"SMSID"`
|
|
SnapURL string `json:"SnapURL"`
|
|
SourceAudioCodecName string `json:"SourceAudioCodecName"`
|
|
SourceAudioSampleRate int `json:"SourceAudioSampleRate"`
|
|
SourceVideoCodecName string `json:"SourceVideoCodecName"`
|
|
SourceVideoFrameRate int `json:"SourceVideoFrameRate"`
|
|
SourceVideoHeight int `json:"SourceVideoHeight"`
|
|
SourceVideoWidth int `json:"SourceVideoWidth"`
|
|
StartAt string `json:"StartAt"`
|
|
StreamID string `json:"StreamID"`
|
|
Transport string `json:"Transport"`
|
|
VideoFrameCount int `json:"VideoFrameCount"`
|
|
WEBRTC string `json:"WEBRTC"`
|
|
WS_FLV string `json:"WS_FLV"`
|
|
}
|
|
|
|
type LiveGBSDeviceTree struct {
|
|
Code string `json:"code"`
|
|
Custom bool `json:"custom"`
|
|
CustomID string `json:"customID"`
|
|
CustomName string `json:"customName"`
|
|
ID string `json:"id"`
|
|
Latitude float64 `json:"latitude"`
|
|
Longitude float64 `json:"longitude"`
|
|
Manufacturer string `json:"manufacturer"`
|
|
Name string `json:"name"`
|
|
OnlineSubCount int `json:"onlineSubCount"`
|
|
Parental bool `json:"parental"`
|
|
PtzType int `json:"ptzType"`
|
|
Serial string `json:"serial"`
|
|
Status string `json:"status"`
|
|
SubCount int `json:"subCount"` // 包含目录的总数
|
|
SubCountDevice int `json:"subCountDevice"` // 不包含目录的总数
|
|
}
|
|
|
|
type LiveGBSCascade struct {
|
|
Load int
|
|
Manufacturer string
|
|
ID string
|
|
Enable bool // 是否启用
|
|
Name string
|
|
Serial string // 上级ID
|
|
Realm string // 上级域
|
|
Host string // 上级IP
|
|
Port int // 上级端口
|
|
LocalSerial string
|
|
LocalHost string
|
|
LocalPort int
|
|
Username string // 向上级sip通信的用户名
|
|
Password string // 向上级注册的密码
|
|
Online bool
|
|
Status common.OnlineStatus
|
|
RegisterTimeout int
|
|
KeepaliveInterval int
|
|
RegisterInterval int
|
|
StreamKeepalive bool
|
|
StreamReader bool
|
|
BindLocalIP bool
|
|
AllowControl bool
|
|
ShareRecord bool
|
|
MergeRecord bool
|
|
ShareAllChannel bool
|
|
CommandTransport string
|
|
Charset string
|
|
CatalogGroupSize int
|
|
LoadLimit int
|
|
CivilCodeLimit int
|
|
DigestAlgorithm string
|
|
GM bool
|
|
Cert string
|
|
CreateAt string
|
|
UpdateAt string
|
|
}
|
|
|
|
func ChannelModels2LiveGBSChannels(index int, channels []*dao.ChannelModel, deviceName string) []*LiveGBSChannel {
|
|
var ChannelList []*LiveGBSChannel
|
|
|
|
for _, channel := range channels {
|
|
parental, _ := strconv.Atoi(channel.Parental)
|
|
port, _ := strconv.Atoi(channel.Port)
|
|
registerWay, _ := strconv.Atoi(channel.RegisterWay)
|
|
secrecy, _ := strconv.Atoi(channel.Secrecy)
|
|
|
|
streamID := common.GenerateStreamID(common.InviteTypePlay, channel.RootID, channel.DeviceID, "", "")
|
|
if stream, err := dao.Stream.QueryStream(streamID); err != nil || stream == nil {
|
|
streamID = ""
|
|
}
|
|
|
|
_, online := stack.OnlineDeviceManager.Find(channel.RootID)
|
|
// 转换经纬度
|
|
latitude, _ := strconv.ParseFloat(channel.Latitude, 64)
|
|
longitude, _ := strconv.ParseFloat(channel.Longitude, 64)
|
|
|
|
var customID string
|
|
if channel.CustomID != nil {
|
|
customID = *channel.CustomID
|
|
}
|
|
|
|
ChannelList = append(ChannelList, &LiveGBSChannel{
|
|
Address: channel.Address,
|
|
Altitude: 0,
|
|
AudioEnable: true,
|
|
BatteryLevel: 0,
|
|
Channel: index,
|
|
CivilCode: channel.CivilCode,
|
|
CloudRecord: false,
|
|
CreatedAt: channel.CreatedAt.Format("2006-01-02 15:04:05"),
|
|
Custom: false,
|
|
CustomAddress: "",
|
|
CustomBlock: "",
|
|
CustomCivilCode: "",
|
|
CustomFirmware: "",
|
|
CustomID: customID,
|
|
CustomIPAddress: "",
|
|
CustomLatitude: 0,
|
|
CustomLongitude: 0,
|
|
CustomManufacturer: "",
|
|
CustomModel: "",
|
|
CustomName: "",
|
|
CustomPTZType: 0,
|
|
CustomParentID: "",
|
|
CustomPort: 0,
|
|
CustomSerialNumber: "",
|
|
CustomStatus: "",
|
|
Description: "",
|
|
DeviceCustomName: "",
|
|
DeviceID: channel.RootID,
|
|
DeviceName: deviceName,
|
|
DeviceOnline: online,
|
|
DeviceType: "GB",
|
|
Direction: 0,
|
|
DownloadSpeed: "",
|
|
Firmware: "",
|
|
ID: channel.DeviceID,
|
|
IPAddress: channel.IPAddress,
|
|
Latitude: latitude,
|
|
Longitude: longitude,
|
|
Manufacturer: channel.Manufacturer,
|
|
Model: channel.Model,
|
|
Name: channel.Name,
|
|
NumOutputs: 0,
|
|
Ondemand: true,
|
|
Owner: channel.Owner,
|
|
PTZType: 0,
|
|
ParentID: channel.ParentID,
|
|
Parental: parental,
|
|
Port: port,
|
|
Quality: "",
|
|
RegisterWay: registerWay,
|
|
Secrecy: secrecy,
|
|
SerialNumber: "",
|
|
Shared: false,
|
|
SignalLevel: 0,
|
|
SnapURL: "",
|
|
Speed: 0,
|
|
Status: channel.Status.String(),
|
|
StreamID: string(streamID), // 实时流ID
|
|
SubCount: channel.SubCount,
|
|
UpdatedAt: channel.UpdatedAt.Format("2006-01-02 15:04:05"),
|
|
})
|
|
|
|
index++
|
|
}
|
|
|
|
return ChannelList
|
|
}
|