mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
@@ -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,
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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 加载字体文件
|
||||
|
||||
Reference in New Issue
Block a user