通过在 AWS Fargate 上运行的 WHIP 和 WHPP,实现基于 WebRTC 的分发

我们在以前的文章中介绍了基于 WebRTC 的标准化流媒体广播的概念验证。我们使用 WHIP 作为摄取协议,并使用提议的 WHPP (WebRTC HTTP Playback Protocol) 作为消费协议。在本文中,我们将介绍如何基于概念验证提供的开源组件设置基于 WebRTC 的分发。我们将使用 ECS on Fargate 和 AWS EC2(或本地)组合在 Amazon Web Services 上托管该解决方案。

通过在 AWS Fargate 上运行的 WHIP 和 WHPP,实现基于 WebRTC 的分发

基于 WebRTC 的客户端将使用基于 HTTP 协议的 WHIP 发起握手。WHIP 端点将在选择性转发单元(SFU)上分配一个会话,实际媒体将使用 UDP/SRTP 从客户端传输到 SFU。WHIP 端点负责发送信号,不会通过该端点发送媒体流量。同样,当播放器希望开始使用一个频道时,它将使用基于 HTTP 协议的 WHPP 启动握手。然后,WHPP 端点会向播放器提供与 SFU 建立连接所需的信息。在此,媒体通过 UDP/SRTP 从 SFU 传输到播放器。

由于 WHIP 端点和 WHPP 端点都只提供 HTTP 流量,因此我们可以在基于容器的无服务器基础设施上运行。在本示例中,我们将使用亚马逊 ECS 和 Fargate,但这并不妨碍我们在其他云平台提供商上进行同样的设置。这里没有什么是 AWS 特有的,因为一切都是基于容器的。

通过在 AWS Fargate 上运行的 WHIP 和 WHPP,实现基于 WebRTC 的分发

SFU 将在 EC2 实例或服务器大厅的专用硬件上运行。SFU 实例需要通过 UDP 访问所有端口。

安装和设置 SFU

作为 SFU,我们将使用 Symphony Media Bridge,并准备了一个可以使用的 Docker 容器[1]。重要的是,该容器需要以主机模式运行,因此必须在 Docker 引擎支持主机模式的 Linux 服务器上运行。可以使用下面的 docker-compose 模板来启动和运行它:

version: "3.7"
services:
  sfu:
    image: eyevinntechnology/wrtc-sfu:latest
    restart: always
    network_mode: "host"
    cap_add:
      - SYS_NICE
    ulimits:
      rtprio: 99
    environment:
      - HTTP_PORT=8180
      - UDP_PORT=0
    logging:
      driver: "local"
      options:
        max-size: 10m

一旦启动并运行,它将使用上述配置在端口 8180 上提供管理 API。这将由我们将设置的 WHIP 和 WHPP 端点使用。

设置 WHIP 端点任务

下一步是在 ECS 上设置 WHIP 端点任务。基于 NodeJS 库 @eyevinn/whip-endpoint 我们有一个可以使用的容器镜像[2]。设置将运行eyevinntechnology/wrtc-origin:latest 容器镜像的ECS 任务,我们还需要设置以下环境变量:

  • PORT=8000 :为服务公开的 HTTP 端口
  • EXT_PORT=443 :公布的 HTTP 端口,由于我们将在 AWS Elastic Loadbalancer 中使用 HTTPS 终止,因此我们将其设置为 443
  • SMB_URL=http://<sfu>:8180/conferences/ :SFU 管理 API 的 URL
  • HOSTNAME=<whip-host> :WHIP 端点公布的主机名
  • WHPP_API_URL=https://<whpp-host>/api :WHPP 端点的管理 API 的 URL
  • WHPP_EGRESS_URL=https://<whpp-host>/whpp :播放器将访问以启动播放的 URL

设置 AWS ELB 以将此任务公开到 Internet 留给读者作为练习。

设置 WHPP 端点任务

下一步是设置 WHPP 端点。由于 WHPP 尚未建立的出口协议,并且最近发布了其他举措和提案,我们开发并提供了通用出口端点库 [3]。它目前支持 WHPP,但可以轻松扩展到其他 HTTP 出口信令协议。在此示例中,我们将使用 WHPP,因为我们可以使用已经可用的基于 WHPP 的播放器[4]。

为此,我们还准备了一个容器镜像[5]供您使用。设置任务运行 eyevinntechnology/wrtc-whpp:latest 容器并设置以下环境变量:

  • PORT=8000 :为服务公开的 HTTP 端口
  • EXT_PORT=443 :公布的 HTTP 端口,由于我们将在 AWS Elastic Loadbalancer 中使用 HTTPS 终止,因此我们将其设置为 443
  • HOSTNAME=<whpp-host> :WHPP 端点公布的主机名
  • SMB_URL=http://<sfu>:8180/conferences/ :SFU 管理 API 的 URL

然后设置 AWS ELB 以通过 HTTPS 将此任务公开到 Internet。

端到端测试

要进行端到端测试,您可以使用 https://web.whip.eyevinn.technology 上的网络 WHIP 客户端,并指向 https:///api/v1/whip/sfu-broadcaster?channelId=test 的端点。

然后访问 https://webrtc.player.eyevinn.technology 并使用播放 URL https:///whpp/channel/test

通过在 AWS Fargate 上运行的 WHIP 和 WHPP,实现基于 WebRTC 的分发

关于 WHEP 与 WHPP:当我们开始研究如何将基于 WebRTC 的广播流媒体(1 对多)管道划分为摄取、分发和回放时,我们很快发现在回放方面没有可用的标准协议。为了填补这一空白,我们制定并提出了一项标准,称为 WebRTC HTTP Playback Protocol (WHPP)。今年春天,我们公开征求意见,并于 6 月初在 2022 年瑞典流媒体技术大会上进行了介绍。

正如你们中的一些人可能已经看到的那样,一个名为 WebRTC HTTP Egress Protocol (WHEP) 的标准已起草完毕,并于 8 月初发布,这证实了我们的信念,即有必要填补这一空白。

从 Eyevinn 的角度来看,该标准的名称并不重要,我们已根据我们的概念验证和 WHPP 的经验,向 WHEP 的作者提供了我们的反馈意见。无论是 WHEP 还是 WHPP,我们都将继续我们的概念验证工作,并为社区贡献这方面的知识和开源工具。

作者信息:

Eyevinn Technology 是视频技术、视频开发和可持续流媒体领域的独立专家。瑞典北欧流媒体技术年会的组织者。

[1] https://github.com/Eyevinn/docker-wrtc-sfu
[2] https://github.com/Eyevinn/docker-wrtc-origin
[3] https://github.com/Eyevinn/wrtc-egress
[4] https://webrtc.player.eyevinn.technology
[5] https://github.com/Eyevinn/docker-wrtc-whpp

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

相关推荐

发表回复

登录后才能评论