Snap 插件 
Snap 插件提供了对流媒体的截图功能,支持定时截图、按关键帧截图以及手动触发截图。同时支持水印功能和历史截图查询。
配置说明 
yaml
snap:
  snapwatermark:
    text: ""              # 水印文字内容
    fontpath: ""          # 水印字体文件路径
    fontcolor: "rgba(255,165,0,1)" # 水印字体颜色,支持rgba格式
    fontsize: 36          # 水印字体大小
    offsetx: 0           # 水印位置X偏移
    offsety: 0           # 水印位置Y偏移
  snaptimeinterval: 1m   # 截图时间间隔,默认1分钟
  snapsavepath: "snaps"  # 截图保存路径
  filter: ".*"           # 截图流过滤器,支持正则表达式
  snapiframeinterval: 3  # 间隔多少帧截图
  snapmode: 1            # 截图模式:0-时间间隔,1-关键帧间隔 2-HTTP请求模式(手动触发)
  snapquerytimedelta: 3  # 查询截图时允许的最大时间差(秒)HTTP API 
1. 手动触发截图 
http
GET /{streamPath}参数说明:
streamPath: 流路径
响应:
- 成功:返回 JPEG 图片
 - 失败:返回错误信息
 
2. 查询历史截图 
http
GET /query?streamPath={streamPath}&snapTime={timestamp}参数说明:
streamPath: 流路径snapTime: Unix时间戳(秒)
响应:
- 成功:返回最接近请求时间的 JPEG 图片
 - 失败:返回错误信息 
- 404:未找到截图或时间差超出配置范围
 - 400:参数错误
 - 500:服务器内部错误
 
 
截图模式说明 
时间间隔模式 (snapmode: 0) 
- 按照配置的 
timeinterval定时对流进行截图 - 适合需要固定时间间隔截图的场景
 
关键帧间隔模式 (snapmode: 1) 
- 按照配置的 
iframeinterval对关键帧进行截图 - 适合需要按视频内容变化进行截图的场景
 
HTTP请求模式 (snapmode: 2) 
- 通过 HTTP API 手动触发截图
 - 适合需要实时获取画面的场景
 
水印功能 
支持为截图添加文字水印,可配置:
- 水印文字内容
 - 字体文件
 - 字体颜色(RGBA格式)
 - 字体大小
 - 位置偏移
 
时间格式化水印 
水印文本支持时间格式化功能,使用 $T{format} 语法,其中 format 为 Go 的时间格式化字符串。
常用时间格式示例:
$T{2006-01-02}- 显示当前日期,如:2024-01-20$T{15:04:05}- 显示当前时间,如:14:30:45$T{2006-01-02 15:04:05}- 显示完整的日期时间,如:2024-01-20 14:30:45$T{01/02/2006}- 显示美式日期,如:01/20/2024$T{Mon 02 Jan}- 显示简短日期,如:Sat 20 Jan
配置示例:
yaml
snap:
  watermark:
    text: "测试水印 $T{2006-01-02 15:04:05}"
    fontpath: "/path/to/font.ttf"
    fontcolor: "rgba(255,0,0,0.5)"
    fontsize: 48
    offsetx: 20
    offsety: 20
  mode: 0
  timeinterval: 1m数据库记录 
每次截图都会在数据库中记录以下信息:
- 流名称(StreamName)
 - 截图模式(SnapMode)
 - 截图时间(SnapTime)
 - 截图路径(SnapPath)
 - 创建时间(CreatedAt)
 
使用示例 
- 基础配置示例:
 
yaml
snap:
  timeinterval: 30s
  savepath: "./snapshots"
  mode: 1
  iframeinterval: 5- 带水印的配置示例:
 
yaml
snap:
  watermark:
    text: "测试水印"
    fontpath: "/path/to/font.ttf"
    fontcolor: "rgba(255,0,0,0.5)"
    fontsize: 48
    offsetx: 20
    offsety: 20
  mode: 0
  timeinterval: 1m- API调用示例:
 
bash
# 手动触发截图
curl http://localhost:8080/snap/live/stream1
# 查询历史截图
curl http://localhost:8080/snap/query?streamPath=live/stream1&snapTime=1677123456