Skip to content

分发系统

本文介绍如何配置和使用分发系统实现多节点视频分发。

功能概述

分发系统支持将视频分发到多个服务器节点,实现负载均衡和就近访问,提高视频播放速度和稳定性。

主要功能

  • 多节点分发 - 将视频分发到多个服务器
  • 健康检查 - 自动监测节点可用性
  • 负载均衡 - 自动选择最优节点
  • CDN 域名管理 - 管理多个 CDN 加速域名

配置说明

系统配置

config.yaml 中配置分发系统:

yaml
distribution:
  enabled: false                    # 是否启用分发系统
  health_check_interval: 300        # 健康检查间隔(秒),默认5分钟
  health_check_timeout: 10          # 健康检查超时(秒)
  cache_duration: 120               # M3U8缓存时长(秒),默认2分钟
  cache_cleanup_interval: 300       # 缓存清理间隔(秒),默认5分钟
  config_refresh_interval: 60       # 配置刷新间隔(秒),默认1分钟

配置项说明

配置项默认值说明
enabledfalse是否启用分发系统
health_check_interval300健康检查间隔时间(秒)
health_check_timeout10健康检查请求超时时间(秒)
cache_duration120M3U8 播放列表缓存时长(秒)
cache_cleanup_interval300缓存清理任务间隔(秒)
config_refresh_interval60配置刷新间隔(秒)

开启分发

后台开启

  1. 进入 系统设置分发设置
  2. 开启 分发系统开关
  3. 保存设置

添加分发服务器

  1. 进入 分发管理服务器管理
  2. 点击 添加服务器
  3. 填写服务器信息:
字段说明
名称服务器名称,便于识别
类型服务器类型(自定义服务器/OSS 等)
服务器地址分发服务器的 URL
API Key服务器认证密钥(可选)
描述服务器描述信息
启用状态是否启用该服务器
  1. 点击 测试连接 验证配置
  2. 保存

重要:使用公网域名

服务器地址必须使用公网可访问的域名,例如 http://cdn.example.com

不要使用:

  • http://127.0.0.1:7501 - 本地回环地址
  • http://localhost:7501 - 本地主机名
  • http://192.168.x.x - 内网地址

服务器地址会直接存储到视频记录中,如果使用本地地址,WordPress 等外部系统获取的视频播放地址也会是本地地址,导致无法播放。

CDN 域名管理

添加 CDN 域名

  1. 进入 分发管理CDN 域名
  2. 点击 添加域名
  3. 输入 CDN 加速域名
  4. 保存

域名健康检查

系统会自动对 CDN 域名进行健康检查:

  • 绿色 - 域名正常可用
  • 黄色 - 域名响应较慢
  • 红色 - 域名不可用

手动检测

点击 检测 按钮可以手动触发单个域名的健康检查。

点击 全部检测 可以检测所有域名。

分发任务

创建分发任务

  1. 视频管理 中选择视频
  2. 点击 分发 按钮
  3. 选择要分发到的服务器
  4. 确认创建任务

批量分发

  1. 勾选多个视频
  2. 点击 批量操作分发
  3. 选择目标服务器
  4. 确认分发

任务状态

状态说明
等待中任务已创建,等待执行
分发中正在将视频分发到目标服务器
已完成分发成功
失败分发失败,请查看错误信息

查看任务

在视频详情页可以查看该视频的所有分发任务和状态。

播放地址

分发后的播放地址

视频分发完成后,可以通过以下地址访问:

主服务器:

http://主域名/public/videos/{video_id}/index.m3u8

CDN 加速:

http://CDN域名/public/videos/{video_id}/index.m3u8

分发节点:

http://分发服务器/public/videos/{video_id}/index.m3u8

自动选择最优节点

系统可以根据以下因素自动选择最优节点:

  • 节点健康状态
  • 节点负载情况
  • 用户地理位置
  • 响应时间

统计信息

查看分发统计

分发管理统计 中查看:

  • 分发任务数量
  • 成功/失败率
  • 各节点流量统计
  • 域名访问统计

API 接口

获取分发配置

bash
GET /api/distribution/config

更新分发配置

bash
PUT /api/distribution/config
Content-Type: application/json

{
  "enabled": true
}

添加 CDN 域名

bash
POST /api/distribution/domain
Content-Type: application/json

{
  "domain": "cdn.example.com"
}

删除 CDN 域名

bash
DELETE /api/distribution/domain
Content-Type: application/json

{
  "domain": "cdn.example.com"
}

健康检查

bash
# 检查所有域名
GET /api/distribution/health

# 检查单个域名
POST /api/distribution/health/single
Content-Type: application/json

{
  "domain": "cdn.example.com"
}

分发服务器管理

bash
# 获取服务器列表
GET /api/distribution/servers

# 添加服务器
POST /api/distribution/servers
Content-Type: application/json

{
  "name": "节点1",
  "type": "custom",
  "server_url": "http://node1.example.com",
  "api_key": "your-api-key",
  "is_enabled": true
}

# 测试服务器连接
POST /api/distribution/servers/test

分发任务

bash
# 创建分发任务
POST /api/distribution/tasks
Content-Type: application/json

{
  "video_id": 123,
  "server_ids": [1, 2, 3]
}

# 获取视频的分发任务
GET /api/distribution/tasks/video/{video_id}

# 开始分发
POST /api/distribution/tasks/{task_id}/start

最佳实践

节点部署建议

  1. 地理分布 - 在不同地区部署节点,实现就近访问
  2. 冗余备份 - 每个区域至少部署 2 个节点
  3. 带宽规划 - 根据视频流量合理规划带宽

健康检查配置

yaml
# 推荐配置
health_check_interval: 300    # 5分钟检查一次
health_check_timeout: 10      # 10秒超时

缓存配置

yaml
# 推荐配置
cache_duration: 120           # M3U8 缓存 2 分钟
cache_cleanup_interval: 300   # 5 分钟清理一次过期缓存

常见问题

Q: 分发失败?

  1. 检查目标服务器是否正常运行
  2. 检查网络连接是否畅通
  3. 检查服务器 API Key 是否正确
  4. 查看分发任务错误日志

Q: CDN 域名检测失败?

  1. 检查域名 DNS 解析是否正确
  2. 检查 CDN 配置是否正确
  3. 检查回源设置
  4. 确认域名证书是否有效

Q: 如何选择最优节点?

系统会根据以下因素自动选择:

  1. 节点健康状态(优先选择健康节点)
  2. 节点响应时间(选择响应最快的节点)
  3. 节点负载(选择负载较低的节点)

Q: 分发会占用多少带宽?

分发时会将视频文件完整传输到目标服务器,带宽占用取决于:

  • 视频文件大小
  • 同时分发的任务数量
  • 网络带宽限制

建议在低峰期进行批量分发。

下一步

基于 MIT 许可发布