LiveKit本地部署

关于LiveKit 。

关于LiveKit 是因为最近在做视频客服相关的功能,在去年使用过 kurento,后来因为一个模板录制的需求一直无法实现,在无意间发现了LiveKit 且官方自带模板录制功能,且支持自定义模板。但是LiveKit 技术先对来说比较新,资料先对来说比较少,在这里记录下我本地部署遇到的问题。

部署

参考官方文档: https://docs.livekit.io/home/self-hosting/local/
执行以下命令会自动安装完成

curl -sSL https://get.livekit.io | bash

安装完成之后就是启动

在这之前我我们先准备下配置文件 livekit.yaml

#  服务端口
port: 7880
rtc:
    udp_port: 7882
    tcp_port: 7881
    # rtc 是使用内网 所以 用false
    use_external_ip: false
    # node_ip 部署服务器ip
    node_ip: 10.63.15.1
    enable_loopback_candidate: false
keys:
	# apiKey: secret 
    2yJimTMFeF9h15PHEv: Mvi9ZgqGJ3LqwEAcTVvWse3conEyQt92FEKTVERzd
logging:
    json: false
    level: info

redis:
  # reids 地址
  address: 10.63.15.2:6379
  db: 0

执行下面命令进行启动

livekit-server --config ./livekit.yaml --node-ip=10.63.15.1 --bind 0.0.0.0

验证部署情况

直接在浏览器直接 http://10.63.15.1:7880 返回ok 那么说明部署成功了。
在这里插入图片描述

开始使用

我用java 些一个例子,首先我们需要 token

	 <dependency>
            <groupId>io.livekit</groupId>
            <artifactId>livekit-server</artifactId>
            <version>0.6.1</version>
        </dependency>

生成token

	 public static String createToken(String userId,String userName) {
//        用户ID
        String roomName = UUID.randomUUID().toString();
        String apiKey = "2yJimTMFeF9h15PHEv";
        String apiSecret = "Mvi9ZgqGJ3LqwEAcTVvWse3conEyQt92FEKTVERzd";
        AccessToken token = new AccessToken(apiKey, apiSecret);
        token.setName(userName);
        token.setIdentity(userId);
        token.setMetadata("metadata");
//        令牌的过期时间(可能)
        token.setExpiration(new Date(System.currentTimeMillis() + 1000L * 60 * 60 * 24 * 365));
//        token所拥有的权限
        List<String> list = new ArrayList<>();
//        摄像头
        list.add("camera");
//        麦克风
        list.add("microphone");
        list.add("screen_share"); //屏幕共享
        list.add("screen_share_audio"); //屏幕共享音频
        CanPublishSources canPublishSources = new CanPublishSources(list);
//        配置解释:https://docs.livekit.io/realtime/concepts/authentication/
        token.addGrants(new RoomJoin(true), new RoomName(roomName), canPublishSources);
        return token.toJwt();
    }

接下来,我们进行会议:

在这之前,我们需要部署nginx,然后把livekit 的服务部署 https ,因为浏览器处于安全考虑,只有https 才能使用 摄像头和麦克风。,关于怎么部署和代理,请自行百度。

liveKitUrl : 就是我们使用nginx 配置好 https 后的地址,我的地址为 wss://10.63.15.1:7443

token: 就是我们用java生成的token : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0a2FuIiwibWV0YWRhdGEiOiJtZXRhZGF0YSIsImlzcyI6IjJ5SmltVE1GZUY5aDE1UEhFdiIsIm5hbWUiOiJ0a2FuIiwidmlkZW8iOnsicm9vbUpvaW4iOnRydWUsInJvb20iOiJmNWFlYWJjMy0xY2ZkLTRmODAtOTA0Mi1lYmI3YTAwMjMwZmUiLCJjYW5QdWJsaXNoU291cmNlcyI6WyJjYW1lcmEiLCJtaWNyb3Bob25lIiwic2NyZWVuX3NoYXJlIiwic2NyZWVuX3NoYXJlX2F1ZGlvIl19LCJleHAiOjE3NTM0MjUxNzIsImp0aSI6InRrYW4ifQ.9MVnknxHdfgUu2ZqQSehkjXzOlTnCxUzRP9kY40yJ4M

浏览器访问我们就可以进入会议啦   https://meet.livekit.io/custom?liveKitUrl=wss://10.63.15.1:7443&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0a2FuIiwibWV0YWRhdGEiOiJtZXRhZGF0YSIsImlzcyI6IjJ5SmltVE1GZUY5aDE1UEhFdiIsIm5hbWUiOiJ0a2FuIiwidmlkZW8iOnsicm9vbUpvaW4iOnRydWUsInJvb20iOiJmNWFlYWJjMy0xY2ZkLTRmODAtOTA0Mi1lYmI3YTAwMjMwZmUiLCJjYW5QdWJsaXNoU291cmNlcyI6WyJjYW1lcmEiLCJtaWNyb3Bob25lIiwic2NyZWVuX3NoYXJlIiwic2NyZWVuX3NoYXJlX2F1ZGlvIl19LCJleHAiOjE3NTM0MjUxNzIsImp0aSI6InRrYW4ifQ.9MVnknxHdfgUu2ZqQSehkjXzOlTnCxUzRP9kY40yJ4M

在这里插入图片描述

下一篇文章,我将写怎么实现通过模板进行视频录制。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 元素中。最后,我们为离开房间提供了一个按钮,以便在完成通话后离开房间。 这只是一个简单的示例,你可以根据自己的需求对其进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值