通过官方文档查阅,发现要想本地实现视频录制,需要单独部署一个服务 Egress
它这个录制视频的原理大致就是,这个服务在启动个浏览器,通过web模板的方式进行显示录制。
知道Selenium的就能很快理解这个原理。
接下来,我们先进行准备工作
通过官方的接口文档
https://docs.livekit.io/home/self-hosting/egress/
我们先要有一个配置文件,然后用docker 进行启动。
我这里直接使用docker-compose
首先我们先创建一个配置文件 config.yaml
log_level: debug
# api_key 参考 上一篇 livekit 部署 配置的
api_key: 2yJimTMFeF9h15PHEv
api_secret: Mvi9ZgqGJ3LqwEAcTVvWse3conEyQt92FEKTVERzd
# livekit 的地址,切记本地不要用 wss:ip 假证书这种形式,我就在这里踩坑了
ws_url: ws://10.63.15.1:7880
# 可用于连接到不安全的websocket 本地部署一定要改为true
insecure: true
redis:
# reids 地址 注意和 livekit 配置的reids 一致
address: 10.63.15.2:6379
db: 0
接下来就是 docker-compose.yml 文件编写
version: '3.8'
services:
egress_server:
image: livekit/egress
container_name: egress
environment:
TZ: Asia/Shanghai
EGRESS_CONFIG_FILE: /out/config.yaml
volumes:
- /usr/local/livelit/out/:/out/ # /usr/local/livelit/out/ 本地 config.yaml 的路径
- /usr/local/livelit/video/:/home/egress/video # 录制视频存放的路径
cap_add:
- ALL
记得给 /usr/local/livelit/video 这个路径的读写权限,不然无法录制成功。
chmod 777 /usr/local/livelit/video/
接下来就是启动docker
docker-compose up
看到 starting template server on address localhost:7980 表示启动成功了。
我们还是像上一篇文章一样,直接进入会议进行通话。
但是我们得先知道 roomId,我们可以通过生成token时,自己传参,或者直接通过token拿到。
我们继续通过官网文档 https://docs.livekit.io/realtime/egress/room-composite/编写代码
例子如下
public static void main(String[] args) {
EgressServiceClient client = EgressServiceClient.create(
"http://10.63.15.1:7880",
"2yJimTMFeF9h15PHEv",
"Mvi9ZgqGJ3LqwEAcTVvWse3conEyQt92FEKTVERzd");
LivekitEgress.EncodedFileOutput output = LivekitEgress.EncodedFileOutput.newBuilder()
.setFileType(LivekitEgress.EncodedFileType.MP4)
.setFilepath("/home/egress/video/test-recording.mp4")
.build();
Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress( "f5aeabc3-1cfd-4f80-9042-ebb7a00230fe",output,"grid" );
try {
LivekitEgress.EgressInfo egressInfo = call.execute().body();
String egressId = egressInfo.getEgressId();
System.out.println(egressId);
} catch (IOException e) {
e.printStackTrace();
}
}
执行代码,我们便得到了egressId
当我们的egress 服务出现开始录制的时候,说明已经开始录制了。
然后我们在调用结束录制
public static void main(String[] args) {
EgressServiceClient client = EgressServiceClient.create(
"http://10.63.15.1:7880",
"2yJimTMFeF9h15PHEv",
"Mvi9ZgqGJ3LqwEAcTVvWse3conEyQt92FEKTVERzd");
try {
// 参数就是录制接口返回的 EgressId EG_xcKjZbo94H5S
Response<LivekitEgress.EgressInfo> egXcCUGtFKP6UL = client
.stopEgress("EG_xcKjZbo94H5S")
.execute();
System.out.println(egXcCUGtFKP6UL);
} catch (IOException e) {
// handle error
}
}
调用返回:
Response{
protocol=http/1.1, code=200, message=OK, url=http://10.63.15.1:7880/twirp/livekit.Egress/StopEgress}
接下来我们去看我们的录制文件地址 /home/egress/video 下是否存在录制好的文件
关于部署中容易遇到的坑,一个就是网络问题,在一个就是egress 这个服务CPU最少需要4核4G,我最开始服务器是1核的服务器,一直显示超时,找不到原因,最后发现是资源不足。其实官网文档中有说明
好了关于LiveKit 本地部署视频录制的就到这里了。