• 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)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    将生成的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())
    }
    
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

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

    通过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

  • 相关阅读:
    css relative 和absolute布局
    【Python如何与电脑玩石头剪刀布游戏】
    【操作系统】32进制小数转16进制
    JavaAssist的进阶使用
    计算机网络概述
    mysql Varchar字符存储时报错
    学算法常用刷题网站
    html笔记__html常用标签
    产品设计的起点:从企业的角度寻找切入点
    TTS | 保姆级端到端的语音合成VITS论文总结及项目实现(超详细图文代码)
  • 原文地址:https://blog.csdn.net/qq_21602341/article/details/127793608