livekit 简单上手教程

news2024/12/23 22:44:58

什么是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/21164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud学习笔记 - 分布式配置中心 - config

1. 简介 Spring Cloud Config是用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持的。 它由服务端和客户端构成: 其中,服务端也称为分布式配置中心,是一个独立的微服务应用,用来连接配置仓库、为客户端提供支持…

32.nacos配置文件中心,使用实例(springcloud)

1.为什么使用Nacos 配置文件中心1.如果在生产情况下,修改了配置文件,项目需要下架,重新打包,重新发布。这在单机模式下影响不会太大,但如果过在一个集群项目中就会照成很大的影响,需要停掉多个项目。因此&a…

字节研发之道

前言 字节的迅速崛起缔造了一个互联网的神话,堪称火箭般的蹿升。当阿里来到第十八个年头时,员工人数还不足6万。老牌互联网腾讯现在也不过11万左右人数。但字节发展到七个年头时,人数就突破了10万。曾经入职阿里是一票难求,但现在…

基于51单片机的音乐盒播放器proteus仿真

资料编号:092 下面是相关功能视频演示: 92-基于51单片机的音乐盒播放器proteus仿真(源码仿真全套资料)功能介绍:使用51单片机,采用蜂鸣器进行音乐播放,提供了音乐代码生成器软件,可…

JavaWeb运行环境安装教程以及各个安装包

文章目录安装包下载安装教程一、JDK安装1、下载2、安装3、配置环境4、验证环境配置二、IDEA安装下载链接三、MySQL安装1、下载2、安装四、Navicat安装五、Tomcat安装1、下载2、环境配置3、修改编码4、启动六、Maven安装1、下载2、环境配置3、新建本地仓库4、修改镜像5、添加IDE…

Design Compiler工具学习笔记(1)

本人做过FPGA设计的项目,后面想转 IC 设计方向。现在从 DC 工具的使用开始学起,DC 是新思科技的EDA软件,具体的安装见下面的文章: Synopsys EDA Tools 安装问题记录https://blog.csdn.net/qq_43045275/article/details/127630241…

5G无线技术基础自学系列 | CloudRAN架构

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G在核心网实现云化之后,更…

2.旋转的骰子(1)

1.动画——旋转的骰子 我们想用纯html 和CSS, 做一个旋转的筛子,骰子要有立体感,每个面上要有圆点,表示点数,并且骰子可以原地旋转。 2.分析需求——庖丁解牛

【DELM回归预测】基于matlab多元宇宙优化算法改进深度学习极限学习机数据回归预测【含Matlab源码 2230期】

⛄一、多元宇宙优化算法 MVO是Seyedali Mirjalili受到多元宇宙理论的启发提出来的元启发式优化算法。主要根据多元宇宙理论的3个主要概念-白洞、黑洞和虫洞,来建立数学模型。 MVO算法中的可行解对应宇宙,解的适应度对应该宇宙的膨胀率,在每…

【第三部分 | 移动端开发】2:流式布局

目录 | 移动端布局 | 流式布局(百分比布局) | 案例:京东搜索页相关知识点 | 移动端布局 | 流式布局(百分比布局) 介绍 核心思想:不使用固定布局,而是使用百分比 为了保护盒子的内容不因拉伸…

Spring AOP使用与原理

AOP介绍 SpringAOP核心概念 上述中已经出现的关键词有Advice(顶级的通知类/拦截器)、MethodInvocation(方法连接点)、MethodInterceptor(方法拦截器) SpringAOP在此基础上又增加了几个类,丰富了AOP定义及使用概念,包括 Advisor:包含通知(拦截…

基于密度的划分、DBSCAN(机器学习)

目录 居于密度的划分 DBSCAN算法 居于密度的划分 基于划分聚类和基于层次聚类的方法在聚类过程中根据距离来划分类簇,因此只能够用于挖掘球状簇。 为了解决这一缺陷,基于密度聚类算法利用密度思想,将样本中的高密度区域(即样本点分布稠密的…

图的概念(1)

图是什么? 首先,我们导入需要的包? import numpy as np import random import networkx as nx from IPython.display import Image import matplotlib.pyplot as plt 图的定义? 图表示物件与物件之间关系的数学对象,…

Metasploit入门用法

靶机介绍 Difficult: As always, it’s a very easy box for beginners. Goal: Get flag Download:https://www.vulnhub.com/entry/funbox-scriptkiddie,725/ 解题过程: 1.使用nmap进行端口扫描:Nmap -sV IP 2.使用search命令查…

yolov5加入分割头,多任务头

Yolov5同时进行目标检测和分割分割_MidasKing的博客-CSDN博客_yolov5分割 用YOLOv5ds训练自己的数据集,注意点!_用猪头过日子.的博客-CSDN博客 基于pytorch用yolov5算法实现目标检测与分割_无损检测小白白的博客-CSDN博客 原理 代码:

一种三自由度机器人的设计(CAD+Solidworks+文档)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1课题研究背景及其意义 1 1.2三自由度机器人的发展与现状 1 1.3三自由度机器人的原理和介绍 3 1.4三自由度机器人目前存在问题 4 1.5三自由度机器人的力控制问题 4 1.6三自由度机器人的发展趋势 5 第2章 总体技术方案及系统组成 7 2.…

[附源码]SSM计算机毕业设计电子病历信息管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

AVL的单旋和双旋—附图超详细

文章目录前言:AVL 的插入寻找插入位置更新平衡因子调整AVL右旋左旋左右双旋右左双旋完整代码前言: 我们知道二叉排序树的搜索效率很高,能达到(logn)的时间复杂度,但是当元素有序导致二叉搜索树变成了一个长条(图左&am…

游戏优化之空间划分

使用的动机 定义:将对象根据它们的位置存储在数据结构中,来高效地定位对象。 在游戏中,AI向最近的敌人攻击是很常见的,但如果有很多单位的话,他们AI需要频繁的查找单位,然后在检测是不是距离最近的单位&a…

Git工具使用全解

Git工具使用全解 文章目录Git工具使用全解1.企业开发中的版本控制器2.Git工具的使用场景3.Git工具操作流程(三板斧操作)4.Git工具的安装与常用命令4.1 Git的安装4.2 Git基本操作指令5.Git工具常见问题解决5.1 常见问题:分支冲突解决办法5.2 常见问题:合并…