JLChen
2021-11-30 efad979b6fae76fb37a4de7e94e6bac0a85cb72c
HDL_ON/DAL/ThirdPartySdk/ESOnVideo.cs
@@ -3,9 +3,12 @@
using HDL_ON.DAL.Server;
using System.Threading;
using System.Collections.Generic;
using HDL_ON.UI.UI2.PersonalCenter.PirDevice;
using HDL_ON.Entity;
#if __IOS__
using Shared.IOS.ESVideoOnSDK;
using Shared.IOS.LCVideoOnSDK;
using UIKit;
using Foundation;
#else
@@ -46,7 +49,7 @@
        public ESVideoInfo esVideoInfo;
        /// <summary>
        ///
        /// 暂时没用
        /// </summary>
        public void InitESVideoSDK()
        {
@@ -54,75 +57,265 @@
        }
        /// <summary>
        /// 如果域名包含china,则SDK 使用乐橙的中国大陆(正式)域名
        /// </summary>
        /// <returns></returns>
        bool GetIsChinaMainland()
        {
            //强制使用国内
            //return true;
            return OnAppConfig.Instance.RequestHttpsHost.Contains("china");//如果域名包含china,则SDK 使用乐橙的中国大陆(正式)域名
        }
        /// <summary>
        /// 监控页面
        /// </summary>
        /// <param name="mESVideoInfo"></param>
        public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo)
        public void ShowESVideoMonitor(ESVideoInfo mESVideoInfo, string interphoneType)
        {
            this.esVideoInfo = mESVideoInfo;
            int roomID = 0;
            int.TryParse(mESVideoInfo.roomno, out roomID);
#if __IOS__
            ESOnMonitorViewController vc = new ESOnMonitorViewController();
            vc.MESVideoID = mESVideoInfo.ESVideoUUID;
            //vc.MESRoomID = mESVideoInfo.ESRoomID;
            vc.DeviceName = mESVideoInfo.DeviceName;
            //vc.RoomName = mESVideoInfo.RoomName;
            vc.MESCallDelegate = new OnESCallDelegate(this);
            Shared.Application.currentVC.NavigationController.PushViewController(vc, true);
#else
            if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
            {
                //乐橙可视对讲
                //1.初始化LCOpenSDK_Api
                LCApiKit.SharedInstance().IsChinaMainland = GetIsChinaMainland();
                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_Psk;
                //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 if(interphoneType == InterphoneType.FLVI.ToString())
            {
            Intent 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("callId", mESVideoInfo.callId);
            intent.PutExtra("Type", 0);
            Shared.Application.Activity.StartActivity(intent);
                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 if (interphoneType == InterphoneType.HDL.ToString())
            {
                //HDLLinphone 狄耐克
                HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo);
            }
            else
            {
                HDLUtils.WriteLine("未对接,不支持监视");
            }
#else
            Intent intent = null;
            if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
            {
                intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.LeChengVideoActivity));
                //=========乐橙==========
                intent.PutExtra("Type", 0);
                intent.PutExtra("callId", mESVideoInfo.callId);
                intent.PutExtra("DeviceName", mESVideoInfo.DeviceName);
                intent.PutExtra("AccessToken", mESVideoInfo.Lc_AccessToken);
                intent.PutExtra("DeviceId", mESVideoInfo.Lc_DeviceId);
                intent.PutExtra("Location", GetIsChinaMainland() ? 0 : 1);//如果域名包含china,则是国内账号);
                intent.PutExtra("PlayToken", mESVideoInfo.Lc_PlayToken);
                intent.PutExtra("Psk", mESVideoInfo.Lc_Psk);
                Shared.Application.Activity.StartActivity(intent);
            }
            else if (interphoneType == InterphoneType.FLVI.ToString())
            {
                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", PirSend.HomeId);
                intent.PutExtra("callId", mESVideoInfo.callId);
                intent.PutExtra("Type", 0);
                Shared.Application.Activity.StartActivity(intent);
            }
            else if (interphoneType == InterphoneType.HDL.ToString())
            {
                //HDLLinphone 狄耐克
                HDLLinphone.Current.ShowESVideoMonitor(mESVideoInfo);
            }
            else
            {
                HDLUtils.WriteLine("未对接,不支持监视");
            }
