LiveKit 本地部署视频录制

Source

接着上面一篇文章,我们继续实现录制功能

通过官方文档查阅,发现要想本地实现视频录制,需要单独部署一个服务 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 本地部署视频录制的就到这里了。