8 Commits

4 changed files with 96 additions and 118 deletions

View File

@ -88,3 +88,48 @@ type EventModelGetAlarmingResponse struct {
VideoLossAlarmMask uint `json:"VL_AT"` VideoLossAlarmMask uint `json:"VL_AT"`
VideoLossStatusMask uint `json:"VL_AS"` VideoLossStatusMask uint `json:"VL_AS"`
} }
// 3.4.1.3
type EventModelGetAlarmInfoStatusResponse struct {
ErrorCode uint `json:"ERRORCODE"`
ErrorCause string `json:"ERRORCAUSE"`
MotionDetectionAlarm []MotionDetectionAlarmStatus `json:"MD"`
IOAlarm []IOAlarmStatus `json:"IO"`
StorageAlarm []StorageAlarmStatus `json:"ST"`
CameraCoveredAlarm []CameraCoveredAlarmStatus `json:"VS"`
VideoLossAlarm []VideoLossAlarmStatus `json:"VL"`
}
// 3.4.1.4.1
type MotionDetectionAlarmStatus struct {
Status uint `json:"ISA"`
Mask uint `json:"LCH"`
}
// 3.4.1.4.2
type IOAlarmStatus struct {
Status uint `json:"ISA"`
IONumber uint `json:"IONO"`
Mask uint `json:"LCH"`
Name string `json:"NAME"`
NameAbbreviation string `json:"NSER"`
}
// 3.4.1.4.4
type CameraCoveredAlarmStatus struct {
Status uint `json:"ISA"`
Mask uint `json:"LCH"`
}
// 3.4.1.4.4
type VideoLossAlarmStatus struct {
Status uint `json:"ISA"`
Mask uint `json:"LCH"`
}
// 3.4.1.4.21
type StorageAlarmStatus struct {
SID any `json:"SID"`
Type uint `json:"ST"`
Error uint `json:"E"`
}

View File

@ -51,110 +51,3 @@ type MediaStreamModelControlStreamRequest struct {
AudioValid uint `json:"AUDIOVALID,omitempty"` AudioValid uint `json:"AUDIOVALID,omitempty"`
FrameMode uint `json:"FRAMEMODE,omitempty"` FrameMode uint `json:"FRAMEMODE,omitempty"`
} }
/*
var ip string = os.Getenv("SERVER_IP")
func (e *Package) MediaRequestDownloadVideo(token int, serial string, session string, camNo int, date string, begin_time string, end_time string, recordID string, serverId int) {
e.Payload = map[string]any{
"MODULE": "MEDIASTREAMMODEL",
"OPERATION": "REQUESTDOWNLOADVIDEO",
"PARAMETER": map[string]any{
"PT": 3,
"SSRC": 1,
"STREAMNAME": "DOWNLOAD" + "_" + serial + "_" + fmt.Sprint(camNo) + "_" + fmt.Sprint(serverId),
"STREAMTYPE": 1, // main stream
"RECORDID": recordID,
"CHANNEL": 1 << (camNo - 1),
"STARTTIME": date + begin_time,
"ENDTIME": date + end_time,
"OFFSETFLAG": 1,
"OFFSET": 0,
"IPANDPORT": ip + ":12092",
"SERIAL": token,
"DT": 1, // high speed download
},
"SESSION": session,
}
}
// main server util
func (e *Package) MediaRequestAliveVideo(token int, camNo int64, Sid string, serial string, quality int64) {
channel := 0
if camNo == 1 {
channel = 1
} else {
channel = 1 << (camNo - 1)
}
e.Payload = map[string]any{
"MODULE": "MEDIASTREAMMODEL",
"OPERATION": "REQUESTALIVEVIDEO",
"PARAMETER": map[string]any{
"AUDIOVALID": 1,
"CHANNEL": channel,
"FRAMEMODE": 0,
"IPANDPORT": ip + ":12092",
"STREAMNAME": "LIVE" + "_" + serial + "_" + fmt.Sprint(camNo),
"STREAMTYPE": quality,
"SERIAL": token,
},
"SESSION": Sid,
}
}
// main server util
func (e *Package) MediaRequestRemotePlayback(token int, serial string, session string, camNo int, date string, begin_time string, end_time string, serverId int) {
if end_time == "" {
e.Payload = map[string]any{
"MODULE": "MEDIASTREAMMODEL",
"OPERATION": "REQUESTREMOTEPLAYBACK",
"PARAMETER": map[string]any{
"STREAMNAME": "PLAYBACK" + "_" + fmt.Sprint(serial) + "_" + fmt.Sprint(camNo) + "_" + fmt.Sprint(serverId),
"STREAMTYPE": 1, // main stream
"VIDEOTYPE": 2, // common files
"CHANNEL": 1 << (camNo - 1),
"STARTTIME": date + begin_time,
"IPANDPORT": ip + ":12092",
"SERIAL": token,
"PBST": 0,
},
"SESSION": session,
}
} else {
e.Payload = map[string]any{
"MODULE": "MEDIASTREAMMODEL",
"OPERATION": "REQUESTREMOTEPLAYBACK",
"PARAMETER": map[string]any{
"STREAMNAME": "PLAYBACK" + "_" + fmt.Sprint(serial) + "_" + fmt.Sprint(camNo) + "_" + fmt.Sprint(serverId),
"STREAMTYPE": 1, // main stream
"VIDEOTYPE": 2, // common files
"CHANNEL": 1 << (camNo - 1),
"STARTTIME": date + begin_time,
"ENDTIME": date + end_time,
"IPANDPORT": ip + ":12092",
"SERIAL": token,
"PBST": 0,
},
"SESSION": session,
}
}
}
// main server util
func (e *Package) ControlRemotePlayback(token int, serial string, session string, camNo int, date string, begin_time string, end_time string, serverId int) {
e.Payload = map[string]any{
"MODULE": "MEDIASTREAMMODEL",
"OPERATION": "CONTROLREMOTEPLAYBACK",
"PARAMETER": map[string]any{
"STREAMNAME": fmt.Sprint(serial) + "_" + fmt.Sprint(camNo) + "_" + fmt.Sprint(serverId),
"SERIAL": token,
"PALYBACKCMD": 5, // main stream
"CHANNEL": 268435455, // common files
},
"SESSION": session,
}
}
*/

