using BeinLab.Util; using ShadowStudio.Mgr; using ShadowStudio.UI; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using XRTool.Util; using XRTool.WorldUI; using static BoundingBox; namespace ShadowStudio.Model { /// /// 用户的视频通话窗口 /// public class PlayerViewComponent : UIComponent { public static string viewId = "ArtId_PlayerView"; public static Dictionary viewDic = new Dictionary(); private string peerid; private bool isInit = false; private Peer _peer; public static event Action ViewChange; /// /// 创建一个视频通话窗口 /// 即时同步 /// /// 点击的用户的id /// public static void CreateViewComponent(string peerid, Transform target, bool isDel = false) { if (viewDic.ContainsKey(peerid)) { return; } GoodsInfo data = new GoodsInfo(); var info = ArtInfoMgr.Instance.GetArtInfo(viewId); data.art_id = viewId; data.id = UnityEngine.Random.Range(100000, 999999999); if (target) { data.goods_info = UnityUtil.TransferToString(target, 2); } else { data.goods_info = UnityUtil.ArtTransferInfo(info); } data.goods_name = peerid; data.rid = int.Parse(UserInfoMgr.Instance.userConfig.Id); data.scene_id = -1; ///创建本地窗口 ArtInfoMgr.Instance.SyncGoods(data); /// ///ArtInfoMgr.Instance.SendTransfer(data); if (target && isDel) { Destroy(target.gameObject); } } private bool checkRtc() { if (_peer != null && StudioRtc.Instance != null && StudioRtc.Instance.customPeerList != null) { cPeer = (CustomPeer)StudioRtc.Instance.customPeerList.getPeerName(_peer.PeerId); if (cPeer != null) { // Debug.Log("cPeer Not NULL" + _peer.PeerId); cPeer.onChangeInfo -= OnChangeInfo; cPeer.onChangeInfo += OnChangeInfo; if (!_peer.IsSlef) { if (cPeer.isAudio && cPeer.cIdA != "") { openAudioEffect(); } else { closeAudioEffect(); } if (cPeer.isVideo && cPeer.cIdV != "") { openVideoEffect(); } else { closeVideoEffect(); } } } if (cPeer != null) { return true; } } // Debug.Log("cPeer is NULL" + _peer.PeerId); return false; } void StateUpdata() { if (cPeer == null) return; if (cPeer.isVideo) { if (cPeer.isCloseVideo) { openVideo.SetActive(false); closeVideo.SetActive(false); pauseVideo.SetActive(true); VideoEmpty.gameObject.SetActive(true); } else { openVideo.SetActive(false); closeVideo.SetActive(true); pauseVideo.SetActive(false); VideoEmpty.gameObject.SetActive(false); } } else { openVideo.SetActive(true); closeVideo.SetActive(false); pauseVideo.SetActive(false); VideoEmpty.gameObject.SetActive(true); } if (cPeer.isAudio) { if (cPeer.isCloseAudio) { openAudio.SetActive(false); closeAudio.SetActive(false); pauseAudio.SetActive(true); } else { openAudio.SetActive(false); closeAudio.SetActive(true); pauseAudio.SetActive(false); } } else { openAudio.SetActive(true); closeAudio.SetActive(false); pauseAudio.SetActive(false); } } public float volume = 0.2f; public Text textMic; public GameObject pauseCerAudio; public GameObject pauseCerVideo; public GameObject pauseAudio; public GameObject pauseVideo; public GameObject openVideo; public GameObject closeVideo; public MeshRenderer videoBG; public Text nametext; public XRIcon touxiang; public GameObject openAudio; public GameObject closeAudio; public GameObject VolumnGo; public RawImage agoraShowVideo; private void closeVideoEffect() { if(openVideo) { openVideo.SetActive(true); closeVideo.SetActive(false); VideoEmpty.gameObject.SetActive(true); if (cPeer != null) { pauseCerVideo.SetActive(true); pauseVideo.SetActive(false); } if (peerid == CommonMethod.MyPeer.PeerId) AgoraVideoAudioManager.Instance.EnableLocalVideo(false); } } private void openVideoEffect() { openVideo.SetActive(false); closeVideo.SetActive(true); if (cPeer != null) { ShowVideo.material.mainTexture = cPeer.tex; if (cPeer.isCloseVideo) { pauseCerVideo.SetActive(false); pauseVideo.SetActive(true); } } VideoEmpty.gameObject.SetActive(false); if (peerid == CommonMethod.MyPeer.PeerId) AgoraVideoAudioManager.Instance.EnableLocalVideo(true); } private void closeAudioEffect() { pauseCerAudio.SetActive(true); pauseAudio.SetActive(false); openAudio.SetActive(true); closeAudio.SetActive(false); VolumnGo.SetActive(false); if (peerid == CommonMethod.MyPeer.PeerId) AgoraVideoAudioManager.Instance.EnableLoacalAudio(false); //else // AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, false); } private void openAudioEffect() { openAudio.SetActive(false); closeAudio.SetActive(true); VolumnGo.SetActive(true); if (cPeer != null) { volume = cPeer.volumn; if (cPeer.isCloseAudio) { pauseCerAudio.SetActive(false); pauseAudio.SetActive(true); } } textMic.text = volume.ToString("F2"); if (peerid == CommonMethod.MyPeer.PeerId) AgoraVideoAudioManager.Instance.EnableLoacalAudio(true); //else // AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, true); } private void OnChangeInfo(string type, string id) { if (type == "video") { if (cPeer.isVideo) { openVideoEffect(); if (cPeer.isCloseVideo) { StudioRtc.Instance.closeRev(cPeer.cIdV); } } else { closeVideoEffect(); } } else { if (cPeer.isAudio) { openAudioEffect(); if (cPeer.isCloseAudio) { StudioRtc.Instance.closeRev(cPeer.cIdA); } } else { closeAudioEffect(); } } } private void Update() { if (checkRtc() && !isRtcInit) { ShowVideo.material.mainTexture = cPeer.tex; isRtcInit = true; } StateUpdata(); } bool isRtcInit = false; CustomPeer cPeer; public void setVideo(string peerid) { _peer = UserItemList.Instance.GetPeer(peerid); nametext.text = _peer.NickName; if (peerid == CommonMethod.MyPeer.PeerId) { if (StudioRtc.Instance.me.cIdA != "") { openAudioEffect(); } else { closeAudioEffect(); } if (StudioRtc.Instance.me.cIdV != "") { openVideoEffect(); } else { closeVideoEffect(); } ShowVideo.material.mainTexture = StudioRtc.Instance.rt; isRtcInit = true; return; } else { Debug.Log(" Peerid != MyPeer" + peerid); } if (checkRtc()) { ShowVideo.material.mainTexture = cPeer.tex; } /* if (peerid == CommonMethod.MyPeer.PeerId) { ShowVideo.material.mainTexture = ConsoleDlg.Instance.vufora_camera.GetComponent().targetTexture; return; } peer = UserItemList.Instance.GetPeer(peerid); if (peer != null) { ShowVideo.material.mainTexture = peer.CustomPeer.tex; } else { UnityLog.Instance.LogError("Cant Find peerid" + peerid); } */ } public void addMic() { volume += 0.1f; if (_peer.IsSlef) { StudioRtc.Instance.setVolume(volume); } else { if (cPeer != null && cPeer.cIdA != "") { StudioRtc.Instance.setVolume(cPeer.cIdA, volume); } } textMic.text = volume.ToString("F2"); } public void redMic() { volume -= 0.1f; if (_peer.IsSlef) { StudioRtc.Instance.setVolume(volume); } else { if (cPeer != null && cPeer.cIdA != "") { StudioRtc.Instance.setVolume(cPeer.cIdA, volume); } } textMic.text = volume.ToString("F2"); } public void closeMic() { if (_peer.IsSlef) { if (StudioRtc.Instance.me.cIdA != "") { WSHandler.Rtc.closeProducer(StudioRtc.Instance.me.cIdA); StudioRtc.Instance.sendMic(false); closeAudioEffect(); StudioRtc.Instance.me.cIdA = ""; } } else { if (cPeer != null && cPeer.isAudio && cPeer.cIdA != "" && !cPeer.isCloseAudio) { pauseCerAudio.SetActive(false); pauseAudio.SetActive(true); StudioRtc.Instance.closeRev(cPeer.cIdA); cPeer.isCloseAudio = true; // cPeer.setInfo("audio", cPeer.cIdA, false); //AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, true); } AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(cPeer.name, false); } } public void openMic() { if (_peer.IsSlef) { StudioRtc.Instance.sendMic(true); volume = StudioRtc.Instance.me.volumn; openAudioEffect(); } else { if (cPeer != null && cPeer.isAudio && cPeer.cIdA != "" && cPeer.isCloseAudio) { pauseCerAudio.SetActive(true); pauseAudio.SetActive(false); StudioRtc.Instance.startRev(cPeer.cIdA); cPeer.isCloseAudio = false; // cPeer.setInfo("audio", cPeer.cIdA,true); // AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, false); } AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(cPeer.name, true); } } public void OpenVideo() { agoraShowVideo.gameObject.SetActive(true); if (_peer.IsSlef) { StudioRtc.Instance.startCamera(); // videoBG.gameObject.SetActive(true); //videoBG.material.mainTexture = StudioRtc.Instance.rt; StudioRtc.Instance.sendVideo(true); openVideoEffect(); } else { if (cPeer != null && cPeer.isVideo && cPeer.cIdV != "" && cPeer.isCloseVideo) { pauseCerVideo.SetActive(true); pauseVideo.SetActive(false); StudioRtc.Instance.startRev(cPeer.cIdV); cPeer.isCloseVideo = false; // cPeer.setInfo("audio", cPeer.cIdA,true); } AgoraVideoAudioManager.Instance.MuteRemoteVideoStream(cPeer.name, true); } } public void CloseVideo() { agoraShowVideo.gameObject.SetActive(false); if (_peer.IsSlef) { if (StudioRtc.Instance.me.cIdV != "") { WSHandler.Rtc.closeProducer(StudioRtc.Instance.me.cIdV); StudioRtc.Instance.stopCamera(); StudioRtc.Instance.sendVideo(false); closeVideoEffect(); StudioRtc.Instance.me.cIdV = ""; } } else { if (cPeer != null && cPeer.isVideo && cPeer.cIdV != "" && !cPeer.isCloseVideo) { pauseCerVideo.SetActive(false); pauseVideo.SetActive(true); StudioRtc.Instance.closeRev(cPeer.cIdV); cPeer.isCloseVideo = true; // cPeer.setInfo("audio", cPeer.cIdA,true); } AgoraVideoAudioManager.Instance.MuteRemoteVideoStream(cPeer.name, false); } } private Button closeBtn; public Button CloseBtn { get { if (!closeBtn) { closeBtn = UnityUtil.GetBreadthChild