当前位置:科学 > 正文
LiveKit音视频在Vue中的使用 每日热门
2023-03-19 18:47:16 来源:Shrkx
(资料图)
LiveKit在Vue中的使用
1 LiveKit的详情介绍
LiveKit的官方网址LiveKit是后端使用Golang的语言编写的webrtcLiveKit可以兼容react和软件类程序LiveKit需要在Vue里面自定义编写支持javascript后端的ws必须使用wss协议2 硬件要求
需要WEB端进行音视频的释放权限或者使用https进行权限的释放开发的电脑必须要有摄像头和耳机使用必须使用谷歌浏览器2.1 http释放权限的操作
使用谷歌浏览器在网址栏输入 chrome://flags在进行搜索 unsafely-treat-insecure-origin-as-secure将项目的地址填入,点击进行浏览器重新刷新的操作实例图片
3 LiveKit需要在Vue里面自定义编写
3.1 首先安装插件
yarn安装
npm安装
3.2 在Vue中进行使用
编写房间进行对用的权限获取和释放使用后端的推荐方法
定义全局的room定义具体的方法
是否开启音频的通道// 默认是否开启 room.localParticipant.setMicrophoneEnabled(fasle) // 按钮控制是否开启开启声音 SpeakOne() { this.SpeakStatus = !this.SpeakStatus // 设置静音 room.localParticipant.setMicrophoneEnabled(this.SpeakStatus) }
是否开始开启摄像头// 默认开启摄像头room.localParticipant.setCameraEnabled(true)
进行消息的发送// 可以进行消息指令的发送 async SendMessage() { const strData = JSON.stringify({Video: true}) const encoder = new TextEncoder() const data = encoder.encode(strData); await room.localParticipant.publishData(data, DataPacket_Kind.RELIABLE) }
进行消息的接收// 第一步开启接收的消息 room.on(RoomEvent.DataReceived, this.DataReceived) // 接受数据 DataReceived(payload) { const decoder = new TextDecoder() const strData = decoder.decode(payload) // 这里就是接收的消息 console.log(JSON.parse(strData)) },
对应代码
<template> <div class="hello"> <!-- 显示自己的视频框 --> <div ref="video_one_me" class="me_style"></div> <!--显示的视频--> <div ref="video_one" class="user_style"></div> </div></template><script>import { createLocalTracks, DataPacket_Kind, LogLevel, Room, RoomEvent, setLogExtension, Track, VideoPresets} from "livekit-client";export default { name: "HelloWorld", props: { msg: String }, async mounted() { try { const livekit = require("livekit-client"); // 初始化房间 const room = new livekit.Room({ // automatically manage subscribed video quality adaptiveStream: true, // optimize publishing bandwidth and CPU for published tracks dynacast: true, videoCaptureDefaults: { resolution: VideoPresets.hd.resolution, }, }); const strData = JSON.stringify({some: "data"}) const encoder = new TextEncoder() // publishData takes in a Uint8Array, so we need to convert it const data = encoder.encode(strData); // publish to everyone in the room room.localParticipant.publishData(data, DataPacket_Kind.RELIABLE) // publish to specific participants room.localParticipant.publishData(data, DataPacket_Kind.LOSSY, ["participant_sid"]) // 设置房间的参数 room // 轨道订阅 .on(RoomEvent.TrackSubscribed, this.handleTrackSubscribed) // 取消订阅 .on(RoomEvent.TrackUnsubscribed, this.handleTrackUnsubscribed) // 活动扬声器已更改 .on(RoomEvent.ActiveSpeakersChanged, this.handleActiveSpeakerChange) // 断开的 .on(RoomEvent.Disconnected, this.handleDisconnect) // 音频播放状态已更改 .on(RoomEvent.AudioPlaybackStatusChanged, () => { console.log("Audio playback status changed to", room.canPlaybackAudio) }) // 跟踪静音 .on(RoomEvent.TrackUnmuted, (res) => { console.log("Track muted", res) }) //轨迹静音 .on(RoomEvent.TrackMuted, (res) => { console.log("TrackMuted muted", res) }) // 房间元数据已更改 .on(RoomEvent.RoomMetadataChanged,(res)=>{ console.log("RoomMetadataChanged muted", res) }) // 跟踪流状态已更改 .on(RoomEvent.TrackStreamStateChanged,(res)=>{ console.log("RoomMetadataChanged muted", res) }) // 轨道出版 .on(RoomEvent.TrackPublished, this.TrackPublished) // 收到的数据 .on(RoomEvent.DataReceived, this.DataReceived) // 本地曲目未发布 .on(RoomEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished); const url = "wss://xxxxxx" const token = "" // connect to room await room.connect(url, token); console.log("connected to room", room.name); // 房间的状态 // eslint-disable-next-line no-undef,no-unused-vars // publish local camera and mic tracks await room.localParticipant.enableCameraAndMicrophone(); const p = room.localParticipant; // await p.setScreenShareEnabled(true); // 禁用摄像头使其静音,当静音时,用户的摄像头指示灯将关闭 const track = p.getTrack(Track.Source.Camera); if (track?.isSubscribed) { const videoElement = track.videoTrack?.attach(); // do something with the element videoElement.style.width = "400px" videoElement.style.height = "400px" this.$refs.video_one_me.append(videoElement); } console.log(room.track) // 在创建房间之前创建轨道 await createLocalTracks({ audio: true, video: true, }); // 列出所有麦克风设备 const devices = await Room.getLocalDevices("audioinput"); // 选择最后一个设备 const device = devices[devices.length - 1]; // 在当前房间中,切换到所选设备并将 // 设置为将来的默认音频输入。 await room.switchActiveDevice("audioinput", device.deviceId); // 设置日志 setLogExtension((level, msg, context) => { const enhancedContext = {...context, timeStamp: Date.now()}; if (level >= LogLevel.debug) { console.log(level, msg, enhancedContext); } }); } catch (e) { console.log(e); } }, methods: { // eslint-disable-next-line no-unused-vars handleTrackSubscribed(track, publication, participant) { if (track.kind === Track.Kind.Video || track.kind === Track.Kind.Audio) { // attach it to a new HTMLVideoElement or HTMLAudioElement const element = track.attach(); element.style.width = "200px" element.style.height = "200px" // 进行视频播放元素的操作 this.$refs.video_one.append(element); } }, // eslint-disable-next-line no-unused-vars handleTrackUnsubscribed(track, publication, participant,) { // remove tracks from all attached elements console.log(track); console.log(publication); console.log(participant); track.detach(); }, // eslint-disable-next-line no-unused-vars,no-undef handleLocalTrackUnpublished(track, participant) { console.log(track); console.log(participant); // when local tracks are ended, update UI to remove them from rendering track.detach(); }, // eslint-disable-next-line no-unused-vars handleActiveSpeakerChange(speakers) { console.log(speakers); // show UI indicators when participant is speaking }, handleDisconnect() { console.log("disconnected from room"); }, TrackEventCallbacks(audioPlaybackFailed) { console.log(audioPlaybackFailed) }, TrackPublished(track, publication, participant) { console.log(track) console.log(publication) console.log(participant) }, DataReceived(payload, participant, kind) { const decoder = new TextDecoder() const strData = decoder.decode(payload) console.log(strData) console.log(participant) console.log(kind) } }}</script>
有问题:欢迎关注公众号[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绝对超值