From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- Client/Assets/Scripts/Apollo/BroadcastManager.cs | 338 +++++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 Client/Assets/Scripts/Apollo/BroadcastManager.cs (limited to 'Client/Assets/Scripts/Apollo/BroadcastManager.cs') diff --git a/Client/Assets/Scripts/Apollo/BroadcastManager.cs b/Client/Assets/Scripts/Apollo/BroadcastManager.cs new file mode 100644 index 00000000..6bf7427b --- /dev/null +++ b/Client/Assets/Scripts/Apollo/BroadcastManager.cs @@ -0,0 +1,338 @@ +#if !DISABLE_PLUGIN + + +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using XUtliPoolLib; + +public class BroadcastManager : MonoBehaviour, IBroardcast +{ + + + private static string m_token = "", m_openId = "", m_appid = ""; + private static QGameKit.LoginPlatform m_platf = QGameKit.LoginPlatform.QQ; + private static GameObject m_gameobject; + private static QGameKit.ShareContent m_shareContent; +#if BROADCAST + private bool isConfigOpen = true; + private static bool enableDanku = false; +#endif + + /// + /// 初始化 + /// + public void ToStart() + { +#if BROADCAST + QGameKit.CaptureType captureType = QGameKit.CaptureType.AudioApolloVoice | QGameKit.CaptureType.VideoCapture; +#if Release || Publish + QGameKit.Setup("1105309683", "203090", captureType, UserAccountDelegate, QGameKit.Environment.Release); +#else + QGameKit.Setup("1105309683", "203090", captureType, UserAccountDelegate, QGameKit.Environment.Release); +#endif + if (!enableDanku) + { + QGameKit.SetDanmakuEnabled(true); + enableDanku = true; + } + QGameKit.SetLogDelegate(LogDelegate); + QGameKit.SetCommentReceiveDelegate(CommentReceiveDelegate); + QGameKit.SetLiveStatusDelegate(LiveStatusChangedDelegate); + QGameKit.SetShareDelegate(ShareDelegate); + QGameKit.SetErrorCodeDelegate(ErrorCodeListenerDelegate); +#endif + } + + + void OnDestroy() + { + TearDown(); + } + + + /// + /// qgamekit很多回调都是在多线程里实现的 + /// 不能直接在回调中调用unity的API + /// + private void Update() + { + if (m_gameobject != null && m_shareContent != null) + { + DoSahre(); + m_shareContent = null; + } + } + + + public static QGameKit.UserAccount UserAccountDelegate() + { + QGameKit.UserAccount account = new QGameKit.UserAccount(); + account.platform = m_platf; // QGameKit.LoginPlatform.WeChat + account.appId = m_appid; // ⼿手Q或微信开放平台申请登录能⼒力时分配的 AppID + account.id = m_openId; // 请赋值为⼿手Q或微信登录后获得的 OpenID + account.token = m_token; // 请赋值为⼿手Q或微信登录后获得的AccessToken + // Debug.Log("UserAccountDelegate platf: " + m_platf + " openid: " + m_openId + " token: " + m_token); + return account; // 将⽤用户信息返回给 SDK + } + + + public bool IsBroadState() + { +#if BROADCAST + return true && isConfigOpen; +#else + return false; +#endif + } + + public bool ShowCamera(bool show) + { + Debug.Log("showcamera:" + show); +#if BROADCAST + if (QGameKit.IsSupportCamera() && isConfigOpen) + { + if (show) + { + return QGameKit.ShowCamera(); + } + else + { + QGameKit.HideCamera(); + return true; + } + } + else + { + Hotfix.LuaShowSystemTip("系统版本太低,不支持开启摄像头"); + return false; + } +#else + return false; +#endif + } + + public void SetAccount(int platf, string openid, string token) + { +#if BROADCAST + m_gameobject = gameObject; + int open = PlayerPrefs.GetInt("BroadcastOpen"); + isConfigOpen = open == 1; + if (isConfigOpen) + { + m_openId = openid; + m_token = token; + if (platf == 3) + { + m_platf = QGameKit.LoginPlatform.QQ; + m_appid = "1105309683"; + } + else if (platf == 4) + { + m_platf = QGameKit.LoginPlatform.WeChat; + m_appid = "wxfdab5af74990787a"; + } + else + { + m_platf = QGameKit.LoginPlatform.Guest; + m_appid = "1105309683"; + } + ToStart(); + } +#endif + } + + + /// + /// 反初始化 + /// + public void TearDown() + { +#if BROADCAST + if (isConfigOpen && !string.IsNullOrEmpty(m_openId)) + { + Debug.Log("tear down!"); + QGameKit.TearDown(); + } +#endif + } + + /// + /// 开始直播 + /// + public void StartLiveBroadcast(string title, string desc) + { +#if BROADCAST + if (isConfigOpen) + { + Debug.Log("Start live broadcast"); + QGameKit.LiveStatus code = (QGameKit.LiveStatus)QGameKit.GetErrorCode(); + if (code == QGameKit.LiveStatus.Error) + { + QGameKit.Reset(); + } + QGameKit.StartLiveBroadcast(title, desc); + } +#endif + } + + + /// + /// 停止直播 + /// + public void StopBroadcast() + { +#if BROADCAST + if (isConfigOpen) + { + Debug.Log("stop live broadcast!"); + QGameKit.StopLiveBroadcast(); + } +#endif + } + + /// + /// 获取当前状态 + /// + public int GetState() + { +#if BROADCAST + if (isConfigOpen) + { + QGameKit.LiveStatus code = (QGameKit.LiveStatus)QGameKit.GetErrorCode(); + Debug.Log("GetState " + code); + return (int)code; + } + else return 0; +#else + return 0; +#endif + } + + + /// + /// 进入直播大厅 + /// + public void EnterHall() + { +#if BROADCAST + if (isConfigOpen) + { + Debug.Log("Hall"); + QGameKit.EnterLiveHall(); + } +#endif + } + + // 游戏监听并处理状态变化 + public static void LiveStatusChangedDelegate(QGameKit.LiveStatus newState) + { + // Debug.Log("live status: " + newState); + if (m_uiUtility == null || m_uiUtility.Deprecated) + m_uiUtility = XInterfaceMgr.singleton.GetInterface(XCommon.singleton.XHash("IUiUtility")); + if (newState == QGameKit.LiveStatus.LiveStarting || newState == QGameKit.LiveStatus.LiveStarted) + { + m_uiUtility.StartBroadcast(true); + ApolloManager.sington.Capture(true); + } + else if (newState == QGameKit.LiveStatus.LiveStopping || newState == QGameKit.LiveStatus.LiveStopped) + { + m_uiUtility.StartBroadcast(false); + ApolloManager.sington.Capture(false); + } + } + + public static void ErrorCodeListenerDelegate(int errorCode, string errorMessage) + { + // Debug.Log("ErrorCodeListenerDelegate...errorCode=" + errorCode + ", errorMessage=" + errorMessage); + } + + public static void LogDelegate(string log) + { + Debug.Log(log); + } + + static IUiUtility m_uiUtility; + public static void CommentReceiveDelegate(List comments) + { + //if (m_uiUtility == null || m_uiUtility.Deprecated) + // m_uiUtility = XInterfaceMgr.singleton.GetInterface(XCommon.singleton.XHash("IUiUtility")); + //for (int i = 0; i < comments.Count; i++) + //{ + // // Debug.Log("comment index " + i); + // QGameKit.LiveComment comment = comments[i]; + // if (m_uiUtility != null) m_uiUtility.PushBarrage(UTF8String(comment.nick), UTF8String(comment.content)); + + //} + } + + + public static string UTF8String(string input) + { + UTF8Encoding utf8 = new UTF8Encoding(); + return utf8.GetString(utf8.GetBytes(input)); + } + + public static void ShareDelegate(QGameKit.ShareContent shareContent) + { + //Debug.Log("ShareContent title " + shareContent.title); + m_shareContent = shareContent; + } + + + private void DoSahre() + { + XPlatform platf = m_gameobject.GetComponent(); + Dictionary jsondata = new Dictionary(); + jsondata["scene"] = "Session"; + jsondata["targetUrl"] = m_shareContent.targetUrl; + jsondata["imageUrl"] = m_shareContent.imageUrl; + jsondata["title"] = m_shareContent.title; + jsondata["description"] = m_shareContent.description; + jsondata["summary"] = ""; + string json = MiniJSON.Json.Serialize(jsondata); + platf.SendGameExData("share_send_to_struct_qq", json); + } + + +#if UNITY_EDITOR + void OnGUI() + { +#if BROADCAST_TEST + if (GUI.Button(new Rect(20, 20, 140, 60), "Start")) + { + StartLiveBroadcast("龙之谷dragonnest", "I just want to test for broadcast..."); + } + if (GUI.Button(new Rect(20, 100, 140, 60), "Stop")) + { + StopBroadcast(); + } + if (GUI.Button(new Rect(20, 180, 140, 60), "Reset")) + { + Debug.Log("reset live broadcast!"); + QGameKit.Reset(); + } + if (GUI.Button(new Rect(20, 260, 140, 60), "Hall")) + { + EnterHall(); + } + if (GUI.Button(new Rect(20, 340, 140, 60), "HallInGame")) + { + Debug.Log("HallInGame"); + QGameKit.EnterLiveHallInGame(); + } + if (GUI.Button(new Rect(20, 420, 140, 60), "State")) + { + GetState(); + } + if (GUI.Button(new Rect(20, 500, 140, 60), "TearDown")) + { + TearDown(); + } +#endif + } +#endif + +} + +#endif -- cgit v1.1-26-g67d0