123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- using SC.XR.Unity;
- using System.Collections;
- using System.Collections.Generic;
- using System.Linq;
- using UnityEngine;
- using UnityEngine.UI;
- public class VideoAudioData : SingletonMono<VideoAudioData>
- {
- public Dictionary<string, uint> dicPeeridAndUid;
- public List<CustomPeer> listCustomPeer;
- public string mainViewPeerId;
- private void Start()
- {
- dicPeeridAndUid = new Dictionary<string, uint>();
- listCustomPeer = new List<CustomPeer>();
- mainViewPeerId = "";
- RTCManager.Instance.OnRemoteAudioStateChanged += RemoteAudioStateChanged;
- RTCManager.Instance.OnRemoteVideoStateChanged += RemoteVideoStateChanged;
- }
- public void InitData()
- {
- dicPeeridAndUid.Clear();
- listCustomPeer.Clear();
- dicPeeridAndUid = new Dictionary<string, uint>();
- listCustomPeer = new List<CustomPeer>();
- mainViewPeerId = "";
- }
- public void AddPeeridUid(string peerid, uint uid)
- {
- if (dicPeeridAndUid.ContainsKey(peerid))
- return;
- dicPeeridAndUid.Add(peerid, uid);
- }
- public void RemAtPeeridUid(string peerid)
- {
- if (!dicPeeridAndUid.ContainsKey(peerid))
- return;
- dicPeeridAndUid.Remove(peerid);
- for (int i = 0; i < listCustomPeer.Count; i++)
- {
- if(listCustomPeer[i].peerId == peerid)
- {
- listCustomPeer.RemoveAt(i);
- break;
- }
- }
- }
- public void JoinChannel()
- {
- RTCManager.Instance.JoinChannel();
- RTCManager.Instance.MuteLocalAudioStream(CustomInfo.isSendAudio);
- RTCManager.Instance.MuteLocalVideoStream(CustomInfo.isSendVideo);
- }
- public void LeaveChannel()
- {
- RTCManager.Instance.LeaveChannel();
- InitData();
- RoomMain.Instance.agoraRawImage.gameObject.SetActive(false);
- RoomMain.Instance.agoraRawImage.texture = null;
- }
- public void AddListShowView(string peerId, RawImage rawImage)
- {
- if (!dicPeeridAndUid.ContainsKey(peerId))
- return;
- Debug.Log(" AddListShowView " + peerId);
- if (rawImage.name == "AgoraRawImage")
- mainViewPeerId = peerId;
- rawImage.gameObject.SetActive(true);
- rawImage.rectTransform.localEulerAngles = new Vector3(0, 180, 180);
- RTCManager.Instance.ShowViewRawImage(dicPeeridAndUid[peerId].ToString(), rawImage);
- }
- public void ShowOneView(RawImage rawImage)
- {
- if (dicPeeridAndUid.Count < 2)
- return;
-
- rawImage.rectTransform.localEulerAngles = new Vector3(0, 180, 180);
- RTCManager.Instance.ShowViewRawImage(dicPeeridAndUid.Values.Skip(1).First().ToString(), rawImage);
- }
- public void UserJoined(uint uid)
- {
- if (uid == dicPeeridAndUid.Values.Skip(1).First())
- {
-
- RoomMain.Instance.agoraRawImage.rectTransform.localEulerAngles = new Vector3(0, 180, 180);
- RTCManager.Instance.ShowViewRawImage(dicPeeridAndUid.Values.Skip(1).First().ToString(), RoomMain.Instance.agoraRawImage);
- foreach (var item in dicPeeridAndUid)
- {
- if (item.Value == uid)
- mainViewPeerId = item.Key;
- }
- }
- }
- public void MuteLocalAudioStream(bool isAudio)
- {
- RTCManager.Instance.MuteLocalAudioStream(isAudio);
- }
- public void MuteLocalVideoStream(bool isVideo)
- {
- RTCManager.Instance.MuteLocalVideoStream(isVideo);
- }
- public void MuteRemoteAudioStream(string peerid,bool isAudio)
- {
- if (!dicPeeridAndUid.ContainsKey(peerid))
- return;
- RTCManager.Instance.MuteRemoteAudioStream(dicPeeridAndUid[peerid].ToString(), isAudio);
- }
- public void MuteRemoteVideoStream(string peerid,bool isVideo)
- {
- if (!dicPeeridAndUid.ContainsKey(peerid))
- return;
- RTCManager.Instance.MuteRemoteVideoStream(dicPeeridAndUid[peerid].ToString(), isVideo);
- }
- public void RemoteAudioStateChanged(string uid, REMOTE_AUDIO_STATE_RTC state, REMOTE_AUIDO_STATE_REASON_RTC reason)
- {
- if (!dicPeeridAndUid.ContainsValue(StringToUint(uid)))
- return;
- for (int i = 0; i < listCustomPeer.Count; i++)
- {
- if (dicPeeridAndUid[listCustomPeer[i].peerId] == StringToUint(uid))
- {
- switch (reason)
- {
-
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_NETWORK_CONGESTION:
-
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_NETWORK_RECOVERY:
-
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_LOCAL_MUTED:
- listCustomPeer[i].isCloseAudio = true;
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_LOCAL_UNMUTED:
- listCustomPeer[i].isCloseAudio = false;
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_REMOTE_MUTED:
- listCustomPeer[i].isAudio = false;
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_REMOTE_UNMUTED:
- listCustomPeer[i].isAudio = true;
- break;
- case REMOTE_AUIDO_STATE_REASON_RTC.REMOTE_AUDIO_REASON_REMOTE_OFFLINE:
- listCustomPeer[i].isAudio = false;
- break;
- default:
- break;
- }
- break;
- }
- }
- }
- public void RemoteVideoStateChanged(string uid, REMOTE_VIDEO_STATE_RTC state , REMOTE_VIDEO_STATE_REASON_RTC reason)
- {
- if (!dicPeeridAndUid.ContainsValue(StringToUint(uid)))
- return;
- for (int i = 0; i < listCustomPeer.Count; i++)
- {
- if (dicPeeridAndUid[listCustomPeer[i].peerId] == StringToUint(uid))
- {
- switch (state)
- {
- case REMOTE_VIDEO_STATE_RTC.REMOTE_VIDEO_STATE_STOPPED:
- break;
- case REMOTE_VIDEO_STATE_RTC.REMOTE_VIDEO_STATE_STARTING:
- listCustomPeer[i].isVideo = true;
- CloseAgoraMainImage(listCustomPeer[i].peerId, true);
- break;
- case REMOTE_VIDEO_STATE_RTC.REMOTE_VIDEO_STATE_DECODING:
- listCustomPeer[i].isCloseVideo = false;
- CloseAgoraMainImage(listCustomPeer[i].peerId, true);
- break;
- case REMOTE_VIDEO_STATE_RTC.REMOTE_VIDEO_STATE_FROZEN:
- break;
- case REMOTE_VIDEO_STATE_RTC.REMOTE_VIDEO_STATE_FAILED:
- break;
- default:
- break;
- }
- switch (reason)
- {
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_NETWORK_CONGESTION:
-
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_NETWORK_RECOVERY:
-
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_LOCAL_MUTED:
- listCustomPeer[i].isCloseVideo = true;
- CloseAgoraMainImage(listCustomPeer[i].peerId, false);
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_LOCAL_UNMUTED:
- listCustomPeer[i].isCloseVideo = false;
- CloseAgoraMainImage(listCustomPeer[i].peerId, true);
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_REMOTE_MUTED:
- listCustomPeer[i].isVideo = false;
- CloseAgoraMainImage(listCustomPeer[i].peerId, false);
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_REMOTE_UNMUTED:
- listCustomPeer[i].isVideo = true;
- CloseAgoraMainImage(listCustomPeer[i].peerId, true);
- break;
- case REMOTE_VIDEO_STATE_REASON_RTC.REMOTE_VIDEO_STATE_REASON_REMOTE_OFFLINE:
- listCustomPeer[i].isVideo = false;
- break;
- }
- break;
- }
- }
- }
- private void CloseAgoraMainImage(string peerid, bool isOpen)
- {
- if (peerid == mainViewPeerId)
- RoomMain.Instance.agoraRawImage.gameObject.SetActive(isOpen);
- }
- private uint StringToUint(string value)
- {
-
- return (uint)int.Parse(value);
-
- }
- }
|