Revert "fix: snap timeinterval crash"

This reverts commit f440d4cbbf.
This commit is contained in:
banshan
2025-01-05 16:19:11 +08:00
committed by GitHub
parent 7f2712ae71
commit d74b9efdbf
4 changed files with 32 additions and 42 deletions

View File

@@ -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,

View File

@@ -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
}

View File

@@ -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

View File

@@ -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 加载字体文件