|
@@ -1,9 +1,18 @@
|
|
|
<template>
|
|
|
<div class="trtccom" v-if="show">
|
|
|
<Device @switchDevice="switchDevice" @canUseDevice="canUseDevice" />
|
|
|
- <div class="local" :class="{ disabledlocal: role == 'customer' || !videoDeviceId }" id="local" v-if="isJoined">
|
|
|
+ <div
|
|
|
+ class="local"
|
|
|
+ :class="{ disabledlocal: role == 'customer' || !videoDeviceId }"
|
|
|
+ id="local"
|
|
|
+ v-if="isJoined"
|
|
|
+ >
|
|
|
<div class="micBox">
|
|
|
- <img v-if="muteAudioLeader" :src="require('@/assets/images/rtcLive/mic_off@2x.png')" alt="" />
|
|
|
+ <img
|
|
|
+ v-if="muteAudioLeader"
|
|
|
+ :src="require('@/assets/images/rtcLive/mic_off@2x.png')"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<i v-else class="speak_mic"></i>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -12,22 +21,40 @@
|
|
|
<div
|
|
|
class="local"
|
|
|
:data-role="item.userId_"
|
|
|
- :class="{ disabledlocal: item.userId_.indexOf('customer') > -1 || !videoDeviceId }"
|
|
|
+ :class="{
|
|
|
+ disabledlocal:
|
|
|
+ item.userId_.indexOf('customer') > -1 || !videoDeviceId,
|
|
|
+ }"
|
|
|
v-for="item in invitedRemoteStreams"
|
|
|
:id="item.userId_"
|
|
|
:key="item.userId_"
|
|
|
>
|
|
|
<div class="micBox">
|
|
|
- <img v-if="muteAudioLeader" :src="require('@/assets/images/rtcLive/mic_off@2x.png')" alt="" />
|
|
|
+ <img
|
|
|
+ v-if="muteAudioLeader"
|
|
|
+ :src="require('@/assets/images/rtcLive/mic_off@2x.png')"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<i v-else class="speak_mic"></i>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
- <div class="videoBox userVideo" v-show="props.videoMuted || muteVideoLeader">
|
|
|
- <img :src="require('@/assets/images/rtcLive/avatar_small@2x.png')" alt="" />
|
|
|
+ <div
|
|
|
+ class="videoBox userVideo"
|
|
|
+ v-show="props.videoMuted || muteVideoLeader"
|
|
|
+ v-if="false"
|
|
|
+ >
|
|
|
+ <img
|
|
|
+ :src="require('@/assets/images/rtcLive/avatar_small@2x.png')"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<div class="micBox">
|
|
|
- <img v-if="muteAudioLeader" :src="require('@/assets/images/rtcLive/mic_off@2x.png')" alt="" />
|
|
|
+ <img
|
|
|
+ v-if="muteAudioLeader"
|
|
|
+ :src="require('@/assets/images/rtcLive/mic_off@2x.png')"
|
|
|
+ alt=""
|
|
|
+ />
|
|
|
<i v-else class="speak_mic"></i>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -37,7 +64,15 @@
|
|
|
<script setup>
|
|
|
import TRTC, { Client, LocalStream } from "trtc-js-sdk";
|
|
|
import { Dialog } from "@/global_components/";
|
|
|
-import { ref, computed, watch, defineEmits, defineProps, nextTick, onUnmounted } from "vue";
|
|
|
+import {
|
|
|
+ ref,
|
|
|
+ computed,
|
|
|
+ watch,
|
|
|
+ defineEmits,
|
|
|
+ defineProps,
|
|
|
+ nextTick,
|
|
|
+ onUnmounted,
|
|
|
+} from "vue";
|
|
|
import Device from "./trtc/Device";
|
|
|
import { useStore } from "vuex";
|
|
|
import browser from "@/utils/browser";
|
|
@@ -60,7 +95,13 @@ const isPublished = computed(() => store.getters["rtc/isPublished"]);
|
|
|
const videoDeviceId = computed(() => store.getters["rtc/videoDeviceId"]);
|
|
|
|
|
|
const initParamsStates = computed(
|
|
|
- () => !!(store.getters["rtc/sdkAppId"] && store.getters["rtc/secretKey"] && store.getters["rtc/roomId"] && store.getters["rtc/userId"])
|
|
|
+ () =>
|
|
|
+ !!(
|
|
|
+ store.getters["rtc/sdkAppId"] &&
|
|
|
+ store.getters["rtc/secretKey"] &&
|
|
|
+ store.getters["rtc/roomId"] &&
|
|
|
+ store.getters["rtc/userId"]
|
|
|
+ )
|
|
|
);
|
|
|
const userSig = computed(() => store.getters["rtc/userSig"]);
|
|
|
let localClient = "";
|
|
@@ -196,6 +237,9 @@ async function handlePublish() {
|
|
|
if (isPublished.value) {
|
|
|
return;
|
|
|
}
|
|
|
+ if (role.value != "leader") {
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
try {
|
|
|
await localClient.publish(localStream);
|
|
@@ -365,7 +409,9 @@ function handleStreamAdded(event) {
|
|
|
console.info(`unsubscribe failed: ${error.message_}`);
|
|
|
});
|
|
|
} else {
|
|
|
- console.log(`remote stream added: [${userId}] ID: ${id} type: ${remoteStream.getType()}`);
|
|
|
+ console.log(
|
|
|
+ `remote stream added: [${userId}] ID: ${id} type: ${remoteStream.getType()}`
|
|
|
+ );
|
|
|
localClient.subscribe(remoteStream).catch((error) => {
|
|
|
console.info(`subscribe failed: ${error.message_}`);
|
|
|
});
|
|
@@ -378,9 +424,17 @@ async function handleStreamSubscribed(event) {
|
|
|
if (remoteStream.userId_ == store.getters["rtc/userId"]) {
|
|
|
return;
|
|
|
}
|
|
|
- console.info(remoteStream.userId_, store.getters["rtc/userId"], "handleStreamSubscribedhandleStreamSubscribed.value");
|
|
|
-
|
|
|
- if (!invitedRemoteStreams.value.some((item) => item.userId_ == remoteStream.userId_)) {
|
|
|
+ console.info(
|
|
|
+ remoteStream.userId_,
|
|
|
+ store.getters["rtc/userId"],
|
|
|
+ "handleStreamSubscribedhandleStreamSubscribed.value"
|
|
|
+ );
|
|
|
+
|
|
|
+ if (
|
|
|
+ !invitedRemoteStreams.value.some(
|
|
|
+ (item) => item.userId_ == remoteStream.userId_
|
|
|
+ )
|
|
|
+ ) {
|
|
|
invitedRemoteStreams.value.push(remoteStream);
|
|
|
}
|
|
|
|
|
@@ -413,7 +467,9 @@ function handleStreamRemoved(event) {
|
|
|
function handleStreamUpdated(event) {
|
|
|
const remoteStream = event.stream;
|
|
|
const userId = remoteStream.getUserId();
|
|
|
- console.log(`RemoteStream updated: [${userId}] audio:${remoteStream.hasAudio()} video:${remoteStream.hasVideo()}`);
|
|
|
+ console.log(
|
|
|
+ `RemoteStream updated: [${userId}] audio:${remoteStream.hasAudio()} video:${remoteStream.hasVideo()}`
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
let switchDevice = async ({ videoId, audioId }) => {
|
|
@@ -453,7 +509,8 @@ let canUseDevice = () => {
|
|
|
left: 20px;
|
|
|
border-radius: 50%;
|
|
|
overflow: hidden;
|
|
|
- background: url(~@/assets/images/rtcLive/avatar_small@2x.png) center center no-repeat;
|
|
|
+ background: url(~@/assets/images/rtcLive/avatar_small@2x.png) center center
|
|
|
+ no-repeat;
|
|
|
}
|
|
|
.videoBox {
|
|
|
width: 72px;
|