跳转到内容

MP4 录制插件

MP4 插件提供流媒体录制和点播回放功能。支持标准 MP4 和 fMP4(Fragmented MP4)两种格式,可通过 HTTP API 控制录制的启停,并内置自动清理和损坏恢复机制。

Cargo.toml
features = ["mp4"]

config.yaml 中配置 MP4 插件:

mp4:
enable: true
record_path: "./recordings" # 录制文件存储目录
fragment: false # 是否启用 fMP4 格式
fragment_duration: 5 # fMP4 分片时长(秒)
max_file_size: 0 # 单文件最大字节数(0 = 不限)
max_duration: 0 # 单次录制最大时长/秒(0 = 不限)
before_duration: 10 # 事件录制:事件前缓冲时长(秒)
after_duration: 10 # 事件录制:事件后延续时长(秒)
expire_days: 0 # 自动删除 N 天前的录制(0 = 不删除)
disk_max_percent: 0 # 磁盘占用上限百分比(0 = 不限)
auto_recovery: true # 自动恢复损坏的录制文件
filename_pattern: "{stream}_{date}_{time}.mp4" # 文件命名模板

filename_pattern 支持以下变量:

变量说明示例
{stream}流路径(/ 替换为 _live_camera01
{date}日期20260318
{time}时间143025
{timestamp}Unix 时间戳1742291425

所有接口挂载在 /mp4/ 路由前缀下。

POST /mp4/start/{stream_path}

开始录制指定流。如果该流已在录制中,返回 already_recording 状态。

请求示例:

Terminal window
curl -X POST http://localhost:8080/mp4/start/live/camera01

响应示例:

{
"status": "started",
"stream": "live/camera01"
}
POST /mp4/stop/{stream_path}

停止指定流的录制。录制文件自动写入磁盘并(如配置了数据库)保存元信息到数据库。

请求示例:

Terminal window
curl -X POST http://localhost:8080/mp4/stop/live/camera01

响应示例:

{
"status": "stopped",
"stream": "live/camera01"
}
GET /mp4/status/{stream_path}

查询指定流是否正在录制。

响应示例:

{
"stream": "live/camera01",
"recording": true
}
GET /mp4/list

返回当前所有正在进行的录制任务。

响应示例:

{
"recordings": ["live/camera01", "live/camera02"],
"count": 2
}
GET /mp4/records

查询已完成的录制记录列表(需配置数据库支持)。

响应示例:

{
"status": "success",
"records": [],
"count": 0
}
GET /mp4/vod

列出可供点播的 MP4 文件。

GET /mp4/vod/{filename}

直接播放指定的 MP4 录制文件,响应 Content-Type: video/mp4,支持 Accept-Ranges 头用于断点续传。

请求示例:

Terminal window
curl http://localhost:8080/mp4/vod/live_camera01_20260318_143025.mp4 -o output.mp4
GET /mp4/

返回插件版本和可用接口列表。

当配置了 expire_daysdisk_max_percent 后,MP4 插件会每小时自动执行一次清理任务:

  • 按天过期:删除超过 expire_days 天的录制文件
  • 按磁盘占比:当磁盘使用率超过 disk_max_percent 时,按时间从旧到新删除录制文件

MP4 插件通过 EngineContext 获取 DatabaseApi,支持将录制元信息(流路径、文件路径、时长、大小、起止时间)持久化到数据库。支持 SQLite、MySQL、PostgreSQL 后端。

结合 crontab 插件可实现定时录制:

crontab:
jobs:
- name: "每日录制"
cron: "0 8 * * *"
action: "record_start"
stream: "live/camera01"
duration: 28800 # 录制 8 小时

联系我们

微信公众号:不卡科技 微信公众号二维码
腾讯频道:流媒体技术 腾讯频道二维码
QQ 频道:p0qq0crz08 QQ 频道二维码
QQ 群:751639168 QQ 群二维码