#endif
        }
        /// <summary>
        /// 被呼叫页面
        /// </summary>
        /// <param name="mESVideoInfo"></param>
        public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo)
        public void ShowESvideoVideoIntercom(ESVideoInfo mESVideoInfo, string interphoneType)
        {
            this.esVideoInfo = mESVideoInfo;
            int roomID = 0;
            int.TryParse(mESVideoInfo.roomno, out roomID);
#if __IOS__
            ESOnIntercomViewController vc = new ESOnIntercomViewController();
            vc.MESVideoID = mESVideoInfo.ESVideoUUID;
            //vc.MESRoomID = mESVideoInfo.ESRoomID;
            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);
            if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
            {
                //乐橙可视对讲
                //1.初始化LCOpenSDK_Api
                LCApiKit.SharedInstance().IsChinaMainland = GetIsChinaMainland();
                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_Psk;
                //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 if (interphoneType == InterphoneType.EZVIZ.ToString())
            {
                //萤石猫眼呼叫
                //初始化萤石云SDK,中文国内key、英文海外key 开发者账号使用应用包名申请的APPKEY,不同包名应用需配置不同的APPKEY
                EZSDK.IOS.EZSDK.SharedInstance().InitLibWithAppKey("1aa98a90489b4838b966b57018b4b04b", "1aa98a90489b4838b966b57018b4b04b");
                //1.设置所需河东的AccessToken和RefreshToken、域名地址
                EZSDK.IOS.EZSDK.SharedInstance().SetHDlAccessToken(UserInfo.Current.LoginTokenString, UserInfo.Current.RefreshToken);
                EZSDK.IOS.EZSDK.SharedInstance().SetRequestHttpsHostAndPlatform(OnAppConfig.Instance.RequestHttpsHost, 1, mESVideoInfo.HomeId);
                //2.设置萤石子账号的AccessToken到SDK
                EZSDK.IOS.EZSDK.SharedInstance().SetEZAccessToken(mESVideoInfo.Lc_AccessToken);
                //3.打开视频播放页面
                EZSDK.IOS.EZSDK.SharedInstance().PlayWithDeviceSerial(mESVideoInfo.DeviceSerial);
            }
            else if (interphoneType == InterphoneType.HDL.ToString())
            {
                //HDL Linphone 狄耐克
            }
            else if (interphoneType == InterphoneType.FLVI.ToString())
            {
                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{
                HDLUtils.WriteLine("未支持的可视对讲类型");
            }
#else
            #region Android 处理
            Intent 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("callId", mESVideoInfo.callId);
            intent.PutExtra("Type", 1);
            Shared.Application.Activity.StartActivity(intent);
            Intent intent = null;
            if (interphoneType == InterphoneType.IMOUVISIAL.ToString())
            {
                //待删减不必要参数
                intent = new Intent(Shared.Application.Activity, typeof(HDL_ON_Android.LeChengVideoActivity));
                //=========乐橙==========
                intent.PutExtra("Type", 1);
                intent.PutExtra("callId", mESVideoInfo.callId);
                intent.PutExtra("DeviceName", mESVideoInfo.DeviceName);
                intent.PutExtra("AccessToken", mESVideoInfo.Lc_AccessToken);
                intent.PutExtra("DeviceId", mESVideoInfo.Lc_DeviceId);
                intent.PutExtra("Location", GetIsChinaMainland() ? 0 : 1);//如果域名包含china,则是国内账号);
                intent.PutExtra("PlayToken", mESVideoInfo.Lc_PlayToken);
                intent.PutExtra("Psk", mESVideoInfo.Lc_Psk);
                Shared.Application.Activity.StartActivity(intent);
            }
            else if (interphoneType == InterphoneType.EZVIZ.ToString())
            {
                ((BaseActivity)Shared.Application.Activity).SetCamera(b =>
                {
                    if (b)
                    {
                        intent = new Android.Content.Intent();
                        var bundle = new Android.OS.Bundle();
                        //传递name参数为tinyphp
                        bundle.PutString("EzChildAccessToken", mESVideoInfo.Lc_AccessToken);
                        bundle.PutString("HdlToken", UserInfo.Current.LoginTokenString);
                        bundle.PutString("Url", OnAppConfig.Instance.RequestHttpsHost);
                        bundle.PutString("EzvizAppKey", "1aa98a90489b4838b966b57018b4b04b");
                        bundle.PutInt("Platform", 1);
                        bundle.PutString("HomeId", mESVideoInfo.HomeId);
                        bundle.PutString("DeviceSerial", mESVideoInfo.DeviceSerial);
                        intent.PutExtras(bundle);
                        intent.SetComponent(new Android.Content.ComponentName(Shared.Application.Activity, "com.videogo.MainActivity"));
                        Shared.Application.Activity.StartActivity(intent);
                    }
                });
                return;
            }
            else if (interphoneType == InterphoneType.HDL.ToString())
            {
                //HDL Linphone 狄耐克
            }
            else if (interphoneType == InterphoneType.FLVI.ToString())
            {
                //待删减不必要参数
                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", PirSend.HomeId);
                intent.PutExtra("callId", mESVideoInfo.callId);
                intent.PutExtra("Type", 1);
                Shared.Application.Activity.StartActivity(intent);
            }
            else
            {
                HDLUtils.WriteLine("未支持的可视对讲类型");
            }
            #endregion
#endif
        }
        #region 动作回调,提交记录到云端
        #region 动作回调和原生交互,提交记录到云端
        /// <summary>
        /// 判断callId是否为空
@@ -184,7 +377,7 @@
                }
                else
                {
                    Utlis.WriteLine("POST 挂断失败 code: "+ revertObj.Code);
                    Utlis.WriteLine("POST 挂断失败 code: " + revertObj.Code);
                }
            })
@@ -258,6 +451,7 @@
        }
        DateTime UnlockDateTime = DateTime.MinValue;
        /// <summary>
        /// 开锁成功
        /// </summary>
