视频会议保存

This commit is contained in:
duoaohui
2026-05-18 19:42:55 +08:00
parent 315884685f
commit ac8ec4c903
41 changed files with 5069 additions and 39 deletions

View File

@@ -0,0 +1,44 @@
package model
import "time"
// MeetingRecording 会议录制记录,对应 meeting_recordings 表
//
// 生命周期状态:
// - recording → 录制进行中media-server ffmpeg 进程在跑,尚未上传)
// - uploading → media-server 已停止录制Go 后端正在拉取本地 mp4 上传到 MinIO
// - ready → MinIO 上传完成FileURL 可用
// - failed → 录制 / 上传失败FailureReason 记录原因
//
// RemoteID 是 media-server 内部的 recordingIdhex32Go 侧 stop / 状态反查时使用。
// 唯一索引落在 RemoteID 上,保证一对一关系。
type MeetingRecording struct {
ID int64 `json:"id" gorm:"primaryKey;autoIncrement"`
RoomID int64 `json:"room_id" gorm:"not null;index:idx_meeting_recordings_room"`
RoomCode string `json:"room_code" gorm:"size:32;not null;index:idx_meeting_recordings_room_code"`
StartedBy int64 `json:"started_by" gorm:"not null;index:idx_meeting_recordings_started_by"`
Status string `json:"status" gorm:"size:16;not null;default:recording"` // recording / uploading / ready / failed
RemoteID string `json:"remote_id" gorm:"size:64;uniqueIndex"` // media-server 侧 recordingId
FileURL string `json:"file_url" gorm:"size:512"`
FileObject string `json:"file_object" gorm:"size:255"` // MinIO 内的对象 Key便于鉴权下载/删除
SizeBytes int64 `json:"size_bytes" gorm:"default:0"`
DurationSec int `json:"duration_sec" gorm:"default:0"`
FailureReason string `json:"failure_reason" gorm:"size:255"`
StartedAt time.Time `json:"started_at" gorm:"not null;type:timestamp(0)"`
StoppedAt *time.Time `json:"stopped_at" gorm:"type:timestamp(0)"`
CreatedAt time.Time `json:"created_at" gorm:"not null;autoCreateTime;type:timestamp(0)"`
UpdatedAt time.Time `json:"updated_at" gorm:"not null;autoUpdateTime;type:timestamp(0)"`
}
// TableName 指定数据库表名
func (MeetingRecording) TableName() string {
return "meeting_recordings"
}
// 录制状态常量;与表中 status 字段一一对应
const (
MeetingRecordingStatusRecording = "recording"
MeetingRecordingStatusUploading = "uploading"
MeetingRecordingStatusReady = "ready"
MeetingRecordingStatusFailed = "failed"
)