系统设计:百万计级别的直播技术


用于直播的主要技术是 -

  • RTMP 编码
  • 将 RTMP 转换为不同的格式、大小、方向
  • 将这些数据添加到 CDN
  • 用户从 CDN 获取压缩和 ABR 编码的数据

我们还简要添加了其他功能,这将是结束讨论的好东西
  • 赚钱的广告
  • 数据分析
  • 通讯服务
  • 验证

RTMP(实时消息协议)编码
RTMP——这里的中间人是在 TCP 协议之上编写的。它使用持久(连续)TCP(传输控制协议)将音频和视频从源流式传输到目标。
使用 TCP 有它的优点:

  • 无数据丢失
  • 保持流的顺序

尽管网络速度较慢,但​​这可以提供高质量的视频
对于将相机源转换为 RTMP 流,有不同的方法
  • 一些摄像机在 RTMP 中流式传输,自动处理此步骤,
  • 有些可以在您的计算机上转换为 RTMP,
  • 还有一些你可以发送到另一个地方进行转换。

系统设计
步骤1
Uniformalise Server — 以 RTMP 流的形式获取各种摄像机源,并将它们转换为一种格式,比如 MP4。这将使我们在后期的处理工作更容易。为此,您可以使用 ffmpeg 库。

第2步
聚合器和转码服务输入流必须转换为各种尺寸/格式/方向,以便用户在他们的手机/平板电脑/笔记本电脑上消费。聚合器/转码器服务器将创建用于将输入流转换为许多输出格式流的任务。我们将使用队列和工作人员来处理这些工作。
格式:
- MP4 -> FLV、WAV

尺寸
- 8k -> 1080p
- 8k -> 360p

方向
- 纵向
- 横向

第 3 步
压缩 和存储一旦工作人员转换为用户友好的格式,

  • 我们会将视频保存到分布式数据库中。
  • 我们还将压缩这些数据并将其保存回一些 s3 存储中。压缩完成后,我们可以将信息传递到流中以存储到边缘。
  • 我们可以在这里进一步做一些处理,比如在 NoSQL DB 中保存元数据。这些工作可以通过 lamdba 函数来处理。

第4步
最后内容交付,工作人员需要将这些压缩视频保存到边缘节点中。
边缘是更接近用户的 CDN,帮助客户更快地检索内容。
我们不会使用 RTMP 来发送视频,因为它在慢速 TCP 上工作。我们将使用 ABR 技术等更新的协议将流编码为 HLS 并在 HTTP 层上工作,因此客户端可以以适合其网络能力的大小观看此流。
用户从 CDN 观看比赛,其中提取 ABR 编码的视频,客户端手机解码为 FLV、MP4 格式并观看比赛。

扩展

  • 对于身份验证,我们可以添加一个单独的服务,该服务可以使用 LB 处理负载并将数据持久保存到复制数据库中。
  • 用户通信我们可以从事件队列中读取信息并传递到 lambda 上的单独服务以发送短信/电子邮件。
  • 数据分析我们可以将用户事件从流中添加并持久保存到数据湖中以进行分析。这是一个庞大的话题,但简而言之,数据湖可以以一小部分价格持久化数据。
    稍后我们可以添加一个 ETL 流程,以便我们可以以所需的格式构建数据,以便我们可以使用它们运行各种服务,例如 -> ML 引擎、推荐引擎和可视化服务 (Tableau)。
  • 广告收入为了向用户展示广告,我们需要创建一个广告服务,它可以从各种输入服务中读取数据并使用同类群组识别用户。