123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // 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<IAgoraRTCClient> => {
- 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);
- };
|