全球球精选!livekt服务端部署
(相关资料图)
硬件需求:
需要一台公网服务器需要共有的redis需要两个https的,同时指向服务器服务器安装docker和Docker Compose 和 Caddy进行安装
docker run --rm -it -v$PWD:/output livekit/generate
在安装的过程中会让输入服务的域名和turn的域名然后在配置文件进行修改指定的redis进行测试
使用网址 :https://livekit.io/connection-test
livekt服务端部署
硬件需求
需要固定ip的服务器一台 用于部署通话服务 安装redis并且修改专门的配置
redis的配置
open /usr/local/etc/redis.conf and comment out the line that says bind 127.0.0.1change protected-mode yes to protected-mode no in the same file进行部署通话服务
然后运行服务器 :ws://localhost:7880
修改配置文件
找到指定的目录:/root 目录下面的livekit.yaml进行修改配置 redisredis: # redis is recommended for production deploys address: 172.17.0.1:6379
然后运行服务器
进行ws转为wss的操作(使用nginx)
必须使用服务器的443端口
然后进行nginx的配置
server { listen 443 ssl; server_name 域名; ssl_certificate 文件的地址; ssl_certificate_key 文件的地址; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://localhost:7880/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; }
即可完成本地的wss的配置
进行测试是否可用和压力测试
使用golang进行编写通信服务器
// 创建服务的链接func CreateFactory(https bool) *lksdk.RoomServiceClient {// 定义数据的类型var roomClient *lksdk.RoomServiceClientif https {host := "https://" + yml_config.CrateYamlFactory().GetString("Livekit.Url")apiKey := yml_config.CrateYamlFactory().GetString("Livekit.apiKey")apiSecret := yml_config.CrateYamlFactory().GetString("Livekit.apiSecret")roomClient = lksdk.NewRoomServiceClient(host, apiKey, apiSecret)} else {host := yml_config.CrateYamlFactory().GetString("Livekit.Host")apiKey := yml_config.CrateYamlFactory().GetString("Livekit.apiKey")apiSecret := yml_config.CrateYamlFactory().GetString("Livekit.apiSecret")roomClient = lksdk.NewRoomServiceClient(host, apiKey, apiSecret)}return roomClient}// 创建推流的服务器数据func CreateNewEgressClient() *lksdk.EgressClient {host := "https://" + yml_config.CrateYamlFactory().GetString("Livekit.Url")apiKey := yml_config.CrateYamlFactory().GetString("Livekit.apiKey")apiSecret := yml_config.CrateYamlFactory().GetString("Livekit.apiSecret")egressClient := lksdk.NewEgressClient(host, apiKey, apiSecret)return egressClient}// 创建房间func CreatRoom(roomName string) (*livekit.Room, error) {roomClient := CreateFactory(false)// create a new roomroom, err := roomClient.CreateRoom(context.Background(), &livekit.CreateRoomRequest{Name: roomName,})return room, err}// 获取房间的列表 => 判断房间是否存在func ListRoom(rooName string) (bool, error) {//定义是否存在这个房间Flag := falseroomClient := CreateFactory(false)res, err := roomClient.ListRooms(context.Background(), &livekit.ListRoomsRequest{})if err != nil {return Flag, err}// 在判断房间是否为空rooms := res.Roomsif rooms == nil {return Flag, err}//房间不为空for _, room := range rooms {if room.Name == rooName {Flag = true}}return Flag, err}//销毁房间终止会议室并导致参与者离开func DestroyRoom(roomId string) {roomClient := CreateFactory(false)roomClient.DeleteRoom(context.Background(), &livekit.DeleteRoomRequest{Room: roomId,})}//断开某人和会议的链接 =》断开参与者与会议室的连接func DestroyPeople(roomName, identity string) {roomClient := CreateFactory(false)roomClient.RemoveParticipant(context.Background(), &livekit.RoomParticipantIdentity{Room: roomName,Identity: identity,})}// 列出房间中的参与者func ListRoomPeople(roomName string) *livekit.ListParticipantsResponse {roomClient := CreateFactory(false)res, _ := roomClient.ListParticipants(context.Background(), &livekit.ListParticipantsRequest{Room: roomName,})return res}// 创建房间的tokenfunc GetJoinToken(room, identity string) (string, error) {at := auth.NewAccessToken(yml_config.CrateYamlFactory().GetString("Livekit.apiKey"), yml_config.CrateYamlFactory().GetString("Livekit.apiSecret"))grant := &auth.VideoGrant{RoomJoin: true,Room: room,}at.AddGrant(grant).SetIdentity(identity).SetValidFor(time.Hour)return at.ToJWT()}//后台参数会议 =》可以进行本地的文件在里面进行播放func ParticipationOne(host, apiKey, apiSecret, roomName, identity string) {roomCB := &lksdk.RoomCallback{ParticipantCallback: lksdk.ParticipantCallback{OnTrackSubscribed: trackSubscribed,},}room, err := lksdk.ConnectToRoom(host, lksdk.ConnectInfo{APIKey: apiKey,APISecret: apiSecret,RoomName: roomName,ParticipantIdentity: identity,}, roomCB)if err != nil {panic(err)}//操作结束后room.Disconnect()}// 已按计划订阅func trackSubscribed(track *webrtc.TrackRemote, publication *lksdk.RemoteTrackPublication, rp *lksdk.RemoteParticipant) {}//定义后台接收视频进行存储的操作func PreservationVideo(RoomName string, RTMP string) error {egressClient := CreateNewEgressClient()streamRequest := &livekit.RoomCompositeEgressRequest{RoomName: RoomName,VideoOnly: true,AudioOnly: true,Layout: "speaker-dark",Output: &livekit.RoomCompositeEgressRequest_Stream{Stream: &livekit.StreamOutput{Protocol: livekit.StreamProtocol_RTMP,Urls: []string{RTMP},},},}egress, err := egressClient.StartRoomCompositeEgress(context.Background(), streamRequest)fmt.Printf("错误是====>:%s\n", err)fmt.Printf("信息是====>:%s\n", egress)return err}// 定义房间发送消息func UpdateMetaData(room, identity string, values interface{}) error {roomClient := CreateFactory(true)data, err := json.Marshal(values)participant, err := roomClient.UpdateParticipant(context.Background(), &livekit.UpdateParticipantRequest{Room: room,Identity: identity,Metadata: string(data),})fmt.Printf("s信息====>:%s\n", participant)fmt.Printf("错误是====>:%s\n", err)return err}// 删除房间func DeleteRoom(roomName string) (*livekit.DeleteRoomResponse, error) {roomClient := CreateFactory(true)room, err := roomClient.DeleteRoom(context.Background(), &livekit.DeleteRoomRequest{Room: roomName,})fmt.Printf("关闭房间错误是====>:%s\n", err)return room, err}
使用网址进行测试
https://livekit.io/
定义出口流的操作
定义配置文件
在/root/livekit-egress 里面创建文件:cat config.yaml
log_level: debugapi_key: APIRbNLHcS9nF5japi_secret: qwexJ82foYZfXKcGbWphKlibCRyfetsBgMS81gersgSPws_url: ws://172.17.0.1:7880insecure: trueredis: address: 172.17.0.1:6379 db: 4
部署出口服务器
进行房间流的转推
//定义后台接收视频进行存储的操作func preservationVideo(RoomName string) {ctx := context.Background()egressClient := lksdk.NewEgressClient("https://域名","apk","apiSecret",)streamRequest := &livekit.RoomCompositeEgressRequest{RoomName: RoomName,Layout: "speaker-dark",Output: &livekit.RoomCompositeEgressRequest_Stream{Stream: &livekit.StreamOutput{Protocol: livekit.StreamProtocol_RTMP,Urls: []string{"rtmp://推流地址:20001/live/489ECAC3"},},},}egress, err := egressClient.StartRoomCompositeEgress(ctx, streamRequest)fmt.Printf("错误是====>:%s\n", err)fmt.Printf("信息是====>:%s\n", egress)}
有问题:欢迎关注公众号[shrkPH]
关键词:
推荐阅读
飞机发明者是谁?飞机有哪些类型?
飞机发明者是谁?飞机是由莱特兄弟发明的,莱特兄弟是美国著名的发明家,他们的哥哥是威尔伯菜特,他们的弟弟是奥维尔莱特。1903年12月17日 【详细】
Google I/O线上开发者大会发布 安卓12新特性支持什么功能?
现在大多数人用的手机还是安卓机,本次Android 12的发布自然也是引起了一大波的关注,国内不少厂商也参与了测试,我们来看看谷歌正式发布A 【详细】
航天员出舱七个小时怎么喝水?太空行走的危险和好处是什么?
航天员出舱七个小时怎么喝水?7月4日,中国宇航员刘伯明和汤洪波出航活动,整个进程持续了7个多小时。据报道,宇航员在舱外服里有饮水袋,在 【详细】
NASA毅力号录下了来自火星的声音 毅力号录下了来自火星的声音怎么回事?
NASA毅力号录下了来自火星的声音近日,有报道称,NASA毅力号录下了来自火星的声音,这非常的奇妙,相信大家十分的感兴趣,下面一起去看看吧 【详细】
北京上空现三个太阳 古代幻日现象预兆什么?
北京上空现三个太阳北京上空现三个太阳 专家释疑今日登上热搜,主要是在12月29日有网友拍到北京上空出现了三个太阳。对于这一现象气象专家 【详细】
相关新闻
- 全球球精选!livekt服务端部署
- LiveKit音视频在Vue中的使用 每日热门
- 中国快递卷了15年,却困住了这个50岁快递员_每日热点
- 储户存款达到“规定数”,就将被“监视”?已有3地开启试点工作-世界速看料
- 雅迪迎来强敌?淮海发布电动两轮车,能导航打电话,续航200km 天天日报
- 热推荐:阴阳师阴界之门(阴阳师阴界之门可以邀请好友打吗)
- 做家务的男人一期(《做家务的男人 第一季》免费在线观看完整版高清,求百度网盘资源)
- 世界通讯!公共网络上的私有安全通道-VPN
- 全球快讯:光幕传感器在智能制造中的重要作用
- 马云曾经被骗去美国的经历,令他不堪回首,电影都不敢这么拍
- 推荐的第33个小程序,46个实用工具请好好收藏
- 全球观点:每月狂赚200万,这位杭州卖家在亚马逊日销近3000单
- 余男个人资料百度_余男个人资料 简讯
- 世界快看:深藏的罪恶的小说(九五五五深藏的罪恶讲了什么)
- 环球看热讯:健力鸡子黄(健力鸡子黄速溶纯蛋黄粉的营养成分有哪些?都有哪些功效)
- 科学家讲述人类何时能够实现不朽-全球时讯
- 我国首次发现奥密克戎新亚型,难道新冠又复发了吗?居民该怎么办_当前速看
- 世界时讯:宠妻无度金牌相公(《宠妻无度——金牌相公》完结了么?作者是不更了还是怎样?)
- 【全球新要闻】HustleGPT是资本主义中一个搞笑又可怕的AI实验
- 两年前的性价比旗舰推荐,小米11 ultra绝对超值