我在OCI上尝试运行WebRTC(SFU格式)
WebRTC是什么
-
- Web Real-Time Communicationの略
-
- リアルタイム通信のためのオープンソースプロジェクト&規格
Googleが2011年からオープンソース化して開発
2021年にW3C、IETFにて標準規格となる
動画ライブ配信で良く使われている
全主要ブラウザがサポート(Apple, Google, MS, Mozilla, Opera, etc.)
OSSも数多くありバックエンド開発が容易な環境が揃っている
我们在WebRTC中采用了SFU(Selective Forwarding Unit)格式,并且使用了LiveKit这个丰富的开源软件来在OCI上运行。
https://livekit.io/
https://docs.livekit.io/concepts/livekit-sfu/
*此软件的许可证是Apache License 2.0。
OCI提供了每月免费10TB的数据传输成本,非常适用于像WebRTC这样数据传输量大的工作负载。
OCI的环境建设
首先,作为最简单的配置,我们会在一个虚拟机(IaaS)上构建。我们将在一个虚拟机上同时运行sfu服务器和web应用程序。
VCN
短文中的VCN
虚拟机 jī)
如果操作系统中的每个端口都被防火墙阻止,那么需要将其开放。LiveKit在使用的端口如下所示:
https://docs.livekit.io/oss/deployment/vm/#firewall
更改操作系统上的防火墙设置。
https://docs.livekit.io/oss/deployment/vm/#instance-firewall
sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/tcp
sudo firewall-cmd --zone=public --permanent --add-port=7881/tcp
sudo firewall-cmd --zone=public --permanent --add-port=443/udp
sudo firewall-cmd --zone=public --permanent --add-port=50000-60000/udp
sudo firewall-cmd --reload
负载均衡器 hé qì)
由于它是一个单一节点,因此在演示功能上不需要,但为了域名设置,我们将配置一个灵活的负载均衡器。
※灵活的负载均衡器↓
DNS(域名系统)
搭建LiveKit环境
只需要一个选项,将以下内容用中文进行本地化改写:SFU服务器。
你可以通过以下的 GitHub 上的步骤来执行。
https://github.com/livekit/livekit
总而言之,对于Linux系统,您可以通过使用SSH登录到上面创建的虚拟机,然后使用以下命令进行安装。
curl -sSL https://get.livekit.io | bash
如果处于开发模式,您可以使用以下方式启动。
livekit-server --dev
在启动时创建config.yaml文件。
※本次将关闭redis和turn功能。
port: 7880
log_level: info
rtc:
tcp_port: 7881
port_range_start: 50000
port_range_end: 60000
# use_external_ip should be set to true for most cloud environments where
# the host has a public IP address, but is not exposed to the process.
# LiveKit will attempt to use STUN to discover the true IP, and advertise
# that IP with its clients
use_external_ip: true
redis:
# redis is recommended for production deploys
# address: my-redis-server.name:6379
keys:
# key value pairs
# your_api_key: <api_secret>
devkey: secret
# when enabled, LiveKit will expose prometheus metrics on :6789/metrics
#prometheus_port: 6789
turn:
enabled: false
# domain must match tls certificate
domain: <turn.myhost.com>
# defaults to 3478. If not using a load balancer, must be set to 443.
tls_port: 3478
使用指定的yaml配置,在开发模式下启动LiveKit服务器。
livekit-server --dev --config /home/opc/config.yaml --bind 0.0.0.0
发行代币的应用程序编程接口(API)。
要参与实时视频流媒体传输,需要指定以房间和用户名为键的访问令牌。在开发模式下,您可以使用下面的命令行界面(CLI),安装LiveKit并在服务器端分发它。
livekit-cli create-token \
--api-key devkey --api-secret secret \
--join --room my-first-room --identity user1 \
--valid-for 24h
这次的演示中,我们创建了一个简单的 API,用于使用户能够动态从演示应用程序中获取访问令牌,我们使用了 LiveKit 服务器 SDK。SDK 支持几乎所有主流语言,但本次我们使用了 TypeScript(JavaScript)。具体的代码请查看 https://github.com/livekit/server-sdk-js。
-
- 固定ルーム名(roomname)
-
- ユーザ名をランダム文字列
-
- ポート5000使用
- とするスクリプトです。
import * as http from "http";
import { AccessToken } from 'livekit-server-sdk';
const port = 5000;
const roomName = 'my-first-room';
const server = http.createServer(
(request, response) => {
response.setHeader("Access-Control-Allow-Origin", "*");
const participantName = Math.random().toString(32).substring(2);
// console.log("name=" + participantName);
const at = new AccessToken('devkey', 'secret', {
identity: participantName,
});
at.addGrant({ roomJoin: true, room: roomName });
const token = at.toJwt();
response.end(token);
}
);
server.listen(port);
使用ts-node启动。
ts-node token/createToken.ts
直播工具示范应用
以下是公开发布的链接:
https://github.com/livekit/components-js
※请注意此次构建的方式如下:
https://github.com/livekit/livekit-react
展示屏幕
最后
我使用了WebRTC的开源软件LiveKit,在OCI上运行了一个SFU服务器。
通过使用开源软件,我可以轻松地在云服务器上搭建实时直播服务。
我们将在未来进行基于kubernates和redis的WebRTC功能验证。