From c8c33200e43f05136eca9fc8ff4942f8def31cc6 Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期三, 18 八月 2021 10:45:40 +0800 Subject: [PATCH] 2021-08-18 1.完善Android对接LinphoneSDK 2.完善SIP相关接口对接 --- HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs | 487 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 446 insertions(+), 41 deletions(-) diff --git a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs index bd697ae..347ddd6 100644 --- a/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs +++ b/HDL_ON/DAL/ThirdPartySdk/HDLLinphone.cs @@ -1,8 +1,17 @@ 锘縰sing System; +using System.Collections.Generic; +using System.Threading; + +using HDL_ON; +using HDL_ON.DAL.Server; +using HDL_ON.Entity; #if __Android__ +using Android.Content; using Android.Graphics; using Android.Widget; using Com.Hdl.Hdllinphonesdk; +#else +using Foundation; #endif namespace Shared @@ -32,70 +41,466 @@ } } - - public void InitLinphone() + #region 鈻� -- 鍒濆鍖朣DK_______________________________ + /// <summary> + /// 鍒濆鍖朣DK + /// </summary> + void InitLinphone() { + //闃叉閲嶅鍒濆鍖� + if (isInitSdk) return; + + isInitSdk = true; + #if __IOS__ + Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().InitalLinPhone(); #else - - Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.InitLinphone(Application.Activity); + Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.InitLinphone(Application.Activity); setOnHDLLinphoneCallListener(); - Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.SetAccountAndLogin("3333", "85521566", "116.62.26.215:5060"); - #endif } -#if __Android__ + /// <summary> + /// 褰撳墠鐧诲綍鐨凷ip璐﹀彿 + /// </summary> + HDLSipInfo currentHDLSipInfo; + /// <summary> + /// 璁剧疆sip鐧诲綍璐﹀彿 + /// </summary> + /// <param name="mHDLSipInfo"></param> + public void SetAccountAndLogin(HDLSipInfo mHDLSipInfo) { + this.currentHDLSipInfo = mHDLSipInfo; + if (mHDLSipInfo == null) return; + +#if __IOS__ + //Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login("3333", "85521566", "116.62.26.215:5060"); + Shared.IOS.HDLLinphoneSDK.HDLLinPhoneSDK.Instance().Login(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm); +#else + Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.SetAccountAndLogin(mHDLSipInfo.sipAccount, mHDLSipInfo.sipPasswd, mHDLSipInfo.realm); + //Com.Hdl.Hdllinphonesdk.Core.EasyLinphone.SetAccountAndLogin("61723164995710", "8ec02ce0", "47.94.42.230:25060"); +#endif - class HDLLinphoneCallListener : Java.Lang.Object, Com.Hdl.Hdllinphonesdk.Callback.IOnHDLLinphoneCallListener + } + #endregion + + #region 鈻� -- 鍔ㄤ綔鍥炶皟鍜屽師鐢熶氦浜掞紝鎻愪氦璁板綍鍒颁簯绔痏______________________________ + /// <summary> + /// 鍙瀵硅璁惧鍙傛暟 + /// </summary> + public HDLCallVideoInfo mHDLCallVideoInfo; + + /// <summary> + /// 鍒濆鍖栧懠鍙弬鏁� + /// </summary> + /// <param name="mHDLCallVideoInfo"></param> + /// <param name="mInterphoneType"></param> + public void InitCallInfo(HDLCallVideoInfo mHDLCallVideoInfo) + { + this.mHDLCallVideoInfo = mHDLCallVideoInfo; + } + + /// <summary> + /// 鍒ゆ柇callId鏄惁涓虹┖ + /// </summary> + /// <returns></returns> + bool CheckmHDLCallVideoInfoIsNullOrEmpty() + { + //return false; + return (mHDLCallVideoInfo == null || string.IsNullOrEmpty(mHDLCallVideoInfo.CallId)); + } + + /// <summary> + /// 鎴浘鎴愬姛 + /// </summary> + public void ScreenshotSuccessfulAction(byte[] dataBytes) + { + //Utlis.WriteLine("ScreenshotSuccessfulAction"); + + if (CheckmHDLCallVideoInfoIsNullOrEmpty()) return; + + new Thread(() => + { + //var imageName = Guid.NewGuid().ToString(); + Dictionary<string, object> dic = new Dictionary<string, object>(); + dic.Add("callId", mHDLCallVideoInfo.CallId); + dic.Add("images", dataBytes); +#if __IOS__ + dic.Add("imagesName", "_IOS.jpg"); +#else + dic.Add("imagesName", "_Android.jpg"); +#endif + + var requestJson = HttpUtil.GetSignRequestJson(dic); + var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_FL_Screenshot, requestJson); + if (revertObj.Code == StateCode.SUCCESS) { - //showToast - void showToast(string text) + //Utlis.WriteLine("POST 鎴浘涓婁紶鎴愬姛"); + } + else + { + Utlis.WriteLine("POST 鎴浘涓婁紶澶辫触 code: " + revertObj.Code); + } + + }) + { IsBackground = false }.Start(); + + } + + DateTime UnlockDateTime = DateTime.MinValue; + #endregion + + #region 鈻� -- 鏂版帴鍚拰寮�閿佹帴鍙______________________________ + /// <summary> + /// 寮�閿� + /// </summary> + public void HDLUnlockAction() + { + //Utlis.WriteLine("UnlockAction"); + + if (mHDLCallVideoInfo == null) return; + + new Thread(() => + { + Dictionary<string, object> dic = new Dictionary<string, object>(); + dic.Add("deviceId", mHDLCallVideoInfo.DeviceId);//璁惧id + dic.Add("callId", mHDLCallVideoInfo.CallId); + dic.Add("interphoneType", mHDLCallVideoInfo.InterphoneType); + dic.Add("homeId", mHDLCallVideoInfo.HomeId); + var requestJson = HttpUtil.GetSignRequestJson(dic); + var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_OpenDoorbell, requestJson); + + Application.RunOnMainThread(() => + { + +#if __IOS__ + if (revertObj.Code == StateCode.SUCCESS) { - - Toast.MakeText(Application.Activity, text, ToastLength.Short).Show(); + //鍜屽師鐢熺洃鎺х晫闈氦浜掋�佸彂閫佸紑閿佹垚鍔熼�氱煡 + NSNotificationCenter.DefaultCenter.PostNotificationName("lcCallDelegateOpenDoorSuccess", null); } - - public void OnAnswerAction() + else { - showToast("鎺ュ惉"); + Utlis.WriteLine("POST 寮�閿佸け璐� code: " + revertObj.Code); } - - public void OnHangUpAction(int callDuration) - { - - showToast("鎸傛柇 閫氳瘽鏃堕暱锛�" + callDuration); - } - - public void OnRejectCallAction() - { - showToast("鎷掓帴"); - } - - public void OnScreenshotSuccessfulAction(Bitmap p0) - { - showToast("鎴浘"); - } - - public void OnUnlockAction() +#else + if (revertObj.Code == StateCode.SUCCESS) { HDLLinphoneKit.Instance.OnOpenSuccess(); } - - } - - void setOnHDLLinphoneCallListener() - { - HDLLinphoneKit.Instance.OnHDLLinphoneCallListener = new HDLLinphoneCallListener(); - - } + else + { + Utlis.WriteLine("POST 寮�閿佸け璐� code: " + revertObj.Code); + HDLLinphoneKit.Instance.OnOpenError(revertObj.message); + } #endif + }); + + + }) + { IsBackground = false }.Start(); + } + + /// <summary> + /// 鏇存敼閫氳瘽鐘舵�� + /// </summary> + public void HDLUpdateCallStatus(CallStatusType callStatusType, InterphoneType interphoneType, int callDuration = 0) + { + + if (CheckmHDLCallVideoInfoIsNullOrEmpty()) return; + + new Thread(() => + { + Dictionary<string, object> dic = new Dictionary<string, object>(); + dic.Add("callId", mHDLCallVideoInfo.CallId);//鍛煎彨id + dic.Add("callStatus", callStatusType.ToString());//鍙敤鍊�:MISSED,RECEIVED,REJECT + dic.Add("interphoneTypeEnum", interphoneType.ToString());//鍙敤鍊�:FLVI,IMOUVISIAL + if (callStatusType == CallStatusType.RECEIVED && callDuration > 0) + { + dic.Add("callDuration", callDuration);//閫氳瘽鏃堕暱锛堢锛� + } + + var requestJson = HttpUtil.GetSignRequestJson(dic); + var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_UpdateCallStatus, requestJson); + if (revertObj.Code == StateCode.SUCCESS) + { + + } + else + { + Utlis.WriteLine("POST 鏇存柊鐘舵�佸け璐� code: " + revertObj.Code); + } + + }) + { IsBackground = false }.Start(); + + } + #endregion + + #region 鈻� -- 鑾峰彇sip璐﹀彿_______________________________ + /// <summary> + /// 鏄惁鍒濆鍖栦簡SDK + /// </summary> + public bool isInitSdk; + /// <summary> + /// 鑾峰彇褰撳墠浣忓畢鐨凷IP璐﹀彿 + /// </summary> + public HDLSipInfo GetHDLSipInfo(string homeId) + { + Dictionary<string, object> d = new Dictionary<string, object>(); + d.Add("homeId", homeId); + + var requestJson = HttpUtil.GetSignRequestJson(d); + var resultObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_GetSipAccount, requestJson); + + if (resultObj.Code == StateCode.SUCCESS) + { + if (string.IsNullOrEmpty(resultObj.Data.ToString())) + { + //鎺х殑璇濅唬琛ㄥ綋鍓嶄綇瀹呬笉鏀寔 + return null; + } + else + { + var info = Newtonsoft.Json.JsonConvert.DeserializeObject<HDLSipInfo>(resultObj.Data.ToString()); + return info; + } + } + else + { + return null; + } + + } + + /// <summary> + /// 鑾峰彇褰撳墠浣忓畢Sip璐﹀彿淇℃伅骞跺垵濮嬪寲LinphoneSDK鍜岀櫥褰� + /// </summary> + /// <param name="homeId"></param> + public void getHDLSipInfoAndInitSDK(string homeId) + { + try + { + //鍏堟竻绌哄懠鍙拰鐩戣璁惧淇℃伅 + InitCallInfo(null); + HDLSipInfo mHDLSipInfo = GetHDLSipInfo(homeId); + if (mHDLSipInfo != null) + { + InitLinphone(); + mHDLSipInfo.homeId = homeId; + SetAccountAndLogin(mHDLSipInfo); + //Application.RunOnMainThread(() => + //{ + // InitLinphone(); + // SetAccountAndLogin(mHDLSipInfo); + //}); + } + } + catch + { + + } + } + #endregion + + #region 鈻� -- 璺宠浆鐩戞帶椤甸潰_______________________________ + /// <summary> + /// 璺宠浆鐩戞帶椤甸潰 + /// </summary> + /// <param name="mESVideoInfo"></param> + public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo) + { + HDLCallVideoInfo mHDLCallVideoInfo = new HDLCallVideoInfo(); + mHDLCallVideoInfo.HomeId = mESVideoInfo.HomeId; + mHDLCallVideoInfo.DeviceId = mESVideoInfo.Lc_DeviceId; + mHDLCallVideoInfo.DeviceName = mESVideoInfo.DeviceName; + mHDLCallVideoInfo.InterphoneType = InterphoneType.HDL.ToString(); + mHDLCallVideoInfo.DeviceSipAccount = mESVideoInfo.deviceSipAccount;//鐩戣涓诲姩鍛煎彨闂ㄥ彛鏈烘椂鐢ㄥ埌 + InitCallInfo(mHDLCallVideoInfo); + +#if __IOS__ + +#else + Com.Hdl.Hdllinphonesdk.HDLLinphoneKit.Instance.CallTo(mHDLCallVideoInfo.DeviceSipAccount, true); + var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneMonitorActivity)); ; + intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName); + Shared.Application.Activity.StartActivity(intent); +#endif + + } + #endregion + + + #region 鈻� -- 璺宠浆鍛煎彨椤甸潰_______________________________ + /// <summary> + /// 璺宠浆鍛煎彨椤甸潰 + /// </summary> + /// <param name="mESVideoInfo"></param> + public void ShowESVideoIntercom(ESVideoInfo mESVideoInfo) + { + HDLCallVideoInfo mHDLCallVideoInfo = new HDLCallVideoInfo(); + mHDLCallVideoInfo.CallId = mESVideoInfo.callId; + mHDLCallVideoInfo.HomeId = mESVideoInfo.HomeId; + mHDLCallVideoInfo.DeviceId = mESVideoInfo.Lc_DeviceId; + mHDLCallVideoInfo.DeviceName = mESVideoInfo.DeviceName; + mHDLCallVideoInfo.InterphoneType = InterphoneType.HDL.ToString(); + mHDLCallVideoInfo.DeviceSipAccount = mESVideoInfo.deviceSipAccount; + InitCallInfo(mHDLCallVideoInfo); + +#if __IOS__ + +#else + var intent = new Intent(Shared.Application.Activity, typeof(Com.Hdl.Hdllinphonesdk.Activity.HDLLinphoneIntercomActivity)); ; + intent.PutExtra(HDLLinphoneKit.KeyTitleName, mHDLCallVideoInfo.DeviceName); + Shared.Application.Activity.StartActivity(intent); +#endif + + } + #endregion + + + #region 鈻� -- Android鐩稿叧鎿嶄綔_______________________________ + +#if __Android__ + + /// <summary> + /// 鎺ュ惉銆佹寕鏂�佸紑閿佺瓑鍔ㄤ綔鐩戝惉澶勭悊 + /// </summary> + private class HDLLinphoneCallListener : Java.Lang.Object, Com.Hdl.Hdllinphonesdk.Callback.IOnHDLLinphoneCallListener + { + [Weak] HDLLinphone hdlLinphone; + + public HDLLinphoneCallListener(HDLLinphone mHDLLinphone) + { + hdlLinphone = mHDLLinphone; + } + + + //showToast + void showToast(string text) + { + Toast.MakeText(Application.Activity, text, ToastLength.Short).Show(); + } + + public void OnAnswerAction() + { + showToast("鎺ュ惉"); + hdlLinphone.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.HDL); + } + + public void OnHangUpAction(int callDuration) + { + + showToast("鎸傛柇 閫氳瘽鏃堕暱锛�" + callDuration); + hdlLinphone.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.HDL, callDuration); + } + + public void OnRejectCallAction() + { + showToast("鎷掓帴"); + hdlLinphone.HDLUpdateCallStatus(CallStatusType.REJECT, InterphoneType.HDL); + } + + public void OnScreenshotSuccessfulAction(Bitmap p0) + { + showToast("鎴浘鎴愬姛"); + } + + public void OnUnlockAction() + { + hdlLinphone.HDLUnlockAction(); + } + + } + + /// <summary> + /// 璁剧疆鍘熺敓鐨凩istener鐩戝惉 + /// </summary> + void setOnHDLLinphoneCallListener() + { + HDLLinphoneKit.Instance.OnHDLLinphoneCallListener = new HDLLinphoneCallListener(this); + } + +#endif + #endregion } + + /// <summary> + /// SIP鍙瀵硅鍙傛暟 + /// </summary> + public class HDLCallVideoInfo + { + /// <summary> + /// 璁惧搴忓垪鍙凤紝閫氳蹇呰瀛楁 + /// </summary> + public string DeviceId = string.Empty; + /// <summary> + /// 璁惧鍚嶇О + /// </summary> + public string DeviceName = string.Empty; + /// <summary> + /// 璁惧Sip璐﹀彿 + /// </summary> + public string DeviceSipAccount = string.Empty; + /// <summary> + /// 鍛煎彨璁板綍Id + /// </summary> + public string CallId = string.Empty; + /// <summary> + /// 浣忓畢Id + /// </summary> + public string HomeId = string.Empty; + /// <summary> + /// 璐﹀彿 + /// </summary> + public string Username = string.Empty; + /// <summary> + /// 瀵嗙爜 + /// </summary> + public string Password = string.Empty; + /// <summary> + /// Domain + /// </summary> + public string Domain = string.Empty; + /// <summary> + /// 绫诲瀷 + /// </summary> + public string InterphoneType; + + } + + /// <summary> + /// SIP璐﹀彿鐩稿叧淇℃伅 + /// </summary> + public class HDLSipInfo + { + /// <summary> + /// Sip鏈嶅姟鍣� + /// </summary> + public string proxy { get; set; } + /// <summary> + /// 璁惧鍩� + /// </summary> + public string realm { get; set; } + /// <summary> + /// sip璐﹀彿 + /// </summary> + public string sipAccount { get; set; } + /// <summary> + /// sipPasswd sip瀵嗙爜 + /// </summary> + public string sipPasswd { get; set; } + /// <summary> + /// 浣忓畢ID + /// </summary> + public string homeId; + } + + } -- Gitblit v1.8.0