Compare commits
	
		
			8 Commits
		
	
	
		
			v2.1.2-alp
			...
			v2.1.10-al
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						
						
							
						
						91cb2927e3
	
				 | 
					
					
						|||
| 
						
						
							
						
						1f5248ac87
	
				 | 
					
					
						|||
| 
						
						
							
						
						ec06ee84de
	
				 | 
					
					
						|||
| 
						
						
							
						
						92e59cf650
	
				 | 
					
					
						|||
| 
						
						
							
						
						5c5496fa7f
	
				 | 
					
					
						|||
| 
						
						
							
						
						2737e23369
	
				 | 
					
					
						|||
| 
						
						
							
						
						b4ec470e2f
	
				 | 
					
					
						|||
| 
						
						
							
						
						6012bccf64
	
				 | 
					
					
						
@@ -88,3 +88,48 @@ type EventModelGetAlarmingResponse struct {
 | 
			
		||||
	VideoLossAlarmMask   uint `json:"VL_AT"`
 | 
			
		||||
	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"`
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -51,110 +51,3 @@ type MediaStreamModelControlStreamRequest struct {
 | 
			
		||||
	AudioValid uint       `json:"AUDIOVALID,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,
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,9 @@ type RIP struct {
 | 
			
		||||
	LN      string // Название линии
 | 
			
		||||
	DID     string // номер водительского удостоверения
 | 
			
		||||
	DNAME   string // ФИО водителя
 | 
			
		||||
	REC     int    // Тип записи видоепотока (0 - беск запись, 1 - запись по событиям, 2 - по расписанию)
 | 
			
		||||
	PREREC  int    // Длительность предтревожной записи
 | 
			
		||||
	POSTREC int    // Длительность послетревожной записи
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type VS struct {
 | 
			
		||||
@@ -71,9 +74,11 @@ type NEC struct {
 | 
			
		||||
	AEN int // звук (вкл/выкл)
 | 
			
		||||
	VEN int // видео (вкл/выкл)
 | 
			
		||||
	BR  int // битрейт
 | 
			
		||||
	BRM int
 | 
			
		||||
	ECT int // кодировка
 | 
			
		||||
	FR  int // фреймрейт
 | 
			
		||||
	FT  int // тип кадров
 | 
			
		||||
	KFI int
 | 
			
		||||
	QLT int // качество трансляции
 | 
			
		||||
	RST int // разрешение
 | 
			
		||||
}
 | 
			
		||||
@@ -95,8 +100,10 @@ type VEC struct {
 | 
			
		||||
	ECT int // кодировка
 | 
			
		||||
	FR  int // фреймрейт
 | 
			
		||||
	QLT int // качество записи
 | 
			
		||||
	RM  int // режим работы
 | 
			
		||||
	AEN int // звук (вкл/выкл)
 | 
			
		||||
	ALT int // качество видео при тревоге
 | 
			
		||||
	BRM int // режим битрейта
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type EOSD struct {
 | 
			
		||||
@@ -134,6 +141,18 @@ type COSD struct {
 | 
			
		||||
	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 {
 | 
			
		||||
	EN  int
 | 
			
		||||
	AS  int
 | 
			
		||||
@@ -280,13 +299,12 @@ type REDEV struct {
 | 
			
		||||
	CONTYPE int    // ???
 | 
			
		||||
	SW      int    // Источник поступаемого сигнала
 | 
			
		||||
	REPORT  int    // Порт камеры
 | 
			
		||||
	REIP    int    // IP камеры
 | 
			
		||||
	ID      int    // Идентификатор камеры
 | 
			
		||||
	REIP    string // IP камеры
 | 
			
		||||
	ID      string // Идентификатор камеры
 | 
			
		||||
	RENAME  string // Название устройства
 | 
			
		||||
	USER    string // Имя пользователя
 | 
			
		||||
	PWD     string // Пароль
 | 
			
		||||
	URL     string // ???
 | 
			
		||||
	CMDPORT string // ???
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// 7.29
 | 
			
		||||
@@ -340,9 +358,23 @@ type CG struct {
 | 
			
		||||
	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 {
 | 
			
		||||
	KEYS      KEYS      `json:"KEYS,omitempty"`
 | 
			
		||||
	RIP       RIP       `json:"RIP,omitempty"`
 | 
			
		||||
	RP        RP        `json:"RP,omitempty"`
 | 
			
		||||
	TIMEP     TIMEP     `json:"TIMEP,omitempty"`
 | 
			
		||||
	ATP       ATP       `json:"ATP,omitempty"`
 | 
			
		||||
	SSP       SSP       `json:"SSP,omitempty"`
 | 
			
		||||
 
 | 
			
		||||
@@ -6,10 +6,18 @@ import (
 | 
			
		||||
	"encoding/hex"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func GenerateVerifyKey(key string) string {
 | 
			
		||||
func generateHMAC(key string, data string) string {
 | 
			
		||||
	mac := hmac.New(md5.New, []byte(key))
 | 
			
		||||
 | 
			
		||||
	mac.Write([]byte(key))
 | 
			
		||||
	mac.Write([]byte(data))
 | 
			
		||||
 | 
			
		||||
	return hex.EncodeToString(mac.Sum(nil))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GenerateVerifyKey(key string) string {
 | 
			
		||||
	return generateHMAC(key, key)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func GeneratePasswordHash(password string) string {
 | 
			
		||||
	return generateHMAC("streaming", password)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user