livekit 简单上手教程

什么是livekit?

livekit是一个开源的webrtc项目,基于pion实现了SFU架构的go程序。
它主要有以下几个特性:

  1. 可以水平扩展的sfu架构。
  2. 有完整的sdk程序接口供开发人员使用。
  3. 基于JWT进行身份验证,可与大部分系统进行权限集成。
  4. 内置Turn可给予tcp与udp进行数据传输通信。
  5. 一个单独的二进制文件,非常容易进行部署。
  6. 实时扬声器检测
  7. 联播、选择性订阅和其他自动带宽管理优化
  8. 用于流导出的通用出口和记录系统
  9. 元数据、审查和数据消息 API

怎么去使用?

提示:以下所有安装均在docker中进行,由于webrtc限制必须使用安全链接(https)但localhost可作为调试使用,因此以下安装环境在本地进行。

安装livekit

docker 安装请参考官方网站
第一步:生成配置文件

docker run --rm -v$PWD:/output livekit/generate --local (会在当前目录生成livekit.yaml)该文件用于配置livekit-server相关表现。

第二步:通过配置文件运行 livekit

docker run -d -p 7880:7880 -p 7881:7881 -p 7882:7882/udp -v $PWD/livekit.yaml:/livekit.yaml livekit/livekit-server --config /livekit.yaml --node-ip=127.0.0.1

第三步:验证是否成功
livekit自带了一个事例程序供本地调试使用 测试地址
在这里插入图片描述默认情况下在第二步时候会生成这个token,但是为了更好的理解livekit,我们使用它提供的服务端sdk进行token生成,由于livekit是由go开发而来,所以这里我使用go-sdk进行token生成。
提示:livekit创建房间有两种,第一个用户直接加入默认创建房间,也可以使用sdk先创建房间在加入,以下使用加入房间默认创建的方式。

  1. 代码如下
func main() {
	//用于连接livekit服务器的认证密钥,livekit.yaml中获取
	apiKey := "APISejyM9X7wYzw"
	apiSecret := "HjY2MvB2yGSCues28GnuhjGN4c02JtSiREL8btGwclQ"
	canPublish := true
	canSubscribe := true
	//生成认证实体
	grant := auth.NewAccessToken(apiKey, apiSecret).AddGrant(&auth.VideoGrant{
		RoomJoin:     true,
		Room:         "测试房间",
		CanPublish:   &canPublish,
		CanSubscribe: &canSubscribe,
	})
	//设置实体对象
	jwt, err := grant.SetIdentity("张三").SetValidFor(time.Hour).ToJWT()
	if err != nil {

	}
	fmt.Println(jwt)
}

将生成的token填入测试程序如出现如下画面则livekit启动成功。
在这里插入图片描述

通过go-sdk作为会议发布者可以将(文件、流)作为数据传递到房间中。
//将文件作为发布者发布到房间
	host := "ws://localhost:7880"
	apiKey := "APISejyM9X7wYzw"
	apiSecret := "HjY2MvB2yGSCues28GnuhjGN4c02JtSiREL8btGwclQ"
	roomName := "测试房间"
	identity := "0012"
	name := "王五"
	roomCB := &lksdk.RoomCallback{
		ParticipantCallback: lksdk.ParticipantCallback{
			OnTrackSubscribed: trackSubscribed,
		},
	}
	room, err := lksdk.ConnectToRoom(host, lksdk.ConnectInfo{
		APIKey:              apiKey,
		APISecret:           apiSecret,
		RoomName:            roomName,
		ParticipantIdentity: identity,
		ParticipantName:     name,
	}, roomCB)
	if err != nil {
		fmt.Println("012", err.Error())
	}
	file := "demo1.h264"
	videoWidth := 960
	videoHeight := 720
	videoTrack, err2 := lksdk.NewLocalFileTrack(
		file,
		lksdk.ReaderTrackWithOnWriteComplete(func() {
			fmt.Println("track finished")
		}),
	)
	audioTrack, _ := lksdk.NewLocalFileTrack("output.ogg")
	if err2 != nil {
		fmt.Println("123", err2.Error())
	}
	_, err1 := room.LocalParticipant.PublishTrack(videoTrack, &lksdk.TrackPublicationOptions{
		Name:        file,
		VideoWidth:  videoWidth,
		VideoHeight: videoHeight,
	})
	room.LocalParticipant.PublishTrack(audioTrack, &lksdk.TrackPublicationOptions{
		Name: file,
	})
	if err1 != nil {
		fmt.Println("456", err1.Error())
	}
	//这里必须阻塞一下,否则无法将数据推送出去
	select {}
}
func trackSubscribed(track *webrtc.TrackRemote, publication *lksdk.RemoteTrackPublication, rp *lksdk.RemoteParticipant) {
	fmt.Println(track.ID())
}

注意: 需要通过阻塞使流能持续推送到流媒体服务器
成功如下图:
在这里插入图片描述

通过livekit-cli客户端程序模拟会议参与者进行会议测试

第一步:docker pull livekit-cli 镜像
第二步执行以下命令

docker run -d livekit/livekit-cli load-test --url ws://172.17.0.3:7880 --api-key APISejyM9X7wYzw --api-secret HjY2MvB2yGSCues28GnuhjGN4c02JtSiREL8btGwclQ -room 测试房间 --video-publishers 50

在这里插入图片描述
注意:--url 参数来自流媒体服务容器的内网ip

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值