Skip to content

回放功能

概述

回放功能为音视频流提供强大的回放能力,支持多种输出格式,包括 MP4、FLV 和碎片化 MP4(fMP4)。该系统支持实时回放、点播回放、多段合并回放等多种回放模式,提供灵活的播放控制和丰富的播放器集成选项。

系统架构

主要特性

回放模式

  • 实时回放: 低延迟的实时流回放
  • 点播回放: 按需播放指定时间段内容
  • 多段合并: 自动合并多个录制片段
  • 循环播放: 连续循环播放模式

格式支持

  • MP4: 标准容器格式,支持完整文件下载
  • fMP4: 碎片化格式,支持流式传输和实时播放
  • FLV: 传统格式,兼容性好
  • WebSocket流: 低延迟实时传输

播放控制

  • 时间范围回放: 精确时间段播放
  • 跳转和变速: 灵活的播放控制
  • 暂停恢复: 实时播放控制
  • 进度调整: 任意时间点跳转

回放工作流程

配置示例

回放拉流配置

yaml
mp4:
  onsub:
    pull:
      ^vod/(.+)$: live/$1  # vod/camera1 → live/camera1
  pull:
    live/movie: /path/to/movie.mp4
    delayclosetimeout: 3s

高级回放配置

yaml
mp4:
  onsub:
    pull:
      # 基础回放匹配
      ^vod/(.+)$: live/$1
      # 多级目录匹配
      ^archive/(\d{4})/(\d{2})/(\d{2})/(.+)$: live/$4?start=$1-$2-$3T00:00:00
      # 独立回放进度
      ^vod(\d)/(.+)$: live/$2

关键参数说明:

  • delayclosetimeout: 无订阅者时延迟关闭时间
  • 正则表达式支持捕获组,用$1$2引用
  • 时间参数支持 ISO 8601 格式和 Unix 时间戳

回放管理API

查询API接口

功能方法路径说明
录像列表GET/api/record/{type}/list/{streamPath}获取录像文件列表
录像目录GET/api/record/{type}/catalog获取录像目录结构

查询API接口

功能方法路径说明
录像文件列表GET/mp4/api/list/{streamPath}获取录像文件列表
录像目录GET/mp4/api/catalog获取录像目录结构

流控制API

功能方法路径说明
暂停播放POST/api/stream/pause/{streamPath}暂停流播放
恢复播放POST/api/stream/resume/{streamPath}恢复流播放
设置速度POST/api/stream/speed/{streamPath}设置播放速度
时间跳转POST/api/stream/seek/{streamPath}跳转到指定时间

API使用示例

javascript
// 获取录像列表
const recordings = await fetch('/mp4/api/list/live/camera1').then(r => r.json());

// 获取录像目录
const catalog = await fetch('/mp4/api/catalog').then(r => r.json());

// 播放控制
await fetch('/api/stream/pause/live/camera1', { method: 'POST' });
await fetch('/api/stream/speed/live/camera1', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ speed: 2.0 })
});

// 时间跳转
await fetch('/api/stream/seek/live/camera1', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ timeStamp: Math.floor(Date.now() / 1000) })
});

回放URL格式

基础回放:http://localhost:8080/flv/live/camera1.flv?start=2024-01-01T12:00:00

时间范围回放:http://localhost:8080/mp4/live/camera1.mp4?start=2024-01-01T12:00:00&end=2024-01-01T13:00:00

WebSocket实时回放:ws://localhost:8080/mp4/live/camera1.mp4

前端播放器集成

支持的播放方式

常用播放器集成

播放器类型适用场景主要特点
HTML5 Video基础回放简单易用,兼容性好
Video.js专业回放功能丰富,插件众多
HLS.js流式回放自适应码率,低延迟
自定义MSE实时回放精确控制,实时性强

基础集成示例

html
<!-- 基础MP4播放 -->
<video controls>
  <source src="/mp4/download/live/camera1.mp4" type="video/mp4">
</video>

<!-- fMP4流式播放 -->
<video id="player"></video>
<script>
const video = document.getElementById('player');
const ws = new WebSocket('ws://localhost:8080/mp4/live/camera1.mp4');
// 使用MSE实现流式播放
</script>

性能优化建议

系统优化

关键参数配置

参数推荐值说明
fragment10-30s平衡文件大小和性能
buffer_size10-30MB根据网络条件调整
max_connections100-500根据服务器性能设置
cleanup_interval24h定期清理过期文件

故障排除

常见问题解决流程

监控指标

  • 回放状态: 实时监控回放任务状态
  • 文件读取: 磁盘IO和读取性能
  • 网络带宽: 下载带宽使用情况
  • 播放质量: 延迟、丢帧率、错误率
  • 用户体验: 缓冲时间、播放成功率

总结

Monibuca回放功能提供了完整的视频回放解决方案,支持多种格式和播放方式。通过合理的配置和优化,可以实现高质量、低延迟的音视频回放服务。主要优势包括:

  • 灵活的回放模式: 支持实时、点播、多段合并回放
  • 多格式支持: MP4、fMP4、FLV等多种格式
  • 丰富的播放控制: 暂停、跳转、变速等功能
  • 易于集成: 支持各种主流播放器
  • 高性能: 优化的存储读取和传输机制

基于 AGPL 许可发布