This commit is contained in:
madao
2025-02-05 19:49:09 +08:00
parent 684f045e08
commit 3aefddd1e2
10 changed files with 169 additions and 131 deletions

View File

@@ -59,7 +59,7 @@ CREATE TABLE public.camera_record (
start_time timestamp NULL, -- 开始时间
end_time timestamp NULL, -- 结束时间
id_camera varchar(255) NOT NULL, -- 摄像头主属性
has_audio bool NULL, -- 是否有音频
has_audio bool NULL DEFAULT true, -- 是否有音频
CONSTRAINT pk_camera_record PRIMARY KEY (id_camera_record)
);
COMMENT ON TABLE public.camera_record IS '摄像头记录';

View File

@@ -7,7 +7,7 @@ server:
port: 8080
static:
path: ./resources/static
use-https: true
use-https: false
cert:
private-key-path: ./resources/conf/cert/private_key.pem
cert-path: ./resources/conf/cert/certificate.crt

File diff suppressed because one or more lines are too long

View File

@@ -241,6 +241,7 @@ func (ffw *FileFlvWriter) flvWrite() {
FgTemp: true,
FgRemove: false,
Duration: 0,
HasAudio: hasAudio(ffw.codecs),
}
_, err = base_service.CameraRecordCreate(cameraRecord)
if err != nil {
@@ -255,6 +256,15 @@ func (ffw *FileFlvWriter) flvWrite() {
}
}
func hasAudio(streams []av.CodecData) bool {
for _, stream := range streams {
if stream.Type().IsAudio() {
return true
}
}
return false
}
func (ffw *FileFlvWriter) writeScriptTagData() {
var filters = []common.EqualFilter{{Name: "idCamera", Value: ffw.idCamera}, {Name: "tempFileName", Value: ffw.tempFileName}}
condition := common.GetEqualConditions(filters)

View File

@@ -14,6 +14,7 @@ import (
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin/fileflvmanager/fileflvreader"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/dto/vo/ext/flv_file"
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
)
@@ -113,13 +114,17 @@ func HttpFlvVODFileDuration(ctx *gin.Context) {
return
}
duration, err := fileflvreader.FlvDurationReadUntilErr(fileName)
durationInt, err := fileflvreader.FlvDurationReadUntilErr(fileName)
mediaInfo := flv_file.FlvMediaInfo{
Duration: uint32(durationInt),
HasAudio: true,
}
if err != nil {
logs.Error("file: %s get duration error", fileName)
logs.Error("file: %s get mediaInfo error", fileName)
http.Error(ctx.Writer, "Internal Server Error", http.StatusInternalServerError)
return
}
result := common.SuccessResultData(duration)
result := common.SuccessResultData(mediaInfo)
ctx.JSON(http.StatusOK, result)
}

View File

