使用Ant Media Server进行基于WebRTC的超低延迟的流媒体播放分发
我在公司工作还不到三个半月,体重竟然增加了6公斤。这是因为幸福造成的肥胖吗?我是streampack的fado。最近,我有更多的机会学习AWS Elemental的研讨会等新技术,也有机会接触WebRTC,虽然很简单,但我想写一篇关于它的文章。
WebRTC是什么
-
- ウェブブラウザー上で専用プラグイン等がなくてもリアルタイムコミュニケーションを可能にする仕様です。
-
- 年々に仕様が改善されていき、注目度の高い技術です。
-
- オープンソースプロジェクトでGoogle,Mozilla,Operaなどにサポートされています。
- 基本的に通信プロトコルはリアルタイム性を実現させるためTCP/IPではなくUDP/IPを採用しています。
请注意的事项
-
- Ant Media Server Enterpriseは料金がかかりますがFree trialで5日間無料お試し頂けます。
-
- こちらの手順はAWSアカウントをお持ちの方をターゲットにしています。
-
- 機能検証のため、推奨されているMongoDBのインスタンスタイプと全体構成をなるべく最小限にしています。
m5.2xlarge (Edge/Origin) , t2.micro (mongoDB)
Auto Scaling機能は利用していません。
EdgeとOriginサーバーに関してはt系ですとCPUクレジットの枯渇に陥る可能性があるため使いません。
构建环境
在AWS环境下部署Ant Media Server。
我们将根据Ant Media社提供的文章参考,逐步解释步骤。
构成
来源:https://antmedia.io/aws上可扩展的超低延迟流媒体服务
原点服务器和边缘服务器都采用了集群配置。
资源概述
-
- ALB:接收来自发布者和播放器的连接,并将其路由到相应的目标群组。
Origin服务器(发布者):接收发布请求。当WebRTC流进入时,将流信息存储到MongoDB服务器中。
Edge服务器(播放器):接受流媒体观看请求。从MongoDB服务器引用相应的流信息,并将流从Origin服务器返回给播放器。
MongoDB服务器:存储来自Origin服务器的流信息,并在需要时向Edge服务器提供该信息。
资源的设置
■MongoDB服务器
1. 从AWS管理控制台选择Ubuntu 16.04作为AMI。
2. 将磁盘容量设置为默认的8GB。
3. 允许入站22(tcp)和27017(tcp)的安全组。源地址为目标VPC。
4. 确认可以登录到实例后,执行以下命令安装MongoDB。
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
$ echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
$ sudo apt-get update
$ sudo apt-get install -y mongodb-org
-
- 将 /etc/mongod.conf 中的 bind_ip 值更改为 0.0.0.0。
- 重新启动 MongoDB 进程,以便在启动时启动该进程。设置它能够自动启动。
sudo service mongod restart
sudo systemctl enable mongod.service
MongoDB服务器的设置已完成。
■起源服务器
1. 从AWS Marketplace选择Ant Media Server Enterprise的AMI。
2. 将实例类型设置为建议的m5.2xlarge。
3. 在“高级设置”中,将下面的行添加到用户数据字段中。将{MongoIP}设置为先前设置的MongoDB的私有IP。
#!/bin/bash
cd /usr/local/antmedia
./change_server_mode.sh cluster {MongoIP}
- 请在安全组中添加允许Inbound 5000 – 65000(tcp)的规则,以满足AMI默认配置的要求。这是因为在源和边缘之间进行复制时需要使用tcp协议。
■ 边缘服务器
将其设置与之前的源服务器相同。
ALB
1. 创建一个用于Edge服务器的目标组和一个用于Origin服务器的目标组。
2. 将监听器配置如下:
http: 80 和 http: 5080 传递到Origin服务器目标组
https: 443 和 https: 5443 传递到Edge服务器目标组
登录管理界面
https://{负载均衡器的域名}/
用户名:JamesBond(默认)
密码:实例 ID(原始服务器)
在MongoDB服务器上,您也可以使用以下命令来确认实例ID。请查看password字段。
$ mongo
> use serverdb
> db.User.find()
{ "_id" : ObjectId("5d31612a4c79142df7c71914"), "className" : "io.antmedia.rest.model.User", "email" : "JamesBond", "password" : "i-1234567890abcdef0", "userType" : "ADMIN" }
登录后的界面如下所示。关于每个项目的说明,在本次省略。
进行WebRTC流媒体传送测试
■对流媒体发布进行测试
https://ALB的域名/WebRTCAppEE/
在「Start Publishing」中,您可以开始发布内容。默认流名称为 stream1。
进行流媒体观看的测试
点击「开始播放」即可观看直播。
结果
-
- 検証ではWebRTC配信で0.5秒未満の超低遅延を実現できました。
-
- Auto Scaling機能と組み合わせればより耐障害性と可用性を高めることができます。
-
- 配信できるまでセットアップのハードルはそんなに高くないと感じました。
- 便利な世の中になりました。
备考
-
- OriginとEdgeサーバーはCPUリソースを消費してしまうためインスタンスタイプのmシリーズよりもcシリーズが推奨されています。
-
- Ant Media Serverはあの有名なRed5から派生し、Java,C,C++で開発されています。
- 英語のみとなってしまいますがAnt Media社のサポートチームの対応はかなり早いです。
文献引用
https://webrtc.org/ – WebRTC是一个网络实时通信技术,允许浏览器通过简单的JavaScript API进行音频,视频和数据传输。
https://antmedia.io/scalable-ultra-low-latency-streaming-service-on-aws/ – Ant Media提供了在AWS上可扩展的超低延迟流媒体服务,供用户实现高质量的实时视频流。
https://qiita.com/daitasu/items/ae21b16361eb9f65ed43 – 这篇文章介绍了使用WebRTC进行浏览器之间点对点音频和视频通信的方法。
https://ja.wikipedia.org/wiki/WebRTC – WebRTC是一种用于在浏览器之间实现实时通信的开放性项目。 它支持音频,视频和数据传输,同时保护用户隐私。