前言
对于一个外包项目或初创公司来说,如果想要在项目中实现音视频通话,诸如1V1视频通话,多人群通话或者类似Zoom那种多人在线音视频会议,选择的往往是第三方云服务,例如声网、腾讯云音视频等等,但是第三方云服务价格是昂贵的,对于初创公司或者外包项目来说代价太大,而想要实现本地云自建音视频通话服务,对于国内大多数独立开发者又是较为困难的,恰巧本人近两年的项目常涉及到通话和会议,经过调研了互联网上的各类型方案以及客户的主观经济原因,最终我们采用了Livekit
Livekit是一个基于WebRTC的开源音视频通话框架,其开源特性让我们可以在本地搭建整套程序,不需要第三方云服务的支持就实现完整的音视频通话流程,客户端支持多种SDK,包含Android、iOS、Web、Flutter等。
说这个不是打广告,只是相对外包或者独立开发者想要实现音视频通话,抛开第三方云服务之外,各类型资料和研究都相对较少,且相对复杂。而Livekit作为近两年的新起之秀,各方面相对完善,可以非常容易的实现音视频通话,发这个博客也是希望可以让更多的人以最小的代价接触音视频通话相关的业务。当然有好就有坏,Livekit在国内的文档和资料较少,且SDK目前迭代频率高,bug相对也多些,并且截止2025年2月,根据Github咨询,其官方暂未有客户端SDK支持鸿蒙的计划。
问题
本人大概是在2022年-2023年接触的Livekit,在项目开发的过程中遇到了不少问题,虽然也逐一解决,但确实是耗神耗力,最近客户的App流量有所上升,单机Livekit-Server有些捉襟见肘,遂记录以下分布式多节点部署方案。
Livekit Server 单机部署
注
- Livekit 是基于WebRTC开发,所以默认阅读者对WebRTC和Livekit有一定的了解,可以不深入,但是需要知道什么是WebRTC和Livekit以及通话部分原理和流程,建议阅读本文章前查看官网文档。
- 基于国内的电信网络环境,我们使用WebRTC必须有TURN Server,也就是媒体中转服务。它可以将我们的语音视频数据进行多方中转
准备
- 一台公网服务器,必须保证机房防火墙允许全部TCP UDP端口正常通信(或者自行查看官方文档需要开通的端口),注:测试可使用腾讯云服务器,博主在其平台测过无数次,无异常。
- 两个域名(子域名即可)
-
- 主域名
-
- TURN TLS域名
- 两个域名对应的ssl证书
- 服务端不建议在Windows上部署,博主以下操作均在Linux环境下执行
去除服务器443端口占用
保证当前服务器内443端口不被任何程序占用,因为Livekit Server要用
安装 Livekit Server
curl -sSL https://get.livekit.io | bash
如果国内服务器网络环境执行以上命令失误
可以去[Github Releases](https://github.com/livekit/livekit/releases)
下载对应服务器版本的程序上传到服务器解压,会得到一个程序[livekit-server],以上命令
也是去下载这个程序,只是少了移动到bin目录的操作。本博文编写时使用版本:1.8.3
启动运行
./livekit-server --config config.yaml --node-ip 8.8.8.8
Ubuntu系统请添加sudo
–node-ip 8.8.8.8 修改为你的外网IP
config.yaml
port: 7880
log_level: info
rtc:
tcp_port: 7881
port_range_start: 50000</