如何快速搭建一套视频对讲系统(二)

前一篇介绍了怎么运行LiveKit的flutter示例程序,这一篇介绍一下它的后端搭建过程。

LiveKit 的需要两个后端程序,一个是其官方提供的 livekit-server ,另一个是利用 livekit sdk 编写的加入会议房间的token生成器。

livekit-server 要我们在自己的服务器上进行配置,安装它编译好的版本就可以了,具体可以参考 https://docs.livekit.io/realtime/self-hosting/local/ ,部署配置参考 https://docs.livekit.io/realtime/self-hosting/deployment/,要开放的端口可以参考 https://docs.livekit.io/realtime/self-hosting/ports-firewall/

token生成服务需要我们自己写一个后端服务生成,token服务主要是用来识别要进哪个room及用户名,具体可以参考 https://docs.livekit.io/realtime/server/generating-tokens/

官网go的例子有问题,我自己写了一个:

其中的key和secret就是在启动livekit时在config.yaml里设置的, config 的样例在 https://github.com/livekit/livekit/blob/master/config-sample.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main

// server.go
import (
"flag"
"github.com/gin-gonic/gin"
"time"

"github.com/livekit/protocol/auth"
)

func getJoinToken(room, identity string) (string, error) {
at := auth.NewAccessToken("key", "secret")

grant := &auth.VideoGrant{
RoomJoin: true,
Room: room,
}
at.AddGrant(grant).
SetIdentity(identity).
SetValidFor(time.Hour)

return at.ToJWT()
}

func main() {
port := flag.String("port", "8088", "port")
flag.Parse()
r := gin.Default()
r.GET("/getToken", func(c *gin.Context) {
room, _ := c.GetQuery("room")
name, _ := c.GetQuery("name")
str, _ := getJoinToken(room, name)
c.Writer.Write([]byte(str))
})
r.Run(":" + *port)
}


搭建好 livekit-server 和token生成器后,利用后端地址及生成的token就可以让客户端连接到服务器了,当只有一个设备连接时,客户端会显示当前摄像头的画面,当有两个设备连接时,主画面会显示对方的摄像头画面,在左上角显示己方的摄像头。

点击connect后会提示需要提供摄像头和麦克风的权限,授予后就可以正常用了。

江达小记