// argora import AgoraRTC, { IAgoraRTCClient, ILocalAudioTrack, ILocalVideoTrack } from 'agora-rtc-sdk-ng'; import { useRtcStore } from '/@/store/modules/rtc'; export type AgoraClient = IAgoraRTCClient; export { ILocalAudioTrack, ILocalVideoTrack } from 'agora-rtc-sdk-ng'; import { useRtcSdk } from './useTRTC'; export let localAudioTrack: ILocalAudioTrack; export let localVideoTrack: ILocalVideoTrack; export const createAgoraClient = async ( sdkAppId: string, roomId: string, sign: string, userId: string, ): Promise => { const rtcStore = useRtcStore(); const { muteVideoLeader } = useRtcSdk(); const client: IAgoraRTCClient = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp9' }); const uid = await client.join(String(sdkAppId), roomId, sign, userId); console.log('client', uid, client); client.on('volume-indicator', function (result) { result.forEach(function (volume, index) { console.warn(`${index} UID ${volume.uid} Level ${volume.level}`); }); }); client.on('exception', (error) => { console.error(error); }); client.on('user-joined', (user) => { console.log('userJoin', user); }); client.on('user-info-updated', (user) => { console.log('userJoin', user); }); client.on('user-unpublished', async (user, mediaType) => { if (mediaType === 'audio') { console.error('unpublished', user); } if (mediaType === 'video') { // console.error('unpublished', user); //暂时只有leader有video muteVideoLeader.value = true; } }); client.on('user-published', async (user, mediaType) => { await client.subscribe(user, mediaType); if (mediaType === 'video') { console.error('subscribe video success', user); const remoteVideoEl = document.getElementById(`cameraRemoteBox`); if (user.videoTrack && remoteVideoEl) { // remoteVideoEl.style.display = 'block'; console.warn('video play'); user.videoTrack.play(remoteVideoEl); muteVideoLeader.value = false; } } if (mediaType === 'audio') { user.audioTrack?.play(); } }); const isHasCamera = (await AgoraRTC.getCameras()).length > 0; localAudioTrack = await AgoraRTC.createMicrophoneAudioTrack(); localVideoTrack = await AgoraRTC.createCameraVideoTrack(); const localVideoEl = document.getElementById(`camera_box_${userId}`); // if (rtcStore.role === 'leader') { console.warn('isHasCamera', isHasCamera); if (isHasCamera) { rtcStore.setHasCamera(); if (localVideoEl) { localVideoTrack.play(localVideoEl); } await client.publish([localAudioTrack, localVideoTrack]); } else { await client.publish([localAudioTrack]); } } else { await client.publish([localAudioTrack]); } localAudioTrack.setMuted(true); rtcStore.setIsRTCJoined(true); return client; }; export const muteVideo = () => { //通用开音方法 localVideoTrack.setMuted(true); }; export const unMuteVideo = () => { localVideoTrack.setMuted(false); }; export const mutedAudio = () => { //通用禁音方法 console.error('mutedAudio'); localAudioTrack.setMuted(true); }; export const unMutedAudio = () => { //通用开音方法 console.error('unMutedAudio'); localAudioTrack.setMuted(false); };