View File

@ -8,6 +8,9 @@ type RIP struct {
LN string // Название линии LN string // Название линии
DID string // номер водительского удостоверения DID string // номер водительского удостоверения
DNAME string // ФИО водителя DNAME string // ФИО водителя
REC int // Тип записи видоепотока (0 - беск запись, 1 - запись по событиям, 2 - по расписанию)
PREREC int // Длительность предтревожной записи
POSTREC int // Длительность послетревожной записи
} }
type VS struct { type VS struct {
@ -71,9 +74,11 @@ type NEC struct {
AEN int // звук (вкл/выкл) AEN int // звук (вкл/выкл)
VEN int // видео (вкл/выкл) VEN int // видео (вкл/выкл)
BR int // битрейт BR int // битрейт
BRM int
ECT int // кодировка ECT int // кодировка
FR int // фреймрейт FR int // фреймрейт
FT int // тип кадров FT int // тип кадров
KFI int
QLT int // качество трансляции QLT int // качество трансляции
RST int // разрешение RST int // разрешение
} }
@ -95,8 +100,10 @@ type VEC struct {
ECT int // кодировка ECT int // кодировка
FR int // фреймрейт FR int // фреймрейт
QLT int // качество записи QLT int // качество записи
RM int // режим работы
AEN int // звук (вкл/выкл) AEN int // звук (вкл/выкл)
ALT int // качество видео при тревоге ALT int // качество видео при тревоге
BRM int // режим битрейта
} }
type EOSD struct { type EOSD struct {
@ -134,6 +141,18 @@ type COSD struct {
Y int Y int
} }
type MAIN struct {
VEN uint // 1/0
RST uint // разрешение
ECT uint // кодировка
FR uint // фреймрейт
QLT uint // качество записи
RM uint // режим работы (0 - всегда, 1 - по расписанию, 2 - по тревоге)
AEN uint // звук
ALT uint // качество видео при тревоге
BRM uint // режим битрейта
}
type IOP struct { type IOP struct {
EN int EN int
AS int AS int
@ -280,13 +299,12 @@ type REDEV struct {
CONTYPE int // ??? CONTYPE int // ???
SW int // Источник поступаемого сигнала SW int // Источник поступаемого сигнала
REPORT int // Порт камеры REPORT int // Порт камеры
REIP int // IP камеры REIP string // IP камеры
ID int // Идентификатор камеры ID string // Идентификатор камеры
RENAME string // Название устройства RENAME string // Название устройства
USER string // Имя пользователя USER string // Имя пользователя
PWD string // Пароль PWD string // Пароль
URL string // ??? URL string // ???
CMDPORT string // ???
} }
// 7.29 // 7.29
@ -340,9 +358,23 @@ type CG struct {
AT uint // Answer automatically when exceed time AT uint // Answer automatically when exceed time
} }
type RSI struct {
E int64 // End time in seconds
S int64 // Start time in seconds
}
type RCP struct {
RSI [][]RSI // Recording type parameters (array for cameras number, 7 for week days)
}
type RP struct {
RCP []RCP // Single channel recording period parameter list
}
type Setting struct { type Setting struct {
KEYS KEYS `json:"KEYS,omitempty"` KEYS KEYS `json:"KEYS,omitempty"`
RIP RIP `json:"RIP,omitempty"` RIP RIP `json:"RIP,omitempty"`
RP RP `json:"RP,omitempty"`
TIMEP TIMEP `json:"TIMEP,omitempty"` TIMEP TIMEP `json:"TIMEP,omitempty"`
ATP ATP `json:"ATP,omitempty"` ATP ATP `json:"ATP,omitempty"`
SSP SSP `json:"SSP,omitempty"` SSP SSP `json:"SSP,omitempty"`

View File

@ -6,10 +6,18 @@ import (
"encoding/hex" "encoding/hex"
) )
func GenerateVerifyKey(key string) string { func generateHMAC(key string, data string) string {
mac := hmac.New(md5.New, []byte(key)) mac := hmac.New(md5.New, []byte(key))
mac.Write([]byte(key)) mac.Write([]byte(data))
return hex.EncodeToString(mac.Sum(nil)) return hex.EncodeToString(mac.Sum(nil))
} }
func GenerateVerifyKey(key string) string {
return generateHMAC(key, key)
}
func GeneratePasswordHash(password string) string {
return generateHMAC("streaming", password)
}