From d74b9efdbfffc22c8cc4bd96fd35a50b4173fa2b Mon Sep 17 00:00:00 2001 From: banshan Date: Sun, 5 Jan 2025 16:19:11 +0800 Subject: [PATCH] Revert "fix: snap timeinterval crash" This reverts commit f440d4cbbf81edaa854716984282733d44044531. --- plugin/snap/api.go | 2 +- plugin/snap/index.go | 36 ++++++++++++++++++++---------------- plugin/snap/pkg/transform.go | 21 ++++----------------- plugin/snap/pkg/watermark.go | 15 +++++++-------- 4 files changed, 32 insertions(+), 42 deletions(-) diff --git a/plugin/snap/api.go b/plugin/snap/api.go index 323b0d0..a7520ed 100755 --- a/plugin/snap/api.go +++ b/plugin/snap/api.go @@ -60,7 +60,7 @@ func (p *SnapPlugin) snap(streamPath string) (*bytes.Buffer, error) { Text: snap_pkg.GlobalWatermarkConfig.Text, Font: snap_pkg.GlobalWatermarkConfig.Font, FontSize: snap_pkg.GlobalWatermarkConfig.FontSize, - Spacing: snap_pkg.GlobalWatermarkConfig.FontSpacing, + Spacing: 2, RowSpacing: 10, ColSpacing: 20, Rows: 1, diff --git a/plugin/snap/index.go b/plugin/snap/index.go index 08d2943..14da764 100755 --- a/plugin/snap/index.go +++ b/plugin/snap/index.go @@ -15,18 +15,23 @@ import ( snap "m7s.live/v5/plugin/snap/pkg" ) +const ( + SnapModeTimeInterval = iota + SnapModeIFrameInterval + SnapModeManual +) + var _ = m7s.InstallPlugin[SnapPlugin](snap.NewTransform) type SnapPlugin struct { m7s.Plugin Watermark struct { - Text string `default:"" desc:"水印文字内容"` - FontPath string `default:"" desc:"水印字体文件路径"` - FontColor string `default:"rgba(255,165,0,1)" desc:"水印字体颜色,支持rgba格式"` - FontSize float64 `default:"36" desc:"水印字体大小"` - FontSpacing float64 `default:"2" desc:"水印字体间距"` - OffsetX int `default:"0" desc:"水印位置X"` - OffsetY int `default:"0" desc:"水印位置Y"` + Text string `default:"" desc:"水印文字内容"` + FontPath string `default:"" desc:"水印字体文件路径"` + FontColor string `default:"rgba(255,165,0,1)" desc:"水印字体颜色,支持rgba格式"` + FontSize float64 `default:"36" desc:"水印字体大小"` + OffsetX int `default:"0" desc:"水印位置X"` + OffsetY int `default:"0" desc:"水印位置Y"` } `desc:"水印配置"` // 定时任务相关配置 TimeInterval time.Duration `default:"1m" desc:"截图间隔"` @@ -42,7 +47,7 @@ type SnapPlugin struct { // OnInit 在插件初始化时添加定时任务 func (p *SnapPlugin) OnInit() (err error) { // 检查 Mode 的值范围 - if p.Mode < snap.SnapModeTimeInterval || p.Mode > snap.SnapModeManual { + if p.Mode < SnapModeTimeInterval || p.Mode > SnapModeManual { p.Error("invalid snap mode", "mode", p.Mode, "valid_range", "0-1", @@ -72,13 +77,12 @@ func (p *SnapPlugin) OnInit() (err error) { // 初始化全局水印配置 snap.GlobalWatermarkConfig = snap.WatermarkConfig{ - Text: p.Watermark.Text, - FontPath: p.Watermark.FontPath, - FontSize: p.Watermark.FontSize, - FontSpacing: p.Watermark.FontSpacing, - FontColor: color.RGBA{}, // 将在下面解析 - OffsetX: p.Watermark.OffsetX, - OffsetY: p.Watermark.OffsetY, + Text: p.Watermark.Text, + FontPath: p.Watermark.FontPath, + FontSize: p.Watermark.FontSize, + FontColor: color.RGBA{}, // 将在下面解析 + OffsetX: p.Watermark.OffsetX, + OffsetY: p.Watermark.OffsetY, } if p.Watermark.Text != "" { @@ -122,7 +126,7 @@ func (p *SnapPlugin) OnInit() (err error) { } //如果截图模式不是时间模式,则不加定时任务 - if p.Mode != snap_pkg.SnapModeTimeInterval { + if p.Mode != 0 { return } diff --git a/plugin/snap/pkg/transform.go b/plugin/snap/pkg/transform.go index 1b2914c..80f8352 100644 --- a/plugin/snap/pkg/transform.go +++ b/plugin/snap/pkg/transform.go @@ -17,12 +17,6 @@ import ( "m7s.live/v5/pkg/task" ) -const ( - SnapModeTimeInterval = iota - SnapModeIFrameInterval - SnapModeManual -) - // GetVideoFrame 获取视频帧数据 func GetVideoFrame(streamPath string, server *m7s.Server) (pkg.AnnexB, *pkg.AVTrack, error) { // 获取发布者 @@ -177,11 +171,11 @@ func (t *Transformer) Start() (err error) { if t.TransformJob.Plugin.Config.Has("Mode") { t.snapMode = t.TransformJob.Plugin.Config.Get("Mode").GetValue().(int) } else { - t.snapMode = SnapModeIFrameInterval // 默认使用关键帧模式 + t.snapMode = 1 // 默认使用关键帧模式 } // 检查snapmode是否有效 - if t.snapMode != SnapModeIFrameInterval && t.snapMode != SnapModeTimeInterval { + if t.snapMode != 0 && t.snapMode != 1 { t.Debug("invalid snap mode, skip snapshot", "mode", t.snapMode, ) @@ -215,7 +209,7 @@ func (t *Transformer) Start() (err error) { } // 如果是时间间隔模式且间隔时间不为0,则跳过订阅模式 - if t.snapMode == SnapModeTimeInterval && t.snapTimeInterval != 0 { + if t.snapMode == 0 && t.snapTimeInterval != 0 { t.Info("snap interval is set, skipping subscriber mode", "interval", t.snapTimeInterval, "save_path", t.savePath, @@ -229,19 +223,12 @@ func (t *Transformer) Start() (err error) { func (t *Transformer) Go() error { // 检查snapmode是否有效 - if t.snapMode != SnapModeIFrameInterval && t.snapMode != SnapModeTimeInterval { + if t.snapMode != 0 && t.snapMode != 1 { t.Debug("invalid snap mode, skip snapshot", "mode", t.snapMode, ) return nil } - if t.snapMode == SnapModeTimeInterval && t.snapTimeInterval != 0 { - t.Info("snap interval is set, skipping subscriber mode", - "interval", t.snapTimeInterval, - "save_path", t.savePath, - ) - return nil - } // 1. 通过 TransformJob 获取 Subscriber subscriber := t.TransformJob.Subscriber diff --git a/plugin/snap/pkg/watermark.go b/plugin/snap/pkg/watermark.go index 7c500ca..c012194 100644 --- a/plugin/snap/pkg/watermark.go +++ b/plugin/snap/pkg/watermark.go @@ -22,14 +22,13 @@ var ( // WatermarkConfig 水印配置 type WatermarkConfig struct { - Text string // 水印文字 - FontPath string // 字体文件路径 - FontSize float64 // 字体大小 - FontColor color.RGBA // 字体颜色 - FontSpacing float64 // 字体间距 - OffsetX int // X轴偏移 - OffsetY int // Y轴偏移 - Font *truetype.Font // 缓存的字体对象 + Text string // 水印文字 + FontPath string // 字体文件路径 + FontSize float64 // 字体大小 + FontColor color.RGBA // 字体颜色 + OffsetX int // X轴偏移 + OffsetY int // Y轴偏移 + Font *truetype.Font // 缓存的字体对象,改为导出字段 } // LoadFont 加载字体文件