@@ -5,77 +5,84 @@ import (
)
func GetCameraRecordDesc() *common.EntityDesc {
var entityInfo = common.EntityInfo{
var entityInfo = common.EntityInfo {
Name: "CameraRecord",
DisplayName: "摄像头记录",
ClassName: "CameraRecord",
TableName: "camera_record",
BasePath: "entity::camera_record",
}
var idRecordAttributeInfo = &common.AttributeInfo{
var idCameraRecordAttributeInfo = &common.AttributeInfo {
ColumnName: "id_camera_record",
Name: "idCameraRecord",
DisplayName: "记录id",
DataType: "InternalPK",
ValueType: "string",
}
var createdAttributeInfo = &common.AttributeInfo{
};
var createdAttributeInfo = &common.AttributeInfo {
ColumnName: "created",
Name: "created",
DisplayName: "创建时间",
DataType: "DateTime",
ValueType: "DateTime",
}
var tempFileNameAttributeInfo = &common.AttributeInfo{
};
var tempFileNameAttributeInfo = &common.AttributeInfo {
ColumnName: "temp_file_name",
Name: "tempFileName",
DisplayName: "临时文件名称",
DataType: "String",
ValueType: "string",
}
var fgTempAttributeInfo = &common.AttributeInfo{
};
var fgTempAttributeInfo = &common.AttributeInfo {
ColumnName: "fg_temp",
Name: "fgTemp",
DisplayName: "临时文件标志",
DataType: "Boolean",
ValueType: "bool",
}
var fileNameAttributeInfo = &common.AttributeInfo{
};
var fileNameAttributeInfo = &common.AttributeInfo {
ColumnName: "file_name",
Name: "fileName",
DisplayName: "文件名称",
DataType: "String",
ValueType: "string",
}
var fgRemoveAttributeInfo = &common.AttributeInfo{
};
var fgRemoveAttributeInfo = &common.AttributeInfo {
ColumnName: "fg_remove",
Name: "fgRemove",
DisplayName: "文件删除标志",
DataType: "Boolean",
ValueType: "bool",
}
var durationAttributeInfo = &common.AttributeInfo{
};
var durationAttributeInfo = &common.AttributeInfo {
ColumnName: "duration",
Name: "duration",
DisplayName: "文件时长",
DataType: "Integer",
ValueType: "number",
}
var startTimeAttributeInfo = &common.AttributeInfo{
};
var startTimeAttributeInfo = &common.AttributeInfo {
ColumnName: "start_time",
Name: "startTime",
DisplayName: "开始时间",
DataType: "DateTime",
ValueType: "DateTime",
}
var endTimeAttributeInfo = &common.AttributeInfo{
};
var endTimeAttributeInfo = &common.AttributeInfo {
ColumnName: "end_time",
Name: "endTime",
DisplayName: "结束时间",
DataType: "DateTime",
ValueType: "DateTime",
}
var idCameraAttributeInfo = &common.AttributeInfo{
};
var hasAudioAttributeInfo = &common.AttributeInfo {
ColumnName: "has_audio",
Name: "hasAudio",
DisplayName: "是否有音频",
DataType: "Boolean",
ValueType: "bool",
};
var idCameraAttributeInfo = &common.AttributeInfo {
ColumnName: "id_camera",
Name: "idCamera",
DisplayName: "摄像头主属性",
@@ -85,8 +92,8 @@ func GetCameraRecordDesc() *common.EntityDesc {
OutEntityName: "Camera",
OutEntityPkAttributeName: "id",
OutEntityReversalAttributeName: "cameraRecords",
}
var cameraAttributeInfo = &common.AttributeInfo{
};
var cameraAttributeInfo = &common.AttributeInfo {
ColumnName: "",
Name: "camera",
DisplayName: "摄像头",
@@ -96,20 +103,22 @@ func GetCameraRecordDesc() *common.EntityDesc {
OutEntityName: "Camera",
OutEntityPkAttributeName: "id",
OutEntityReversalAttributeName: "cameraRecords",
}
var entityDesc = &common.EntityDesc{
};
var entityDesc = &common.EntityDesc {
EntityInfo: entityInfo,
PkAttributeInfo: idRecordAttributeInfo,
PkAttributeInfo: idCameraRecordAttributeInfo,
NormalFkIdAttributeInfos: []*common.AttributeInfo{
idCameraAttributeInfo,
},
NormalFkAttributeInfos: []*common.AttributeInfo{
cameraAttributeInfo,
},
NormalChildren: []*common.AttributeInfo{},
NormalOne2OneChildren: []*common.AttributeInfo{},
NormalChildren: []*common.AttributeInfo{
},
NormalOne2OneChildren: []*common.AttributeInfo{
},
AttributeInfoMap: map[string]*common.AttributeInfo{
"idCameraRecord": idRecordAttributeInfo,
"idCameraRecord": idCameraRecordAttributeInfo,
"created": createdAttributeInfo,
"tempFileName": tempFileNameAttributeInfo,
"fgTemp": fgTempAttributeInfo,
@@ -118,6 +127,7 @@ func GetCameraRecordDesc() *common.EntityDesc {
"duration": durationAttributeInfo,
"startTime": startTimeAttributeInfo,
"endTime": endTimeAttributeInfo,
"hasAudio": hasAudioAttributeInfo,
"idCamera": idCameraAttributeInfo,
"camera": cameraAttributeInfo,
},

View File

@@ -3,7 +3,6 @@ package entity
import (
"time"
)
// 摄像头记录
type CameraRecord struct {
// 记录id
@@ -24,6 +23,8 @@ type CameraRecord struct {
StartTime time.Time `orm:"column(start_time)" json:"startTime"`
// 结束时间:
EndTime time.Time `orm:"column(end_time)" json:"endTime"`
// 是否有音频
HasAudio bool `orm:"column(has_audio)" json:"hasAudio"`
// 摄像头主属性:
IdCamera string `orm:"column(id_camera)" json:"idCamera"`
// 摄像头:

View File

@@ -24,6 +24,8 @@ type CameraRecordPO struct {
StartTime time.Time `json:"startTime"`
// 结束时间:
EndTime time.Time `json:"endTime"`
// 是否有音频
HasAudio bool `json:"hasAudio"`
// 摄像头主属性:
IdCamera string `json:"idCamera"`
// 摄像头:

View File

@@ -24,6 +24,8 @@ type CameraRecordVO struct {
StartTime time.Time `json:"startTime"`
// 结束时间:
EndTime time.Time `json:"endTime"`
// 是否有音频
HasAudio bool `json:"hasAudio"`
// 摄像头主属性:
IdCamera string `json:"idCamera"`
// 摄像头:
@@ -52,4 +54,12 @@ type CameraVO struct {
Live bool `json:"live"`
// 创建时间:
Created time.Time `json:"created"`
// 加密标志:
FgEncrypt bool `json:"fgEncrypt"`
// 被动推送rtmp标志
FgPassive bool `json:"fgPassive"`
// rtmp识别码:
RtmpAuthCode string `json:"rtmpAuthCode"`
// 摄像头类型:
CameraType string `json:"cameraType"`
}

View File

@@ -59,7 +59,7 @@ func CameraRecordBatchDelete(es []entity.CameraRecord) (i int64, err error) {
func CameraRecordSelectById(id string) (model entity.CameraRecord, err error) {
o := orm.NewOrm()
model = entity.CameraRecord{IdCameraRecord: id}
model = entity.CameraRecord{ IdCameraRecord: id }
err = o.Read(&model)
@@ -96,7 +96,7 @@ func CameraRecordSelectByIds(ids []string) (models []entity.CameraRecord, err er
// execute the raw query string
_, err_query := o.Raw(sqlStr, params...).QueryRows(&models)
if err_query != nil {
err = fmt.Errorf("selectByIds error: %v", err_make_sql)
err = fmt.Errorf("selectByIds error: %v", err_query)
return
}
@@ -118,7 +118,7 @@ func CameraRecordFindCollectionByCondition(condition common.AqCondition) (models
// execute the raw query string
_, err_query := o.Raw(sqlStr, params...).QueryRows(&models)
if err_query != nil {
err = fmt.Errorf("findCollectionByCondition error: %v", err_make_sql)
err = fmt.Errorf("findCollectionByCondition error: %v", err_query)
return
}
return
@@ -140,7 +140,7 @@ func CameraRecordFindOneByCondition(condition common.AqCondition) (model entity.
models := make([]entity.CameraRecord, 0)
_, err_query := o.Raw(sqlStr, params...).QueryRows(&models)
if err_query != nil {
err = fmt.Errorf("findOneByCondition error: %v", err_make_sql)
err = fmt.Errorf("findOneByCondition error: %v", err_query)
return
}
if len(models) < 1 {
@@ -184,7 +184,7 @@ func CameraRecordFindPageByCondition(aqPageInfoInput common.AqPageInfoInput) (pa
models := make([]entity.CameraRecord, 0)
_, err_query := o.Raw(pageSqlStr, params...).QueryRows(&models)
if err_query != nil {
err = fmt.Errorf("findPageByCondition error: %v", err_make_sql)
err = fmt.Errorf("findPageByCondition error: %v", err_query)
return
}
dataList := make([]interface{}, 0)