¿Cómo corresponder con la información de alarma y el video de alarma de la plataforma de video multimedia de transmisión EasyGBS del protocolo estándar nacional GB28181?

En la publicación anterior del blog, mencionamos que la plataforma de video EasyGBS ha desarrollado una función de alarma.Cuando se detecta una situación anormal, el sistema automáticamente tomará una instantánea y registrará la hora. Sin embargo, antes de que se lanzara esta función, se encontraron algunos problemas, como la situación en la que el video y el registro de alarma no coincidían cuando se interceptó la alarma. Hoy compartiré con ustedes las soluciones a problemas en el proceso de desarrollo.

Porque la información de la alarma es en tiempo real y el video necesita la plataforma EasyGBS para guardar. El video de acceso se guarda 20 segundos después de que llega la información de la alarma. En este momento, habrá una diferencia de tiempo entre el video guardado y el registro de alarma. En esta diferencia de tiempo, se puede generar nueva información de alarma, por lo que el registro de alarma y el video tendrán una desviación .

¿Cómo evitar esta desviación? Hemos elegido el método de asignar una identificación al video de alarma, es decir, al agregar el video de alarma de almacenamiento, pasar el id del registro de alarma y asociar el video de alarma con el registro de alarma uno por uno. El siguiente es el código de referencia:

modelsAlarm := &models.Alarm{
			DeviceID:      serial,
			ChannelID:     deviceId,
			DeviceName:    device.Name,
			ChannelName:   channels.Name,
			AlarmPriority: alarmPriority,
			AlarmTime:     aTime,
			AlarmMethod:   alarmMethod,
			AlarmType:     alarmType,
			AlarmSnap:     "",
		}

		db.SQLite.Create(modelsAlarm)
		fmt.Println(modelsAlarm.ID)
		go doAlarmSnap(c, *channels, serial, modelsAlarm.ID)

Luego agregue la información de identificación de la alarma al nombre del archivo de video guardado.

alarmRecordKey := fmt.Sprintf("alarm_record_%s_%s", msess.GetDeviceID(), msess.GetChannelID())
   			alarmRecordURL := fmt.Sprintf("/alarmrecords/alarm_%d_record_%s_%s.mp4", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
   			oldFileName := fmt.Sprintf("alarm_%d_record_%s_%s.h264", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
   			newFileName := fmt.Sprintf("alarm_%d_record_%s_%s.mp4", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
   			var alarmRecord = redis.Client.Get(alarmRecordKey).Val()
   			if alarmRecord != "" {
   				inFile := filepath.Join(utils.DataDir(), "alarmrecords", oldFileName)
   				outFile := filepath.Join(utils.DataDir(), "alarmrecords", newFileName)
   				if _, err := os.Stat(inFile); os.IsNotExist(err) {
   					sms_log.Log.Printf("alarm record h264 to mp4 error, %v", err)
   				}
   				ff.H264ToMP4(inFile, outFile)
   				redis.Client.Del(alarmRecordKey)
   				err := models.UpdateAlarmRecord(msess.AlarmID, alarmRecordURL)
   				if err != nil {
   					sms_log.Log.Printf("alarm record end error, %v", err)
   				}
   				msess.AlarmID = 0
   				if err := os.Remove(inFile); err != nil {
   					log.Println(err)
   				}

Después de agregar los dos códigos anteriores, la información del archivo de video guardado lleva la identificación de la alarma, que puede corresponder al registro de la alarma.

El desarrollo de la función de alarma no es solo para permitir que el personal de operación y mantenimiento comprenda las alarmas importantes por primera vez, sino también para dar una nueva dirección al desarrollo del enlace de alarma. Después de que se activa el sistema de alarma, el host de alarma envía una señal al módulo de enlace. Encienda el equipo de monitoreo y el reflector, y conecte el equipo de monitoreo al canal AI (entrada analógica) o DI (entrada de interruptor) del host de monitoreo. Una vez que el host de monitoreo recibe la señal de alarma del equipo de monitoreo (el mecanismo de alarma analógica es que el voltaje excede el ajuste preestablecido El rango de umbral establecido genera una alarma.

En una etapa posterior, el equipo de I + D de TSINGSEE Qingxi Video también mejorará la función de enlace de alarma de la plataforma de video EasyGBS de la plataforma de video estándar nacional GB28181 y optimizará la función EasyGBS.

EasyDarwin es una comunidad de código abierto desarrollada y mantenida por el equipo de transmisión de video doméstico TSINGSEE Qingxi Video. Desde su establecimiento y desarrollo en diciembre de 2012, se ha expandido desde la forma original de servidor de medios de transmisión de servicio único al proyecto actual de código abierto de la arquitectura de la plataforma en la nube.

Supongo que te gusta

Origin blog.csdn.net/EasyGBS/article/details/108753049
Recomendado
Clasificación