@@ -268,9 +462,9 @@
            if (CheckESVideoInfoIsNullOrEmpty()) return;
            //3S内不允许触发第二次
            if(UnlockDateTime.AddSeconds(3) > DateTime.Now)
            if (UnlockDateTime.AddSeconds(3) > DateTime.Now)
            {
                Utlis.WriteLine("3S内不允许触发第二次");
                //丰林SDKbug,呼叫的时候开锁成功会有2次回调,
                return;
@@ -298,23 +492,100 @@
            { IsBackground = false }.Start();
        }
#endregion
        #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__
#region OnESCallDelegate
        #region OnESCallDelegate
        /////// <summary>
        /////// OnESCallDelegate 继承响应事件
        /////// </summary>
        OnESCallDelegate mOnESCallDelegate;
        /// <summary>
        ///
        /// iOS原生委托事件
        /// </summary>
        public class OnESCallDelegate : ESCallDelegate
        {
            /// <summary>
            /// ESOnVideo
            /// </summary>
            [Weak] ESOnVideo _ESOnVideo;
            /// <summary>
            /// 初始化
            /// </summary>
            /// <param name="mESOnVideo">呼叫相关的参数</param>
            public OnESCallDelegate(ESOnVideo mESOnVideo)
            {
                _ESOnVideo = mESOnVideo;
@@ -369,36 +640,108 @@
        }
#endregion
#endif
        #endregion
        #region OnLCCallDelegate
        /////// <summary>
        /////// OnLCCallDelegate 继承响应事件
        /////// </summary>
        OnLCCallDelegate mOnLCCallDelegate;
        /// <summary>
        /// 测试方法
        ///
        /// </summary>
        /// <param name="isMonitor"></param>
        public void Test(bool isMonitor = true)
        public class OnLCCallDelegate : LCCallDelegate
        {
            ESVideoInfo eSVideoInfo = new ESVideoInfo()
            [Weak] ESOnVideo _ESOnVideo;
            public OnLCCallDelegate(ESOnVideo mESOnVideo)
            {
                DeviceName = "室外机88",
                ESVideoUUID = "JJY000019VPLLF",
            };
            if (isMonitor)
            {
                ShowESVideoMonitor(eSVideoInfo);
                _ESOnVideo = mESOnVideo;
            }
            else
            /// <summary>
            /// 接听
            /// </summary>
            public override void OnAnswerAction()
            {
                eSVideoInfo.callId = "88888";
                ShowESvideoVideoIntercom(eSVideoInfo);
                _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>
        ///// 测试方法
        ///// </summary>
        ///// <param name="isMonitor"></param>
        //public void Test(bool isMonitor = true)
        //{
        //    ESVideoInfo eSVideoInfo = new ESVideoInfo()
        //    {
        //        DeviceName = "室外机88",
        //        ESVideoUUID = "JJY000019VPLLF",
        //    };
        //    if (isMonitor)
        //    {
        //        ShowESVideoMonitor(eSVideoInfo, "");
        //    }
        //    else
        //    {
        //        eSVideoInfo.callId = "88888";
        //        ShowESvideoVideoIntercom(eSVideoInfo, "");
        //    }
        //}
    }
    /// <summary>
    ///
    /// 可视对讲参数对象(仅在最后一步跳转到activity时才调用,为了做兼容这里都数据有点乱,以后有时间再理顺思路优化)
    /// </summary>
    public class ESVideoInfo
    {
@@ -415,31 +758,114 @@
        /// <summary>
        /// 丰林请求的唯一id
        /// </summary>
        public string uuid;
        public string uuid = string.Empty;
        /// <summary>
        /// 丰林社区id
        /// </summary>
        public string cmtID;
        public string cmtID = string.Empty;
        /// <summary>
        /// 丰林房间号
        /// </summary>
        public string roomno;
        public string roomno = string.Empty;
        /// <summary>
        /// 丰林楼栋号
        /// </summary>
        public string unitno;
        public string unitno = string.Empty;
        ///// <summary>
        ///// 丰林住宅Id
        ///// </summary>
        //public string HomeID;
        //public string HomeID= string.Empty;
        /// <summary>
        /// 呼叫记录Id
        /// </summary>
        public string callId;
        public string callId = string.Empty;
        //========================大华==========================
        /// <summary>
        /// 账号accessToken
        /// 萤石子账号Token也共用这个字段
        /// </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>
        /// 住宅Id
        /// </summary>
        public string HomeId = string.Empty;
        /// <summary>
        /// 设备序列号
        /// </summary>
        public string DeviceSerial = string.Empty;
        //========================HDL SIP==========================
        /// <summary>
        /// 设备sip账号 interphoneType是HDL时才会有值
        /// </summary>
        public string deviceSipAccount;
    }
    /// <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,
        /// <summary>
        /// 萤石猫眼呼叫
        /// </summary>
        EZVIZ,
        /// <summary>
        /// 狄耐克 HDL Linphone
        /// </summary>
        HDL,
    }
}