关于Livekit音视频通话框架介绍及Livekit-Server的分布式多节点部署方案记录[2025.02.05_Version:1.8.3]

前言

对于一个外包项目或初创公司来说,如果想要在项目中实现音视频通话,诸如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 单机部署

  1. Livekit 是基于WebRTC开发,所以默认阅读者对WebRTC和Livekit有一定的了解,可以不深入,但是需要知道什么是WebRTC和Livekit以及通话部分原理和流程,建议阅读本文章前查看官网文档。
  2. 基于国内的电信网络环境,我们使用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</
在使用`LiveKit Client SDK for Android`构建一个实时音视频软件时,你需要遵循以下步骤: 1. **添加依赖**: 首先,将LiveKit的Android客户端库添加到你的项目中。如果你使用的是Gradle,可以在`build.gradle`文件的dependencies部分添加: ```groovy implementation &#39;io.livekit:livekit-client-sdk-android:{{latest_version}}&#39; ``` 请替换`{{latest_version}}`为实际的库版本。 2. **设置配置**: 创建一个`LivekitConfig`对象,并提供所需的LiveKit服务器URL和API密钥: ```java LivekitConfig config = new LivekitConfig.Builder() .setServerUrl("your-livekit-server-url") .setApiKey("your-api-key") .build(); ``` 3. **初始化Client**: 初始化LiveKit客户端并在需要的地方注入配置: ```java Livekit livekit = Livekit.create(config); ``` 4. **创建会议**: 调用`livekit.createMeeting()`来发起一个新会议,可以传入自定义参数: ```java Room room = livekit.createMeeting( "meeting-name", // 会议名称 // 可选参数如参与人列表、标签等 ); ``` 5. **加入或连接到会议**: ```java // 加入已存在的房间 room.join(tokenOrEmail); // 或者通过连接URL直接连接 room.connect(joinUrl); ``` 6. **处理音频和视频流**: 通过`RoomListener`监听事件并操作用户设备的音频和视频输入输出,例如: ```java room.addConnectionListener(new ConnectionListener() { @Override public void onConnected(RoomConnection connection) { // 连接成功,开始采集音频/视频 MediaStream audioTrack = ...; connection.sendAudio(audioTrack); } // ...其他事件处理 }); ``` 7. **清理资源**: 当不再需要会议或关闭应用时,记得释放相关资源和断开连接: ```java room.disconnect(); livekit.shutdown(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值