| | |
| | | using HDL_ON.DAL.Server; |
| | | using System.Threading; |
| | | using System.Collections.Generic; |
| | | using HDL_ON.UI.UI2.PersonalCenter.PirDevice; |
| | | |
| | | #if __IOS__ |
| | | using Shared.IOS.ESVideoOnSDK; |
| | | using Shared.IOS.LCVideoOnSDK; |
| | | using UIKit; |
| | | using Foundation; |
| | | #else |
| | |
| | | /// <summary> |
| | | /// 监控页面 |
| | | /// </summary> |
| | | /// <param name="mESVideoInfo">丰林监视所需相关参数</param> |
| | | public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo) |
| | | /// <param name="mESVideoInfo"></param> |
| | | public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo, string interphoneType) |
| | | { |
| | | #if __IOS__ |
| | | int roomID = 0; |
| | | this.esVideoInfo = mESVideoInfo; |
| | | int roomID = 0; |
| | | int.TryParse(mESVideoInfo.roomno, out roomID); |
| | | ESOnMonitorViewController vc = new ESOnMonitorViewController(); |
| | | vc.MESVideoID = mESVideoInfo.ESVideoUUID; |
| | | vc.MESRoomID =roomID; |
| | | vc.DeviceName = mESVideoInfo.DeviceName; |
| | | //vc.RoomName = mESVideoInfo.RoomName; |
| | | //vc.MESCallDelegate = new OnESCallDelegate(this); |
| | | mOnESCallDelegate = new OnESCallDelegate(this); |
| | | vc.MESCallDelegate = mOnESCallDelegate; |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | #else |
| | | |
| | | Intent intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity)); |
| | | #if __IOS__ |
| | | if (interphoneType == "IMOUVISIAL") |
| | | { |
| | | //乐橙可视对讲 |
| | | //1.初始化LCOpenSDK_Api |
| | | LCApiKit.SharedInstance().InitSDKOpenApi(mESVideoInfo.Lc_AccessToken); |
| | | LCApiKit.SharedInstance().CurrentDevicePlayToken = mESVideoInfo.Lc_PlayToken; |
| | | LCApiKit.SharedInstance().CurrentDeviceId = mESVideoInfo.Lc_DeviceId; |
| | | LCApiKit.SharedInstance().CurrentDeviceName = mESVideoInfo.DeviceName; |
| | | LCApiKit.SharedInstance().CurrentPsk = mESVideoInfo.Lc_DeviceId; |
| | | //2.调整监视页面 |
| | | LCOnMonitorViewController vc = new LCOnMonitorViewController(); |
| | | mOnLCCallDelegate = new OnLCCallDelegate(this); |
| | | vc.MLCCallDelegate = mOnLCCallDelegate; |
| | | //vc.MLCCallDelegate = new OnLCCallDelegate(this); |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | } |
| | | else |
| | | { |
| | | |
| | | ESOnMonitorViewController vc = new ESOnMonitorViewController(); |
| | | vc.MESVideoID = mESVideoInfo.ESVideoUUID; |
| | | vc.MESRoomID = roomID; |
| | | vc.DeviceName = mESVideoInfo.DeviceName; |
| | | //vc.RoomName = mESVideoInfo.RoomName; |
| | | //vc.MESCallDelegate = new OnESCallDelegate(this); |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | } |
| | | #else |
| | | Intent intent = null; |
| | | if (interphoneType == "IMOUVISIAL") |
| | | { |
| | | intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.LeChengVideoActivity)); |
| | | } |
| | | else |
| | | { |
| | | intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity)); |
| | | } |
| | | |
| | | intent.PutExtra("ESVideoUUID", mESVideoInfo.ESVideoUUID); |
| | | intent.PutExtra("uuid", mESVideoInfo.uuid); |
| | | intent.PutExtra("DeviceName", mESVideoInfo.DeviceName); |
| | | intent.PutExtra("cmtID", mESVideoInfo.cmtID); |
| | | intent.PutExtra("roomno", mESVideoInfo.roomno); |
| | | intent.PutExtra("unitno", mESVideoInfo.unitno); |
| | | //intent.PutExtra("HomeID", mESVideoInfo.HomeID); |
| | | intent.PutExtra("HomeID", PirSend.HomeId); |
| | | intent.PutExtra("callId", mESVideoInfo.callId); |
| | | intent.PutExtra("Type", 0); |
| | | |
| | | //=========乐橙========== |
| | | intent.PutExtra("AccessToken", mESVideoInfo.Lc_AccessToken); |
| | | intent.PutExtra("DeviceId", mESVideoInfo.Lc_DeviceId); |
| | | intent.PutExtra("Location", OnAppConfig.Instance.RequestHttpsHost.Contains("China") ? 0 : 1);//如果域名包含china,则是国内账号); |
| | | intent.PutExtra("PlayToken", mESVideoInfo.Lc_PlayToken); |
| | | intent.PutExtra("Psk", mESVideoInfo.Lc_Psk); |
| | | |
| | | Shared.Application.Activity.StartActivity(intent); |
| | | |
| | | #endif |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 被呼叫页面 |
| | | /// </summary> |
| | | /// <param name="mESVideoInfo">丰林呼叫功能所需相关参数</param> |
| | | public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo) |
| | | /// <param name="mESVideoInfo"></param> |
| | | public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo, string interphoneType) |
| | | { |
| | | this.esVideoInfo = mESVideoInfo; |
| | | #if __IOS__ |
| | | int roomID = 0; |
| | | int.TryParse(mESVideoInfo.roomno, out roomID); |
| | | ESOnIntercomViewController vc = new ESOnIntercomViewController(); |
| | | vc.MESVideoID = mESVideoInfo.ESVideoUUID; |
| | | vc.MESRoomID = roomID; |
| | | vc.DeviceName = mESVideoInfo.DeviceName; |
| | | //vc.RoomName = mESVideoInfo.RoomName; |
| | | //vc.MESCallDelegate = new OnESCallDelegate(this); |
| | | mOnESCallDelegate = new OnESCallDelegate(this); |
| | | vc.MESCallDelegate = mOnESCallDelegate; |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | #else |
| | | #if __IOS__ |
| | | if (interphoneType == "IMOUVISIAL") |
| | | { |
| | | //乐橙可视对讲 |
| | | //1.初始化LCOpenSDK_Api |
| | | LCApiKit.SharedInstance().InitSDKOpenApi(mESVideoInfo.Lc_AccessToken); |
| | | //2021-05-18 目前推送的PlayToken;有问题会导致SDK崩溃,暂时不传 |
| | | //LCApiKit.SharedInstance().CurrentDevicePlayToken = mESVideoInfo.Lc_PlayToken; |
| | | LCApiKit.SharedInstance().CurrentDeviceId = mESVideoInfo.Lc_DeviceId; |
| | | LCApiKit.SharedInstance().CurrentDeviceName = mESVideoInfo.DeviceName; |
| | | LCApiKit.SharedInstance().CurrentPsk = mESVideoInfo.Lc_DeviceId; |
| | | //2.跳转乐橙呼叫页面 |
| | | LCOnIntercomViewController vc = new LCOnIntercomViewController(); |
| | | mOnLCCallDelegate = new OnLCCallDelegate(this); |
| | | vc.MLCCallDelegate = mOnLCCallDelegate; |
| | | //vc.MLCCallDelegate = new OnLCCallDelegate(this); |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | } |
| | | else |
| | | { |
| | | |
| | | Intent intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity)); |
| | | ESOnIntercomViewController vc = new ESOnIntercomViewController(); |
| | | vc.MESVideoID = mESVideoInfo.ESVideoUUID; |
| | | vc.MESRoomID = roomID; |
| | | vc.DeviceName = mESVideoInfo.DeviceName; |
| | | //vc.RoomName = mESVideoInfo.RoomName; |
| | | //vc.MESCallDelegate = new OnESCallDelegate(this); |
| | | mOnESCallDelegate = new OnESCallDelegate(this); |
| | | vc.MESCallDelegate = mOnESCallDelegate; |
| | | Shared.Application.currentVC.NavigationController.PushViewController(vc, true); |
| | | } |
| | | #else |
| | | #region |
| | | |
| | | Intent intent = null; |
| | | if (interphoneType == "IMOUVISIAL") |
| | | { |
| | | intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.LeChengVideoActivity)); |
| | | } |
| | | else |
| | | { |
| | | intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.VideoActivity)); |
| | | } |
| | | |
| | | intent.PutExtra("ESVideoUUID", mESVideoInfo.ESVideoUUID); |
| | | intent.PutExtra("uuid", mESVideoInfo.uuid); |
| | | intent.PutExtra("DeviceName", mESVideoInfo.DeviceName); |
| | | intent.PutExtra("cmtID", mESVideoInfo.cmtID); |
| | | intent.PutExtra("roomno", mESVideoInfo.roomno); |
| | | intent.PutExtra("unitno", mESVideoInfo.unitno); |
| | | //intent.PutExtra("HomeID", mESVideoInfo.HomeID); |
| | | intent.PutExtra("HomeID", PirSend.HomeId); |
| | | intent.PutExtra("callId", mESVideoInfo.callId); |
| | | intent.PutExtra("Type", 1); |
| | | |
| | | //=========乐橙========== |
| | | intent.PutExtra("AccessToken", mESVideoInfo.Lc_AccessToken); |
| | | intent.PutExtra("DeviceId", mESVideoInfo.Lc_DeviceId); |
| | | intent.PutExtra("Location", OnAppConfig.Instance.RequestHttpsHost.Contains("China") ? 0 : 1);//如果域名包含china,则是国内账号); |
| | | intent.PutExtra("PlayToken", mESVideoInfo.Lc_PlayToken); |
| | | intent.PutExtra("Psk", mESVideoInfo.Lc_Psk); |
| | | |
| | | Shared.Application.Activity.StartActivity(intent); |
| | | |
| | | #endregion |
| | | #endif |
| | | } |
| | | |
| | | #region 动作回调,提交记录到云端 |
| | | #region 动作回调和原生交互,提交记录到云端 |
| | | |
| | | /// <summary> |
| | | /// 判断callId是否为空 |
| | |
| | | } |
| | | else |
| | | { |
| | | Utlis.WriteLine("POST 挂断失败 code: "+ revertObj.Code); |
| | | Utlis.WriteLine("POST 挂断失败 code: " + revertObj.Code); |
| | | } |
| | | |
| | | }) |
| | |
| | | } |
| | | |
| | | DateTime UnlockDateTime = DateTime.MinValue; |
| | | |
| | | /// <summary> |
| | | /// 开锁成功 |
| | | /// </summary> |
| | |
| | | if (CheckESVideoInfoIsNullOrEmpty()) return; |
| | | |
| | | //3S内不允许触发第二次 |
| | | if(UnlockDateTime.AddSeconds(3) > DateTime.Now) |
| | | if (UnlockDateTime.AddSeconds(3) > DateTime.Now) |
| | | { |
| | | |
| | | |
| | | Utlis.WriteLine("3S内不允许触发第二次"); |
| | | //丰林SDKbug,呼叫的时候开锁成功会有2次回调, |
| | | return; |
| | |
| | | { IsBackground = false }.Start(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 王赢新接听和开锁接口 |
| | | /// <summary> |
| | | /// 开锁 |
| | | /// </summary> |
| | | void HDLUnlockAction() |
| | | { |
| | | //Utlis.WriteLine("UnlockAction"); |
| | | |
| | | if (esVideoInfo == null) return; |
| | | |
| | | new Thread(() => |
| | | { |
| | | Dictionary<string, object> dic = new Dictionary<string, object>(); |
| | | dic.Add("deviceId", esVideoInfo.Lc_DeviceId);//设备id |
| | | dic.Add("callId", esVideoInfo.callId); |
| | | var requestJson = HttpUtil.GetSignRequestJson(dic); |
| | | var revertObj = HttpUtil.RequestHttpsPostFroHome(NewAPI.API_POST_VideoDevice_OpenDoorbell, requestJson); |
| | | if (revertObj.Code == StateCode.SUCCESS) |
| | | { |
| | | Application.RunOnMainThread(() => |
| | | { |
| | | #if __IOS__ |
| | | //和原生监控界面交互、发送开锁成功通知 |
| | | NSNotificationCenter.DefaultCenter.PostNotificationName("lcCallDelegateOpenDoorSuccess", null); |
| | | #endif |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | Utlis.WriteLine("POST 开锁失败 code: " + revertObj.Code); |
| | | } |
| | | |
| | | }) |
| | | { IsBackground = false }.Start(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 更改通话状态 |
| | | /// </summary> |
| | | void HDLUpdateCallStatus(CallStatusType callStatusType, InterphoneType interphoneType, int callDuration = 0) { |
| | | |
| | | if (CheckESVideoInfoIsNullOrEmpty()) return; |
| | | |
| | | new Thread(() => |
| | | { |
| | | Dictionary<string, object> dic = new Dictionary<string, object>(); |
| | | dic.Add("callId", esVideoInfo.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 |
| | | |
| | | #if __IOS__ |
| | |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | #endregion |
| | | |
| | | #region OnLCCallDelegate |
| | | /////// <summary> |
| | | /////// OnLCCallDelegate 继承响应事件 |
| | | /////// </summary> |
| | | OnLCCallDelegate mOnLCCallDelegate; |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public class OnLCCallDelegate : LCCallDelegate |
| | | { |
| | | |
| | | [Weak] ESOnVideo _ESOnVideo; |
| | | |
| | | public OnLCCallDelegate(ESOnVideo mESOnVideo) |
| | | { |
| | | _ESOnVideo = mESOnVideo; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 接听 |
| | | /// </summary> |
| | | public override void OnAnswerAction() |
| | | { |
| | | _ESOnVideo.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.IMOUVISIAL); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 挂断 |
| | | /// </summary> |
| | | /// <param name="callDuration"></param> |
| | | public override void OnHangUpAction(int callDuration) |
| | | { |
| | | _ESOnVideo.HDLUpdateCallStatus(CallStatusType.RECEIVED, InterphoneType.IMOUVISIAL, callDuration); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 拒接 |
| | | /// </summary> |
| | | public override void OnRejectCallAction() |
| | | { |
| | | _ESOnVideo.HDLUpdateCallStatus(CallStatusType.REJECT, InterphoneType.IMOUVISIAL); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 截图成功 |
| | | /// </summary> |
| | | /// <param name="image"></param> |
| | | public override void OnScreenshotSuccessfulAction(UIImage image) |
| | | { |
| | | ////NSData imageData = UIImagePNGRepresentation(image); UIImage |
| | | //NSData imageData = image.AsPNG(); |
| | | //byte[] dataBytes = new byte[imageData.Length]; |
| | | //System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, dataBytes, 0, Convert.ToInt32(imageData.Length)); |
| | | ////image.g |
| | | ////_ESOnVideo.ScreenshotSuccessfulAction(dataBytes); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 开锁成功 |
| | | /// </summary> |
| | | public override void OnUnlockAction() |
| | | { |
| | | _ESOnVideo.HDLUnlockAction(); |
| | | } |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | #endif |
| | | |
| | | /// <summary> |
| | |
| | | { |
| | | DeviceName = "室外机88", |
| | | ESVideoUUID = "JJY000019VPLLF", |
| | | |
| | | |
| | | }; |
| | | if (isMonitor) |
| | | { |
| | | ShowESVideoMonitor(eSVideoInfo); |
| | | ShowESVideoMonitor(eSVideoInfo, ""); |
| | | } |
| | | else |
| | | { |
| | | eSVideoInfo.callId = "88888"; |
| | | ShowESvideoVideoIntercom(eSVideoInfo); |
| | | ShowESvideoVideoIntercom(eSVideoInfo, ""); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 丰林监视和呼叫功能所需相关参数 |
| | | /// 可视对讲参数对象(仅在最后一步跳转到activity时才调用,为了做兼容这里都数据有点乱,以后有时间再理顺思路优化) |
| | | /// </summary> |
| | | public class ESVideoInfo |
| | | { |
| | |
| | | /// </summary> |
| | | public string callId = string.Empty; |
| | | |
| | | |
| | | //========================大华========================== |
| | | |
| | | /// <summary> |
| | | /// 账号accessToken |
| | | /// </summary> |
| | | public string Lc_AccessToken = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 设备序列号,通讯必要字段 |
| | | /// </summary> |
| | | public string Lc_DeviceId = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 备注??? |
| | | /// </summary> |
| | | public string Lc_Psk = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 预览画面必须使用 |
| | | /// </summary> |
| | | public string Lc_PlayToken = string.Empty; |
| | | |
| | | /// <summary> |
| | | /// 账号标记:0国内,1国外;国内国外访问都地址不一样 |
| | | /// </summary> |
| | | public int Lc_Location = 0; |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 通话状态类型 |
| | | /// </summary> |
| | | public enum CallStatusType |
| | | { |
| | | /// <summary> |
| | | /// 未接 |
| | | /// </summary> |
| | | MISSED, |
| | | /// <summary> |
| | | /// 已接听 |
| | | /// </summary> |
| | | RECEIVED, |
| | | /// <summary> |
| | | /// 拒接 |
| | | /// </summary> |
| | | REJECT, |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 可视对讲设备平台类型 |
| | | /// </summary> |
| | | public enum InterphoneType |
| | | { |
| | | /// <summary> |
| | | /// 丰林平台 |
| | | /// </summary> |
| | | FLVI, |
| | | /// <summary> |
| | | /// 大华可视对讲平台 |
| | | /// </summary> |
| | | IMOUVISIAL, |
| | | } |
| | | } |