LiveKit 本地部署视频录制

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

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

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LiveKit 是一个开源的实时音视频通信框架,它提供了易于使用的 API,可以轻松地构建 WebRTC 应用程序。Vue.js 是一个流行的前端框架,它可以帮助开发人员快速构建交互式用户界面。 下面是一个使用 LiveKit 和 Vue.js 构建的实时视频通话示例: 1. 首先,将 LiveKit 安装为依赖项: ```bash npm install livekit-client ``` 2. 创建一个 Vue 组件,在组件中引入 LiveKit: ```javascript import LiveKit from 'livekit-client'; export default { data() { return { room: null, localTracks: [], remoteTracks: [], }; }, methods: { async joinRoom(token, roomName) { const room = await LiveKit.connect(token, { url: 'wss://your-livekit-server-url', // LiveKit 服务器 URL audio: true, // 启用音频 video: true, // 启用视频 }); const localParticipant = await room.localParticipant; const localTracks = await LiveKit.createLocalTracks({ audio: true, // 启用音频 video: true, // 启用视频 }); await Promise.all(localTracks.map((track) => localParticipant.publishTrack(track))); const remoteTracks = await Promise.all( room.participants.map(async (participant) => { const tracks = await participant.tracks; return tracks; }) ); this.room = room; this.localTracks = localTracks; this.remoteTracks = remoteTracks.flat(); }, async leaveRoom() { await Promise.all(this.localTracks.map((track) => this.room.localParticipant.unpublishTrack(track))); await this.room.disconnect(); this.room = null; }, }, }; ``` 3. 在模板中渲染本地和远程视频: ```html <template> <div> <div v-if="room"> <h2>本地视频</h2> <video v-for="track in localTracks" :key="track.sid" :srcObject="track.mediaStream" autoplay muted></video> <h2>远程视频</h2> <video v-for="track in remoteTracks" :key="track.sid" :srcObject="track.mediaStream" autoplay></video> <button @click="leaveRoom">离开房间</button> </div> <div v-else> <button @click="joinRoom('your-token', 'your-room-name')">加入房间</button> </div> </div> </template> ``` 这个例子中,我们使用 LiveKit 的 API 来连接到房间,创建本地音视频轨道,并发布它们。我们还使用 LiveKit 的 API 来获取其他参与者的远程音视频轨道,并将它们渲染到页面上的 video 元素中。最后,我们为离开房间提供了一个按钮,以便在完成通话后离开房间。 这只是一个简单的示例,你可以根据自己的需求对其进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值