|
@@ -3,6 +3,7 @@ using Agora.Util;
|
|
|
using SC.XR.Unity;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Linq;
|
|
|
using UnityEngine;
|
|
|
using UnityEngine.Serialization;
|
|
|
using UnityEngine.UI;
|
|
@@ -49,6 +50,10 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
|
|
|
public bool isSwitchCamera;
|
|
|
|
|
|
+
|
|
|
+ private string mainViewPeerId;
|
|
|
+
|
|
|
+ public List<CustomPeer> listCustomPeer;
|
|
|
private void Start()
|
|
|
{
|
|
|
LoadAssetData();
|
|
@@ -64,6 +69,7 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
dicPeeridAndUid = new Dictionary<string, uint>();
|
|
|
isRoom = false;
|
|
|
isSwitchCamera = false;
|
|
|
+ listCustomPeer = new List<CustomPeer>();
|
|
|
}
|
|
|
|
|
|
|
|
@@ -212,6 +218,8 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
dicPeeridAndUid = new Dictionary<string, uint>();
|
|
|
|
|
|
|
|
|
+ AgoraVideoAudioManager.Instance.listCustomPeer.Clear();
|
|
|
+ AgoraVideoAudioManager.Instance.listCustomPeer = new List<CustomPeer>();
|
|
|
}
|
|
|
|
|
|
public void VuforiaLeaveChannel()
|
|
@@ -239,8 +247,25 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
|
|
|
public void RemAtPeeridUid(string peerid)
|
|
|
{
|
|
|
- Debug.Log(" RemAtPeeridUid " + peerid + " " + uid);
|
|
|
+ if (!dicPeeridAndUid.ContainsKey(peerid))
|
|
|
+ return;
|
|
|
+ Debug.Log(" RemAtPeeridUid " + peerid + " " + dicPeeridAndUid[peerid]);
|
|
|
dicPeeridAndUid.Remove(peerid);
|
|
|
+
|
|
|
+ CloseAgoraMainImage(peerid, false);
|
|
|
+
|
|
|
+ for (int i = 0; i < listCustomPeer.Count; i++)
|
|
|
+ {
|
|
|
+ if (listCustomPeer[i].peerId == peerid)
|
|
|
+ listCustomPeer.RemoveAt(i);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CloseAgoraMainImage(string peerid, bool isOpen)
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -262,7 +287,8 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
if (peerId == CommonMethod.MyPeer.PeerId && !dicPeeridAndUid.ContainsKey(peerId))
|
|
|
return;
|
|
|
Debug.Log(" AddListShowView " + peerId);
|
|
|
-
|
|
|
+
|
|
|
+ mainViewPeerId = peerId;
|
|
|
rawImage.gameObject.SetActive(true);
|
|
|
rawImage.rectTransform.localEulerAngles += new Vector3(0, 180, 180);
|
|
|
|
|
@@ -353,8 +379,138 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ public void UserJoined(uint uid)
|
|
|
+ {
|
|
|
+ if (uid == dicPeeridAndUid.Values.Skip(1).First())
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ public void RemoteVideoStateChanged(uint uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON
|
|
|
+ reason)
|
|
|
+ {
|
|
|
+ Debug.Log("RemoteVideoStateChanged " + uid);
|
|
|
+ if (!dicPeeridAndUid.ContainsValue(uid))
|
|
|
+ return;
|
|
|
+ for (int i = 0; i < listCustomPeer.Count; i++)
|
|
|
+ {
|
|
|
+ if (dicPeeridAndUid[listCustomPeer[i].peerId] == uid)
|
|
|
+ {
|
|
|
+ switch (reason)
|
|
|
+ {
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_INTERNAL:
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION:
|
|
|
+
|
|
|
+
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY:
|
|
|
+
|
|
|
+
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED:
|
|
|
+
|
|
|
+ listCustomPeer[i].isCloseVideo = false;
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED:
|
|
|
+
|
|
|
+ listCustomPeer[i].isCloseVideo = true;
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED:
|
|
|
+
|
|
|
+ listCustomPeer[i].isVideo = false;
|
|
|
+ CloseAgoraMainImage(listCustomPeer[i].peerId, false);
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED:
|
|
|
+
|
|
|
+ listCustomPeer[i].isVideo = true;
|
|
|
+ CloseAgoraMainImage(listCustomPeer[i].peerId, true);
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE:
|
|
|
+
|
|
|
+ listCustomPeer[i].isVideo = false;
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK:
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_AUDIO_FALLBACK_RECOVERY:
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_LOW:
|
|
|
+ break;
|
|
|
+ case REMOTE_VIDEO_STATE_REASON.REMOTE_VIDEO_STATE_REASON_VIDEO_STREAM_TYPE_CHANGE_TO_HIGH:
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void RemoteAudioStateChanged(uint uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason)
|
|
|
+ {
|
|
|
+ Debug.Log(listCustomPeer.Count);
|
|
|
+ Debug.Log("RemoteAudioStateChanged " + uid);
|
|
|
+ if (!dicPeeridAndUid.ContainsValue(uid))
|
|
|
+ return;
|
|
|
+ Debug.Log("RemoteAudioStateChanged " + 1);
|
|
|
+ for (int i = 0; i < listCustomPeer.Count; i++)
|
|
|
+ {
|
|
|
+ Debug.Log(listCustomPeer[i].peerId);
|
|
|
+ if (dicPeeridAndUid[listCustomPeer[i].peerId] == uid)
|
|
|
+ {
|
|
|
+ Debug.Log("RemoteAudioStateChanged " + 2);
|
|
|
+ switch (reason)
|
|
|
+ {
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_INTERNAL:
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_NETWORK_CONGESTION:
|
|
|
+
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_NETWORK_RECOVERY:
|
|
|
+
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_LOCAL_MUTED:
|
|
|
+ listCustomPeer[i].isCloseAudio = true;
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_LOCAL_UNMUTED:
|
|
|
+ listCustomPeer[i].isCloseAudio = false;
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_REMOTE_MUTED:
|
|
|
+ listCustomPeer[i].isAudio = false;
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_REMOTE_UNMUTED:
|
|
|
+ listCustomPeer[i].isAudio = true;
|
|
|
+ break;
|
|
|
+ case REMOTE_AUDIO_STATE_REASON.REMOTE_AUDIO_REASON_REMOTE_OFFLINE:
|
|
|
+ listCustomPeer[i].isAudio = false;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
private void StopPublish()
|
|
|
{
|
|
|
var options = new ChannelMediaOptions();
|
|
@@ -427,7 +583,19 @@ public class AgoraVideoAudioManager : SingletonMono<AgoraVideoAudioManager>
|
|
|
|
|
|
Agora.Rtc.UserInfo userInfo = new Agora.Rtc.UserInfo();
|
|
|
AgoraVideoAudioManager.Instance.RtcEngine.GetUserInfoByUid(uid, ref userInfo);
|
|
|
-
|
|
|
+
|
|
|
+ AgoraVideoAudioManager.Instance.UserJoined(uid);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ internal static void OnRemoteVideoStateChanged(uint uid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON
|
|
|
+ reason)
|
|
|
+ {
|
|
|
+ AgoraVideoAudioManager.Instance.RemoteVideoStateChanged(uid, state, reason);
|
|
|
+ }
|
|
|
+ internal static void OnRemoteAudioStateChanged(uint uid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason)
|
|
|
+ {
|
|
|
+ AgoraVideoAudioManager.Instance.RemoteAudioStateChanged(uid, state, reason);
|
|
|
}
|
|
|
#region -- Video Render UI Logic ---
|
|
|
|
|
@@ -592,6 +760,17 @@ public class AgoraVideoManagerHandler : IRtcEngineEventHandler
|
|
|
AgoraVideoAudioManager.OnLocalUserRegistered(uid, userAccount);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ public override void OnRemoteVideoStateChanged(RtcConnection connection, uint remoteUid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed)
|
|
|
+ {
|
|
|
+ AgoraVideoAudioManager.OnRemoteVideoStateChanged(remoteUid, state, reason);
|
|
|
+ }
|
|
|
+
|
|
|
+ public override void OnRemoteAudioStateChanged(RtcConnection connection, uint remoteUid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed)
|
|
|
+ {
|
|
|
+ AgoraVideoAudioManager.OnRemoteAudioStateChanged(remoteUid, state, reason);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#endregion
|