pj-trtc-web
Version:
品杰科技音视频通话组件
661 lines (660 loc) • 45.1 kB
JavaScript
import { ref as c, defineComponent as Te, watch as ge, markRaw as Me, computed as b, onMounted as Ke, onBeforeUnmount as Ne, nextTick as P, openBlock as S, createElementBlock as v, normalizeClass as be, unref as B, createElementVNode as u, createCommentVNode as f, Fragment as Ee, renderList as Ie, toDisplayString as de, renderSlot as Je } from "vue";
import o from "trtc-sdk-v5";
var E = /* @__PURE__ */ ((i) => (i.EnterRoom = "EnterRoom", i.ExitRoom = "ExitRoom", i.KickedOut = "KickedOut", i.RemoteUserEnter = "RemoteUserEnter", i.RemoteUserExit = "RemoteUserExit", i.RemoteVideoAvailable = "RemoteVideoAvailable", i.RemoteVideoUnavailable = "RemoteVideoUnavailable", i.RemoteAudioAvailable = "RemoteAudioAvailable", i.RemoteAudioUnavailable = "RemoteAudioUnavailable", i.ScreenShareStopped = "ScreenShareStopped", i.CustomMessage = "CustomMessage", i.NetworkQuality = "NetworkQuality", i.ConnectionStateChanged = "ConnectionStateChanged", i.AudioPlayStateChanged = "AudioPlayStateChanged", i.VideoPlayStateChanged = "VideoPlayStateChanged", i))(E || {}), D = /* @__PURE__ */ ((i) => (i.Normal = "Normal", i.SubPriority = "SubPriority", i))(D || {});
class Ce {
constructor(n) {
this.inRoom = !1, this.videoAvailable = !1, this.audioAvailable = !1, this.displayName = "", this.userId = n;
}
}
class Oe {
static getPlatform() {
const n = navigator.userAgent || navigator.vendor || window.opera;
return /iPad|iPhone|iPod/.test(n) && !window.MSStream ? "iOS" : /android/i.test(n) ? "Android" : /windows phone/i.test(n) ? "Windows Phone" : /Win(dows )?NT/.test(n) ? "Windows" : /Mac OS X/.test(n) ? "macOS" : /Linux/.test(n) ? "Linux" : "PC";
}
}
const me = c("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA9tJREFUaIHtmUtoXUUYx383Wklpba1thYrEEAS1KDYGS6GCINVFBV0oUVHaLlwVxZUrceFGpIIlSgTpUlDwUcH6KuJr1UqVUClI3QSFlqgVFRSTJu3PxT0H5p6ck8x59WbhHwbmzHwz3/zud+Z1bkelYXWA3cBDwE7gOmABOAMcA94BPgWadaw2mcbUKZfXlDrapO+lKrepR9UNkZ09ps5FQKSaU8fbBtmmnkscfhsBs1udLwGRal69t02QFzMOj6nrCmw3qjMVIFKdNT7qpUE66isZh0WReb4GRKrn2gIpA/NWAyA/twkSCzOoftIAzI1tgsTCXKEeqQlyX9sglyoye+qADMTum8DTwKtB2RjwGbAheZ4FHgA+rLg3x46lduMYmPPAg1SHqa4KYWxrzuyr82pVbdgGTF9A2oDpG0gZmA9WOkiTMH0HaQpmRYA0AdNXkLvV4QzMZGaA2StAEUwtkNgNcRMwCbwErA7Kh4CvgZF0WwKepHfT3AF8Qe+mOU733l6k1YmvycT38ookPhD8cvuD8n1J2U/qSCYyZc9mYUT2B+UHmozI5iB/TU79EPAlvZGJPZsdyekv9LE5p36Rah3UMqoCc57uZ6M8mFJqEgSqw4wD39RxHAvyd5BfG+Rnc2yrvmY/BPVXBvl/YgYYC/JLkN8S5M8U2A8BnwPDyXMK81pgMwZ8DKzLaX9tkP8tZoCxIDNBfjjITwFzBW2G6UYmtU+X5hBmB3CUxTBhFGaIUeTyOxoshwvqpqDusEtrWr0+szSX2TRvjRljmePHmcDx3qBuu3qhBZhB9Y3EttEjyuuB05PqQFA3sQxIVZjoVMb4Znt/+b1B3Sr1o37ClCV/M3D4u3pDBmZCvdgPmLIgI+qfgcNT6vqMzXb1PXU2B+Jf9V31tkyb2jCl30X1fnt/9dPmf+5cq+5UH1EfVu9U1yzRby2YKiCoL2QcnrM7ZwZK9NFRH3XxfSb2X4BGQFCfdbG+t3sc37hEuzUJ9ImkzbSL50xpmI7W+k9yDzABXJUpvwCcAKaTnXmB7gVpK3A7sCpjfyopn0+eO0m/TwU23wH3AH/kjqRGRNK0RX07Jzoxumj3ZDCU02+pyDQBkqab1JftLsvL6Vf1kHrLMn3mLQCH2gZJ02XqVvVx9XgwgOPqE+odiU2ZRSGNzJQF868NkDAdDEAO1uinoz6jXl1kc3nFSX6pJd2vKoVq+qrbN/0PstJUdY4M0nuvLtL6TH6kyDDQWfI/aiypKjv7KPAV+R8NmtBfwF3AyTKNqrxau2gPArqR21W2URWQw8CPFdrF6jTwftlG/wGddFAieKQSSwAAAABJRU5ErkJggg=="), Se = c("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAZJJREFUaIHtmb1KHFEARs8Oa6UprEMEQdAXSJ1KkOi2yqovYEinTd4g1lr5DoHAioVPEEFbxVoWxEZQC39wj8Vi2N3E/Z2dvQ73wC0G7r3zHZjhMt8UVPJAMuoAaRFFQiOKhEYUCY3ciBRbrieAEvAZGB/yvW+BI6AC3A+8m/o6yuqV2VNVSw05Oo1JdUs9VCvqV/WvyDe1lm3+Jp7VVdsLzKi76l3L2pq6jjqnPmUUuB236pT/CnxRf1uXfYtz1L0hB+yFbevhx9Q19bjLdc9FYH7gFy09loBr4DvwsYd1SUF9BMaGEitDCpqPD5LcHIhRJDSiSGhEkdCIIqERRUIjioRGFAmNKBIaCfA06hBpkADVUYdo4BT4QR+ZEuAw9Tj9UwF+AtPAOnDS5boa6qz6OIySqkdu1E/2V9CdvU7ecPSV6YqdK9Md641kIzW13DhxWb3MJHYzF+qi7SVaS+xN9UD9pS6oFGyutSaAReq/FT6k+fD/hxvgD7APPAy6WavIuyVXB2IuiCKhEUVCI4qExgvqJkvk68cm+gAAAABJRU5ErkJggg=="), Fe = c("data:image/png;base64,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"), Ye = c("data:image/png;base64,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"), ve = c("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA3BJREFUaIHdmk+IVVUcxz/PJgRRUchNoAbNoEggBWmCoSuNRHBjqdOqEKld4UIj1yWILirQdtFGcNG/hS4KIl2UiNoiFJoh+t8iamjs7zjzcXHv+M698+a9++498+6tLxzeu/f7zjnf77vnfGf4nddS+T9gUd0CYiFv5CHgaB1CqmIofW0BB4FTwBJgDDhXl6gyaKV7ZAi4BGxO7/8GbAS+q0lX35hdWreBUWAyvV4JvMN/aA+FQseBF4PrbcBLg5VTHq0O8XsWeDp9PwVsBS4PUlQZdDKyAvgCWJNejwEPA7cGqKtvdDICsB34mPbSews4lOP3V5x7Evgc+BD4u+JYoM62zcF71FfNYk/ALVavGwc/qLtzc3drK9XD6gX1A/VJ9a6RQ+qMuj/ocK96OZjwF/X+gN+g/hnJzLR6oIeBYfV1dTLXd0YdRV2v/pXenFDXBp1Hch0/UhcF/AuRjJjOs6aDgW3qeyZm58NN1DdzNy+q9wQDPZvjDwdcy+TxxsJx26thVL1SsN806ngH4pjZb+VcwP2jPhJwq9SfSsmeiy/VI+r3/XYkFZbHlPqY2Q32bcDfUJcE/E6TtVob6MKNq8tti31cvR3wp80+tVMLpLEQuhlRfdvukbw34Bar12ILLIpeRjQbi0PqZwH3q7o64Deof0TWWAhFjEyoD9gW+6D6e8B/4sJFcmEUMaJ6yWwkP5fjw0hGfT+WwKIoakTnRvLZgPtX3RRwq9QfI2kshH6MTKlbbItdoX4T8F+pSwN+hwOM5H6MaIMjuV8j2tBILmNEGxjJZY00LpLLGtGGRXIVI6qvWDyS73MBI7mqkcZEclUj2pBIjmFEGxDJsYxotnAx8EiOaaTWSMYkXWLhU2sqXKB+HWuwFP0WLsJIrlR8OFNO77yoUrioVA5aZ9zlpTqmLrMtdrvZAtsZs0/tpMnmX527j30U6FCfN/4fql6RnK8l73SuibANq2+ot3LjzKgHwg8+pf4c2cy+YPxeteSibbaIfV59V31CnXOssBTYBTwKLKtc6ocJ4GVgOr0eAa6m80BydLEDmKk8U4lvpGrr9V9yqTbfQc9CI/rxXl1Goh/v1XX8PAE8Q3vvDAMnKo1Ywx7pFsl7y45V9w8CjpEciJK+Xis7UF17JMQIycZ/jeQXGKXQBCNRUPfSioY74UCh5dwJ0nQAAAAASUVORK5CYII="), Ge = c("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA5BJREFUeJztmkuIjWEYx39zBjPGpZQsyK3MoJAFEpIF5ZayILnulJ1buWxcNooF2cnKLbJRshALklsuC0luC5ciJQ3j1hjT3+Kdw+k458x5vss5Z3h+9axO3/M+7+883/e+73dOnSSc8shUu4CehMsy4LIMuCwDLsuAyzLgsgy4LAMuy4DLMuCyDLgsAy7LgMsy4LIMuCwDLsuAyzLgsgy4LAO9ql1AHg1AEzAIaAW+Ae1VrSiHSsqqB8YBY4HmrmgBRgADgQFF6vkJfAbagFfA86541hVPgM6UawegLsWfwuqBycAsYCYwl9AxSfMVuAXcAK4D14AfKYyTuKzewDxgJbCE0C2Vpg04D5wGLhE6MxGSkjUdWAMsBwYnkTAh3gNngZPA7bjJ4siqAxYD2wi3Wa1zHzgMnCLiMy6KrD7AamArMD7KoFXmMXCA0G0dlgutshYABwkrWlR+Egp+BLzuileEZ81X/mwXstuI/oTVciRh5RwBTCCsrPUx6ngKbAQulntBubKaCZIWRSjqG3CF8LC9AzwAvkfIk08/wmo7DZgPzAYaI+S5AGwmbEdKI6lU9Ja0V1K7orFCUmM3YyQVTZLWRayzXWGevUqNUaqzRhHu6zgP79HAyxjXWxkFvIhx/V1gFUW6rNjZcC3wkJ6xyiXJVMKqub7Qh/myGoDjwDHCg/V/ZABwhOCgT+4HubIGEVaGNZWrq6ZZS1iYfm+ys7JGE85WcypfU00zg3DubIYgq4VwFOiJG8xKMIZwQG/JAIeAIdWtp+YZAhzK8P+teFGZmQHeVruKHsKbDLAnxQFaU8xdiE8p5t6XAc4AO1JIfpl0iy9EK3A1hbx7gBO5Z5/tEc9VhbgpaWipc1aKMVzSvQTnsjubO3+gLTETv5a0XlJGlRWUHxlJyyS9iDmfXbl5Cw0UpcN+KJzaGwrkq2Y0SdovqSPCnH53VDaKDWIR9kDSpApMPE5MkfTYMKe/RKmELFTeLXlc4durtoxyoq+ko2XMaVexHN0NUKzDOiRtqAEBUWKTpM4i8yrYUeXKynZY7j3/QdLCGph0nFgq6WPOnDol7ezuunLfwU8kvOf+ApwD3qWwl6k0w4BlhHf5Fwkv/UqS5s/3/xz+lyMDLsuAyzLgsgy4LAMuy4DLMuCyDLgsAy7LgMsy4LIMuCwDLsuAyzLgsgy4LAMuy4DLMuCyDLgsAy7LgMsy4LIM/ALJ3UDt8dXUVQAAAABJRU5ErkJggg=="), Be = c("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAA0FJREFUaIHtmUtIVUEYx3/XG5RQ3UgzrcBHDytIepG2amOrqEWuIshsHQQRLWrdgx6LiAjXRlALpUW1bVeQRmYFRlAh2VPMMnTR9d/inJvjSW3Ombl0wfuHgY8z8/++73/mcc7MpCThGSlgD9AC7ARWhc8HgIdAJ3AX8BtYks/SKKlH/0a3pB0+Y/sUcVDSuIWIHMYkHfAVPyU/Q2s3cA+YF5OXBfYC910T8CEkA7wGyhPyPwNrge8uSZS4kEOcILkIgArguGsSPnrkDVDj6OMdUIvDSubaIxtxFwFQDdS7OHAVUuPIN1HrQnYV4jI3oljmQnYV4mOx8OLLZyL/FUUhhYaikEJDUUihoSik0GArZClwFTgHzM9fOn9QClwErmH5G2S7ozsJHA3tt0B73Mxioo1gnwPwM4w/K2x7ZLlhV8VMKgkqDNvqZ3LOzZGCh62QUcNeaNg/POYyYtiL4sawFfLJsM05MmjJt8EHw15p2B9tyLZCTGc1hv2UYFVxxWjoK4fqGWLPCFshPYbdyOTaPoaHwzWCw73x0C4Dtht13VYeLI8kU5LeG8edrUZdg6RsjKPSKLKSNhv+2oy6gTC217PfdiNAr6QSo+6yg5ALhp+0pD6j7rptfnGEbNDUN98aSeBOAhFdITfn54hR90vS+nwIQdJNI9CQpDURMZdkN8yyCnrCFFEr6YvRpiNObnGF1En6ZgR7LikTadMg6bak0WkEjEq6JWlThJOR9MJoNyypJp9CkLRP0oQRtF9S/TTtSiU1SdofliZJC6Zptzp8ISZa4uaVRAiSzkYCf1UwZ0pi+EgrWKGGIr7OJMkpqRAkndbfeCbpsKSyWXjlYZu+CHdC0qmk+bheKxwCrgBLIs+zwGOCK4fcl7kSqAs/dulI+2HgGNCROBOHHsmVKgWTOwkmFEz+Stc8fAjJlXWSzmvqEjoThhV8YKOrV+Li6zLURJrg0mYrwfa4MXz+iGAP/gToJxh+3hD3FtYGWeBlWLYxVciNPMQD5uAOseBRFFJoSDrZFwArLNplInadBWeQyd2iNZIsv1uAB8DiuERLjAC7gN44pCRDq5n8iYCg55rjkpII6QReJeDZoh/oikv6DZegDXy7Ja0xAAAAAElFTkSuQmCC"), Pe = c("data:image/png;base64,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"), We = c("data:image/png;base64,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"), Xe = "pj-trtc-web";
class He {
constructor(n = null) {
this.pre = n ? String(n) : Xe;
}
v(...n) {
console.log(this.pre, ...n);
}
e(...n) {
console.error(this.pre, ...n);
}
}
const xe = ["id"], qe = {
key: 1,
class: "video-grid"
}, je = { class: "video-wrapper" }, Ze = ["id", "onClick"], ze = {
key: 0,
class: "user-name"
}, _e = { class: "media-status" }, $e = ["src"], eA = ["src"], AA = {
key: 2,
class: "sub-container"
}, aA = ["id"], tA = { class: "sub-bottom-section" }, oA = ["id", "onClick"], iA = {
key: 0,
class: "user-name"
}, sA = { class: "media-status" }, nA = ["src"], rA = ["src"], lA = {
key: 3,
class: "control-bar"
}, cA = ["src"], uA = ["src"], gA = ["src"], EA = ["src"], IA = ["src"], dA = /* @__PURE__ */ Te({
name: "PjTrtcWeb",
__name: "PjTrtcWeb",
props: {
params: {
type: Object,
required: !1,
default: null
},
autoEnterRoom: {
type: Boolean,
required: !1,
default: !1
},
showScreenShare: {
type: Boolean,
required: !1,
default: !1
},
splitScreenMode: {
type: String,
required: !1,
default: D.Normal
},
//不显示控制栏
disableControlBar: {
type: Boolean,
required: !1,
default: !1
}
},
emits: ["roomEvent", "error", "videoClick"],
setup(i, { expose: n, emit: d }) {
const p = new He(), R = i, l = c(R.params);
ge(() => R.params, (e) => {
l.value = e;
});
const t = Me(o.create()), y = c("exited"), fe = c(new Array()), pe = c(new Array()), w = c(""), T = c(""), g = c(new Array()), C = c(new Array()), Q = c(!0), U = c(!0), J = c(!1), V = c(!0), I = c(null), h = b(() => g.value.find((e) => e.includes("_screen")));
ge(() => h.value, (e) => {
R.splitScreenMode === D.SubPriority && ye();
});
const Qe = b(() => g.value.filter((e) => !e.includes("_screen"))), O = b(() => (e) => {
if (e === "local")
return Q.value ? Se.value : ve.value;
{
let A = e.replace("_main", "").replace("_screen", "");
const a = C.value.find((s) => s.userId == A);
return a != null && a.videoAvailable ? Se.value : ve.value;
}
}), F = b(() => (e) => {
if (e === "local")
return U.value ? Be.value : me.value;
{
let A = e.replace("_main", "").replace("_screen", "");
const a = C.value.find((s) => s.userId == A);
return a != null && a.audioAvailable ? Be.value : me.value;
}
}), W = async () => {
const e = await o.getCameraList();
e.forEach((a) => {
a.value = a.deviceId;
});
const A = await o.getMicrophoneList();
A.forEach((a) => {
a.value = a.deviceId;
}), fe.value = e, pe.value = A, w.value || (w.value = e[0].deviceId), T.value || (T.value = A[0].deviceId);
};
try {
navigator.mediaDevices.getUserMedia({ audio: !0, video: !0 }).then((e) => {
e.getTracks().forEach((A) => {
A.stop();
}), W();
}).catch((e) => {
M(e);
});
} catch (e) {
M(e);
}
navigator.mediaDevices.ondevicechange = W, n({
start: function(e = null) {
e && (l.value = e), Ue();
},
exit: function() {
Y();
},
setVideoDisplayName: function(e, A) {
const a = C.value.find((s) => s.userId === e);
if (a)
a.displayName = A;
else {
let s = new Ce(e);
s.displayName = A, C.value.push(s);
}
},
getCameraList: async function() {
const e = await o.getCameraList();
return e.forEach((A) => {
A.value = A.deviceId;
}), e;
},
getMicrophoneList: async function() {
const e = await o.getMicrophoneList();
return e.forEach((A) => {
A.value = A.deviceId;
}), e;
},
switchCamera: function(e) {
he(e);
},
switchMicrophone: function(e) {
Re(e);
},
setSpeaker: function(e) {
X(e);
},
setVideoProfile: function(e) {
De(e);
},
sendCustomMessage: function(e, A) {
ke(e, A);
},
switchFrontCamera: function() {
H();
},
toggleVideo: async function() {
return re();
},
toggleAudio: async function() {
return le();
},
toggleScreenShare: async function() {
return ue();
}
});
const r = d;
Ke(() => {
let e = Oe.getPlatform();
J.value = e == "Android" || e == "iOS" || e == "Windows Phone";
}), Ne(() => {
Y();
});
async function he(e) {
await t.updateLocalVideo({ option: { cameraId: e } });
}
async function ke(e, A) {
await t.sendCustomMessage({ cmdId: e, data: new TextEncoder().encode(A).buffer });
}
async function De(e) {
await t.updateLocalVideo({ option: { profile: e } });
}
async function Re(e) {
await t.updateLocalAudio({ option: { microphoneId: e } });
}
async function X(e) {
await t.setCurrentSpeaker(e);
}
async function H() {
V.value = !V.value, await t.updateLocalVideo({ option: { useFrontCamera: V.value } });
}
async function Ue() {
let e = l.value;
if (!e || !e.roomId || !e.sdkAppId || !e.userId || !e.userSig) {
r("error", new Error("入房参数不完整"));
return;
}
y.value = "entering";
let A = l.value.privateMapKey ? {
sdkAppId: Number(l.value.sdkAppId),
roomId: Number(l.value.roomId),
userId: l.value.userId,
userSig: l.value.userSig,
privateMapKey: l.value.privateMapKey
} : {
sdkAppId: Number(l.value.sdkAppId),
roomId: Number(l.value.roomId),
userId: l.value.userId,
userSig: l.value.userSig
};
await t.enterRoom(A), y.value = "entered", Ve(), await se(), await ne(), l.value.speakerId && X(l.value.speakerId), r("roomEvent", E.EnterRoom);
}
async function Y() {
try {
Le(), await t.exitRoom(), await t.stopLocalVideo(), await t.stopLocalAudio(), y.value = "exited", g.value = [], r("roomEvent", E.ExitRoom);
} catch (e) {
r("error", new Error(`退出房间失败: ${e.message}`));
}
}
function Ve() {
t.on(o.EVENT.ERROR, M), t.on(o.EVENT.KICKED_OUT, j), t.on(o.EVENT.REMOTE_USER_ENTER, Z), t.on(o.EVENT.REMOTE_USER_EXIT, z), t.on(o.EVENT.REMOTE_VIDEO_AVAILABLE, _), t.on(o.EVENT.REMOTE_VIDEO_UNAVAILABLE, $), t.on(o.EVENT.REMOTE_AUDIO_UNAVAILABLE, ee), t.on(o.EVENT.REMOTE_AUDIO_AVAILABLE, oe), t.on(o.EVENT.SCREEN_SHARE_STOPPED, ie), t.on(o.EVENT.CUSTOM_MESSAGE, Ae), t.on(o.EVENT.NETWORK_QUALITY, ae), t.on(o.EVENT.CONNECTION_STATE_CHANGED, te), t.on(o.EVENT.AUDIO_PLAY_STATE_CHANGED, q), t.on(o.EVENT.VIDEO_PLAY_STATE_CHANGED, x);
}
function Le() {
t.off(o.EVENT.ERROR, M), t.off(o.EVENT.KICKED_OUT, j), t.off(o.EVENT.REMOTE_USER_ENTER, Z), t.off(o.EVENT.REMOTE_USER_EXIT, z), t.off(o.EVENT.REMOTE_VIDEO_AVAILABLE, _), t.off(o.EVENT.REMOTE_VIDEO_UNAVAILABLE, $), t.off(o.EVENT.REMOTE_AUDIO_UNAVAILABLE, ee), t.off(o.EVENT.REMOTE_AUDIO_AVAILABLE, oe), t.off(o.EVENT.SCREEN_SHARE_STOPPED, ie), t.off(o.EVENT.CUSTOM_MESSAGE, Ae), t.off(o.EVENT.NETWORK_QUALITY, ae), t.off(o.EVENT.CONNECTION_STATE_CHANGED, te), t.off(o.EVENT.AUDIO_PLAY_STATE_CHANGED, q), t.off(o.EVENT.VIDEO_PLAY_STATE_CHANGED, x);
}
function x(e) {
p.v(`视频播放状态改变: ${JSON.stringify(e)}`), r("roomEvent", E.VideoPlayStateChanged, e);
}
function q(e) {
r("roomEvent", E.AudioPlayStateChanged, e);
}
function M(e) {
r("error", e);
}
function j() {
r("roomEvent", E.KickedOut);
}
function Z(e) {
const { userId: A } = e, a = C.value.find((s) => s.userId == A);
if (a)
a.inRoom = !0;
else {
let s = new Ce(A);
s.inRoom = !0, C.value.push(s);
}
r("roomEvent", E.RemoteUserEnter, A);
}
function z(e) {
const { userId: A } = e, a = C.value.find((s) => s.userId == A);
a && (a.inRoom = !1), g.value = g.value.filter(
(s) => !s.startsWith(A)
), I.value && I.value.startsWith(A) && K(), r("roomEvent", E.RemoteUserExit, A);
}
async function _(e) {
const { userId: A, streamType: a } = e;
r("roomEvent", E.RemoteVideoAvailable, A);
const s = C.value.find((m) => m.userId === A);
s && (s.videoAvailable = !0);
try {
const m = a === o.TYPE.STREAM_TYPE_MAIN ? `${A}_main` : `${A}_screen`;
g.value.includes(m) || g.value.push(m), await P(), await t.startRemoteVideo({
userId: A,
streamType: a,
view: m,
option: {
fillMode: "contain",
receiveWhenViewVisible: !0
}
}), I.value === m && await t.updateRemoteVideo({
userId: A,
streamType: a,
view: `${m}_fullscreen`,
option: {
fillMode: "contain",
receiveWhenViewVisible: !0
}
});
} catch (m) {
r("error", new Error(`开启远端[${A}]视频失败: ${m.message}`));
}
}
function $(e) {
const { userId: A, streamType: a } = e;
r("roomEvent", E.RemoteVideoUnavailable, A);
const s = C.value.find((G) => G.userId === A);
s && a === o.TYPE.STREAM_TYPE_MAIN && (s.videoAvailable = !1);
const m = a === o.TYPE.STREAM_TYPE_MAIN ? `${A}_main` : `${A}_screen`;
t.stopRemoteVideo({ userId: e.userId, streamType: a }), m.includes("_screen") && (g.value = g.value.filter((G) => G !== m)), I.value === m && K();
}
function ee(e) {
const { userId: A } = e;
r("roomEvent", E.RemoteAudioUnavailable, A);
const a = C.value.find((s) => s.userId === A);
a && (a.audioAvailable = !1);
}
function Ae(e) {
let A = {
userId: e.userId,
cmdId: e.cmdId,
message: new TextDecoder().decode(e.data)
};
r("roomEvent", E.CustomMessage, A);
}
function ae(e) {
r("roomEvent", E.NetworkQuality, e);
}
function te(e) {
console.log("连接状态发生变化", e), r("roomEvent", E.ConnectionStateChanged, e);
}
function oe(e) {
const { userId: A } = e;
r("roomEvent", E.RemoteAudioAvailable, A);
const a = C.value.find((s) => s.userId === A);
a && (a.audioAvailable = !0);
}
function ie() {
k.value = !1, r("roomEvent", E.ScreenShareStopped);
}
async function se() {
try {
l.value.microphoneId && (T.value = l.value.microphoneId), await t.startLocalAudio({
option: {
microphoneId: T.value
}
});
} catch (e) {
r("error", new Error(`开启本地音频失败: ${e.message}`));
}
}
async function ne() {
try {
l.value.cameraId && (w.value = l.value.cameraId);
var e = l.value.videoProfile ? l.value.videoProfile : "1080p";
await t.startLocalVideo({
view: "local",
option: {
cameraId: w.value,
profile: e,
fillMode: "contain"
}
});
} catch (A) {
r("error", new Error(`开启本地视频失败: ${A.message}`));
}
}
const re = async () => {
try {
return Q.value ? (await t.stopLocalVideo(), V.value = !0) : await ne(), Q.value = !Q.value, Q.value;
} catch (e) {
return r("error", new Error(`切换视频状态失败: ${e.message}`)), !1;
}
}, le = async () => {
try {
U.value ? await t.stopLocalAudio() : await se(), U.value = !U.value;
} catch (e) {
r("error", new Error(`切换音频状态失败: ${e.message}`));
}
return U.value;
}, L = async (e) => {
if (I.value === e)
K();
else {
if (I.value = e, await P(), e === "local")
await t.updateLocalVideo({
view: "local_fullscreen",
option: {
cameraId: w.value,
profile: "1080p"
}
});
else {
const A = e.includes("_screen") ? o.TYPE.STREAM_TYPE_SUB : o.TYPE.STREAM_TYPE_MAIN;
await t.updateRemoteVideo({
userId: e.replace("_main", "").replace("_screen", ""),
streamType: A,
view: `${e}_fullscreen`,
option: {
fillMode: "contain",
receiveWhenViewVisible: !0
}
});
}
r("videoClick", e, !0), p.v(e, "进入全屏");
}
}, K = async () => {
if (!I.value) return;
p.v(I.value, "退出全屏"), r("videoClick", I.value, !1);
const e = I.value;
I.value = null;
try {
if (e === "local")
await t.updateLocalVideo({
view: "local",
option: {
cameraId: w.value,
profile: "1080p"
}
});
else {
const A = e, a = A.includes("_screen") ? o.TYPE.STREAM_TYPE_SUB : o.TYPE.STREAM_TYPE_MAIN;
ce(A) && await t.updateRemoteVideo({
userId: A.replace("_main", "").replace("_screen", ""),
streamType: a,
view: A,
option: {
fillMode: "contain",
receiveWhenViewVisible: !0
}
});
}
} catch (A) {
console.warn("退出全屏时更新视图失败:", A);
}
};
async function ye() {
p.v("刷新所有视图显示"), await P(), await t.updateLocalVideo({
view: "local",
option: {
cameraId: w.value,
profile: l.value.videoProfile ? l.value.videoProfile : "1080p"
}
}), g.value.forEach(async (e) => {
const A = e.includes("_screen") ? o.TYPE.STREAM_TYPE_SUB : o.TYPE.STREAM_TYPE_MAIN;
await t.updateRemoteVideo({
userId: e.replace("_main", "").replace("_screen", ""),
streamType: A,
view: e,
option: {
fillMode: "contain",
receiveWhenViewVisible: !0
}
});
});
}
const N = (e) => {
const A = e.replace("_main", "").replace("_screen", ""), a = C.value.find((s) => s.userId === A);
return a ? a.displayName : "";
}, ce = (e) => {
if (e === "local")
return Q.value;
{
const A = e.replace("_main", "").replace("_screen", ""), a = C.value.find((s) => s.userId === A);
return (a == null ? void 0 : a.videoAvailable) ?? !1;
}
}, k = c(!1), ue = async () => {
try {
if (k.value)
await t.stopScreenShare(), k.value = !1;
else {
if (g.value.some((e) => e.includes("_screen"))) {
alert("请等待其他人停止分享屏幕后再开启屏幕共享");
return;
}
await t.startScreenShare({
option: {
profile: "1080p"
}
}), k.value = !0;
}
} catch (e) {
r("error", new Error(`切换屏幕共享失败: ${e.message}`));
}
return k.value;
};
return (e, A) => y.value === "entered" ? (S(), v("div", {
key: 0,
class: be(["trtc-container", {
"multi-users-normal": g.value.length > 1 && (i.splitScreenMode === B(D).Normal || !h.value) && g.value.length < 4,
"single-remote": g.value.length === 1,
"nine-square-grid": g.value.length > 3 && (i.splitScreenMode === B(D).Normal || !h.value)
}])
}, [
I.value && ce(I.value) ? (S(), v("div", {
key: 0,
class: "fullscreen-layer",
onClick: K
}, [
u("div", {
id: I.value + "_fullscreen",
class: "fullscreen-video"
}, null, 8, xe)
])) : f("", !0),
i.splitScreenMode === B(D).Normal || !h.value ? (S(), v("div", qe, [
u("div", je, [
u("div", {
id: "local",
class: "video-box",
onClick: A[0] || (A[0] = (a) => L("local"))
}),
(S(!0), v(Ee, null, Ie(g.value, (a) => (S(), v("div", {
key: a,
id: a,
class: "video-box",
onClick: (s) => L(a)
}, [
N(a) ? (S(), v("div", ze, de(N(a)), 1)) : f("", !0),
u("div", _e, [
u("img", {
src: O.value(a),
class: "status-icon"
}, null, 8, $e),
u("img", {
src: F.value(a),
class: "status-icon"
}, null, 8, eA)
])
], 8, Ze))), 128))
])
])) : (S(), v("div", AA, [
u("div", {
class: "sub-top-section",
id: h.value,
onClick: A[1] || (A[1] = (a) => L(h.value))
}, null, 8, aA),
u("div", tA, [
u("div", {
id: "local",
class: "sub-bottom-item",
onClick: A[2] || (A[2] = (a) => L("local"))
}),
(S(!0), v(Ee, null, Ie(Qe.value, (a) => (S(), v("div", {
class: "sub-bottom-item",
key: a,
id: a,
onClick: (s) => L(a)
}, [
N(a) ? (S(), v("div", iA, de(N(a)), 1)) : f("", !0),
u("div", sA, [
u("img", {
src: O.value(a),
class: "status-icon"
}, null, 8, nA),
u("img", {
src: F.value(a),
class: "status-icon"
}, null, 8, rA)
])
], 8, oA))), 128))
])
])),
i.disableControlBar ? f("", !0) : (S(), v("div", lA, [
J.value ? (S(), v("button", {
key: 0,
class: "control-btn",
onClick: H
}, [
u("img", {
src: V.value ? B(Fe) : B(Ye)
}, null, 8, cA)
])) : f("", !0),
u("button", {
class: "control-btn",
onClick: re
}, [
u("img", {
src: O.value("local")
}, null, 8, uA)
]),
u("button", {
class: "control-btn hangup",
onClick: Y
}, [
u("img", { src: B(Ge) }, null, 8, gA)
]),
u("button", {
class: "control-btn",
onClick: le
}, [
u("img", {
src: F.value("local")
}, null, 8, EA)
]),
!J.value && i.showScreenShare ? (S(), v("button", {
key: 1,
class: "control-btn",
onClick: ue
}, [
u("img", {
src: k.value ? B(We) : B(Pe)
}, null, 8, IA)
])) : f("", !0),
Je(e.$slots, "bottom-option", {}, void 0, !0)
]))
], 2)) : f("", !0);
}
}), CA = (i, n) => {
const d = i.__vccOpts || i;
for (const [p, R] of n)
d[p] = R;
return d;
}, we = /* @__PURE__ */ CA(dA, [["__scopeId", "data-v-b45f91de"]]);
we.name = "PjTrtcWeb";
const mA = {
install(i) {
i.component("PjTrtcWeb", we);
}
};
class wA {
/**
* 获取摄像头列表
* @returns
*/
static async getCameraList() {
const n = await o.getCameraList();
return n.forEach((d) => {
d.value = d.deviceId;
}), n;
}
/**
* 获取麦克风列表
* @returns
*/
static async getMicrophoneList() {
const n = await o.getMicrophoneList();
return n.forEach((d) => {
d.value = d.deviceId;
}), n;
}
/**
* 获取扬声器列表
* @returns
*/
static async getSpeakerList() {
const n = await o.getSpeakerList();
return n.forEach((d) => {
d.value = d.deviceId;
}), n;
}
/**
* 是否支持当前浏览器
* @returns
*/
static async isSupported() {
return !!(await o.isSupported()).result;
}
}
const SA = [
mA
], fA = {
install(i) {
SA.forEach((n) => {
i.use(n);
});
}
};
export {
wA as DeviceUtil,
mA as PjTrtcWeb,
E as RoomEvents,
fA as default
};