录制系统的主要功能

  • 录制系统需要支持将推流到直播源站以及通过直播源站反向代理的流按照一定的模式录制成特定的多媒体格式文件用于回放与点播。目前录制系统支持的模式包括触发录制与定时录制两种。触发录制指的是录制的开始时间是流推上来的时间,录制的结束时间是流断开的时间;定时录制指的是录制某个特定时间段内的流,不管这个时间段内这条流推断过几次。目前录制系统支持的多媒体格式包括 mp4、flv、ts 以及 m3u8 这四种。
  • 由于触发式录制在流断开的时候就会生成一个文件,而客户希望针对闪断的流进行合并,所以目前录制系统还支持闪断合并的功能。只要流断开后在一定时间内再推上来,我们就不会为此单独生成一个文件。
  • 定时任务在任务开始时间之前修改配置会生效;定时任务开始后修改配置则不再生效。

录制系统的总体架构

  • 录制系统由一个 master 和 多个 worker 构成,master 负责接收前端发送的流的上下线通知,并根据配置将此转换成录制的开始与结束请求发送给 worker,由 worker 进行真正的录制与结束。worker 负责真正的流的录制和结束,并通过心跳汇报流的状态。每个 worker 会包括多个录制任务,针对每个录制任务都会生成一个 dump 进程,并与 worker 保持心跳。 架构图

master 的主要功能

  • 接收来自前端业务系统的上下线通知并放入消息队列,并创建消费协程对消费队列进行消费。消费时需要过滤顺序不正确的上下线通知,将定时任务加入定时任务列表,针对触发任务及时发送开始和结束请求给 worker。

  • 针对定时任务,创建定时任务协程进行定时器轮询,对于到达开始时间和结束时间的定时任务,向 worker 发送开始和结束请求。

  • 创建延迟结束协程,将满足延迟结束的任务发送结束请求给 worker。

  • 接收来自 worker 的心跳汇报,更新流的状态以及时间戳。

  • 创建任务检查协程,对于失联的 worker 上的任务进行重新任务分配;对于重复的与 master 上的状态不一致的任务,及时进行结束。对于 worker 上报的已经结束的任务将结束查询出来后回调给业务系统。

  • 针对每次任务数据的增删改都进行持久化操作。

  • 提供针对所有在线流以及单独在线流的状态查询;提供针对所有 worker 以及 master 的状态查询。

Worker 的主要功能

  • 作为高可用组件的一部分,worker 是无状态的服务,可以在需要的时候及时增减 worker 的数量。

  • 创建消费协程,接受来自 master 的录制开始和结束请求,当录制开始的时候创建一个 dump 进程,当录制结束的时候结束对应的 dump 进程。

  • 创建心跳汇报协程,每隔一定时间向 master 汇报所有流的状态,包括所有正在录制的流以及已经结束的流,针对结束的流下次不再汇报

  • 接收来自 dump 的心跳,为了防止 dump 假死而导致的实际没有录流的情况,每个创建的 dump 进程都需要每隔一定时间向 Worker 进行心跳汇报,如果 Worker 发现某个 dump 不再进行心跳汇报,会先停掉原来的僵死的 dump,重新创建新的 dump 进程。

  • dump 在录制过程中会将录制的结果按照一定的格式分别写入支持时移的数据库以及支持回调的数据库。

总结

  • 目前的录制是按照高可用,可扩展的方案进行设计和实现的,目前已在云平台上运行良好,后续会增加支持 worker 热升级以及 Master 一主一备互为热备的容灾方案,真正做到平滑升级以及高可用。