From 485a9553e08984a945d692483b1aea15a02ef5ab Mon Sep 17 00:00:00 2001
From: chenqiyang <1406175257@qq.com>
Date: 星期一, 13 三月 2023 11:09:17 +0800
Subject: [PATCH] 1.更新sdk到5.1.1 2.新增临时密码列表界面 3.新增跳转添加设备页接口 4.新增添加门锁设备逻辑

---
 EZSDK/EZSDK/EZ/PrefixHeader.pch                                                             |    2 
 EZSDK/EZSDK/EZ/Global/EZHttpUtil.h                                                          |   67 
 EZSDK/EZSDK/EZ/Global/HDLEZConstants.h                                                      |  181 +
 EZSDK/EZSDK/EZ/Global/HDLEZConstants.m                                                      |  290 ++
 EZSDK/EZSDK.xcodeproj/project.pbxproj                                                       |  454 ++-
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZBAVParam.h                                    |  196 +
 EZSDK/EZSDK/EZ/Base/HDLFVTopBarView.h                                                       |   25 
 EZSDK/EZSDK/SDK/include/modules/Sadp.h                                                      |  557 ++++
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkView.h                               |    0 
 EZSDK/EZSDK/SDK/include/EZConstants.h                                                       |   57 
 EZSDK/EZSDK/SDK/include/modules/EZDeviceCloudServiceInfo.h                                  |   65 
 EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.m                                                       |   43 
 EZSDK/EZSDK/SDK/include/modules/EZConfigTokenInfo.h                                         |   21 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZConferenceClient.h                            |  238 +
 EZSDK/EZSDK/SDK/include/modules/EZProbeDeviceInfo.h                                         |    2 
 EZSDK/EZSDK/SDK/include/EZConstants_Auth.h                                                  |   52 
 EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.h                                                       |   18 
 EZSDK/EZSDK/SDK/include/EZGlobalSDK.h                                                       | 1503 ++++++----
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h                                |  268 +
 EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m                           |   90 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h                             |   63 
 EZSDK/EZSDK/SDK/include/modules/EZAlarmInfo.h                                               |   14 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h                         |   30 
 EZSDK/EZSDK/SDK/include/EZStreamPlayer.h                                                    |    8 
 EZSDK/EZSDK/SDK/include/modules/EZRecordCoverFetcherManager.h                               |   69 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalk.h                                   |  179 +
 EZSDK/EZSDK/SDK/include/modules/EZCameraInfo.h                                              |    2 
 EZSDK/EZSDK/SDK/include/modules/EZWiFiItemInfo.h                                            |   21 
 EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.m                  |   88 
 EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.h                                      |   22 
 EZSDK/EZSDK/EZ/Venders/openssl/lib/libcrypto.a                                              |    0 
 EZSDK/EZSDK/SDK/include/modules/EZPMPlayPrivateTokenInfo.h                                  |   22 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h                      |  107 
 EZSDK.IOS/EZSDK.IOS/Library/lib/libcrypto.a                                                 |    0 
 EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.h                  |   18 
 EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.m                                      |   12 
 EZSDK/EZSDK/SDK/include/modules/EZSADPDeviceInfo.h                                          |    2 
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.m                                  |  138 +
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.h                                  |   43 
 EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m                                 |   28 
 EZSDK/EZSDK/SDK/include/modules/EZAPDevInfo.h                                               |   23 
 EZSDK/EZSDK/SDK/include/modules/EZRecordDownloadTask.h                                      |   19 
 EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m                             |   46 
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.h                                  |   21 
 EZSDK/EZSDK/SDK/include/EZPlayer.h                                                          |   84 
 EZSDK/EZSDK/SDK/include/modules/EZCloudRecordFile.h                                         |    2 
 EZSDK/EZSDK/EZSDK.h                                                                         |   18 
 EZSDK/EZSDK/SDK/libEZOpenSDK.a                                                              |    0 
 EZSDK/EZSDK/SDK/include/EZConstants_WifiConfig.h                                            |   36 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCCameraParam.h                              |   38 
 EZSDK.IOS/EZSDK.IOS/Library/lib/libssl.a                                                    |    0 
 EZSDK/EZSDK/SDK/include/modules/EZDeviceRecordFile.h                                        |    5 
 EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.m                       |  339 ++
 EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.h                                                       |   25 
 EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.h                       |   26 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h                         |   17 
 EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.m                                                       |  104 
 EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m                              |    6 
 EZSDK/EZSDK/SDK/include/EZOpenSDK.h                                                         | 1211 ++++----
 EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme                                 |    2 
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.m                                  |  240 +
 EZSDK/EZSDK/SDK/include/EZHCNetDeviceSDK.h                                                  |   51 
 EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.h                              |    7 
 EZSDK/EZSDK/EZSDK.m                                                                         |   40 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/MessageListCell.m |    3 
 EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj                                                        |   11 
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.m                                  |   79 
 EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.m                                               |  108 
 EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m                             |   60 
 EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h                      |   31 
 EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.h                                               |   45 
 EZSDK/EZSDK/EZ/Venders/openssl/lib/libssl.a                                                 |    0 
 EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.h                                  |   23 
 EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m                               |    9 
 /dev/null                                                                                   |  151 -
 EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a                                                      |    0 
 EZSDK/EZSDK/SDK/include/modules/EZDeviceInfo.h                                              |    6 
 EZSDK/EZSDK/EZ/Global/EZHttpUtil.m                                                          |  177 +
 EZSDK/EZSDK/SDK/include/modules/EZDevicePtzAngleInfo.h                                      |   47 
 EZSDK/EZSDK/EZ/Global/GlobalKit.h                                                           |    4 
 80 files changed, 6,429 insertions(+), 1,680 deletions(-)

diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/MessageListCell.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/MessageListCell.m
index 6ded266..e07bace 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/MessageListCell.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/MessageListCell.m
@@ -59,8 +59,7 @@
 {
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
     formatter.dateFormat = @"HH:mm:ss";
-//    self.timeLabel.text = [formatter stringFromDate:[info getAlarmStartTime]];
-    self.timeLabel.text = [self compareCurrentTime:[info getAlarmStartTime]];
+    self.timeLabel.text = [formatter stringFromDate:[info getAlarmStartTime]];
     self.readStatusIcon.hidden = NO;
     if(info.isChecked)
     {
diff --git a/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj b/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
index a8f1ef4..3ec93e4 100644
--- a/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
+++ b/EZSDK.IOS/EZSDK.IOS/EZSDK.IOS.csproj
@@ -48,10 +48,17 @@
   <ItemGroup>
     <NativeReference Include="Library\libEZSDK.a">
       <Kind>Static</Kind>
+      <Frameworks>UIKit Foundation OpenAL CoreMedia GLKit AudioToolbox ExternalAccessory VideoToolbox MobileCoreServices SystemConfiguration NetworkExtension AVFoundation</Frameworks>
+      <LinkerFlags> -dead_strip -lc++ -lsqlite3.0 -lz -liconv.2.4.0 -lbz2  -ObjC</LinkerFlags>
       <IsCxx>True</IsCxx>
       <ForceLoad>True</ForceLoad>
-      <Frameworks>UIKit Foundation OpenAL CoreMedia GLKit AudioToolbox ExternalAccessory VideoToolbox MobileCoreServices SystemConfiguration NetworkExtension AVFoundation</Frameworks>
-      <LinkerFlags>-dead_strip -lc++ -lsqlite3.0 -lz -liconv.2.4.0 -lbz2 -ObjC</LinkerFlags>
+    </NativeReference>
+    <NativeReference Include="Library\lib\libcrypto.a">
+      <Kind>Static</Kind>
+      <ForceLoad>True</ForceLoad>
+    </NativeReference>
+    <NativeReference Include="Library\lib\libssl.a">
+      <Kind>Static</Kind>
     </NativeReference>
   </ItemGroup>
   <Import Project="$(MSBuildExtensionsPath)\Xamarin\iOS\Xamarin.iOS.ObjCBinding.CSharp.targets" />
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/lib/libcrypto.a b/EZSDK.IOS/EZSDK.IOS/Library/lib/libcrypto.a
new file mode 100644
index 0000000..ad3d482
--- /dev/null
+++ b/EZSDK.IOS/EZSDK.IOS/Library/lib/libcrypto.a
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/lib/libssl.a b/EZSDK.IOS/EZSDK.IOS/Library/lib/libssl.a
new file mode 100644
index 0000000..342610d
--- /dev/null
+++ b/EZSDK.IOS/EZSDK.IOS/Library/lib/libssl.a
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
index aadfd57..144f2c3 100644
--- a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
+++ b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
Binary files differ
diff --git a/EZSDK/EZSDK.xcodeproj/project.pbxproj b/EZSDK/EZSDK.xcodeproj/project.pbxproj
index cded2a4..b7eb3da 100644
--- a/EZSDK/EZSDK.xcodeproj/project.pbxproj
+++ b/EZSDK/EZSDK.xcodeproj/project.pbxproj
@@ -7,6 +7,15 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		AE5068D829B9DB5E009EA09A /* HDLEZTemInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = AE5068D729B9DB5E009EA09A /* HDLEZTemInfoModel.m */; };
+		AEC306D229B9F2B5000B3861 /* HDLEZVisitorRecordView.m in Sources */ = {isa = PBXBuildFile; fileRef = AEC306D129B9F2B5000B3861 /* HDLEZVisitorRecordView.m */; };
+		AEC306D529B9F2DB000B3861 /* HDLEZVisitorRecordCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AEC306D429B9F2DB000B3861 /* HDLEZVisitorRecordCell.m */; };
+		AEDD944129B0329D00EAA2CA /* libEZOpenSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AEDD940729B0329D00EAA2CA /* libEZOpenSDK.a */; };
+		AEE84D3B29BABAC00078FDAD /* HDLEZVisitorRecordViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE84D3929BABABF0078FDAD /* HDLEZVisitorRecordViewController.m */; };
+		AEE84D3F29BAC5BF0078FDAD /* HDLEZBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE84D3D29BAC5BC0078FDAD /* HDLEZBaseViewController.m */; };
+		AEE84D4329BAC7FE0078FDAD /* HDLEZConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE84D4129BAC7F90078FDAD /* HDLEZConstants.m */; };
+		AEE84D4629BACBAD0078FDAD /* HDLEZTopBarView.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE84D4429BACBAA0078FDAD /* HDLEZTopBarView.m */; };
+		AEE84D4929BAE2590078FDAD /* HDLEZNoDataView.m in Sources */ = {isa = PBXBuildFile; fileRef = AEE84D4829BAE2590078FDAD /* HDLEZNoDataView.m */; };
 		B95AB87E26984D49007BC8D7 /* HDLAlarmInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B95AB87D26984D49007BC8D7 /* HDLAlarmInfo.m */; };
 		B95AB88726984DD5007BC8D7 /* NSObject+YYModel.m in Sources */ = {isa = PBXBuildFile; fileRef = B95AB88426984DD5007BC8D7 /* NSObject+YYModel.m */; };
 		B95AB88826984DD5007BC8D7 /* YYClassInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = B95AB88526984DD5007BC8D7 /* YYClassInfo.m */; };
@@ -77,7 +86,6 @@
 		B9BC99F225C0FFBD00C024FE /* UIView+WebCacheOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC98A425C0FFB800C024FE /* UIView+WebCacheOperation.m */; };
 		B9BC99F325C0FFBD00C024FE /* UIButton+WebCache.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC98A825C0FFB800C024FE /* UIButton+WebCache.m */; };
 		B9BC99F425C0FFBD00C024FE /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B9BC98FD25C0FFBA00C024FE /* libcrypto.a */; };
-		B9BC99F525C0FFBD00C024FE /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B9BC98FE25C0FFBA00C024FE /* libssl.a */; };
 		B9BC99F625C0FFBD00C024FE /* Aspects.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC990125C0FFBA00C024FE /* Aspects.m */; };
 		B9BC99F725C0FFBD00C024FE /* EZQRView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC990425C0FFBA00C024FE /* EZQRView.m */; };
 		B9BC99F825C0FFBD00C024FE /* EZCustomTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC990925C0FFBA00C024FE /* EZCustomTableView.m */; };
@@ -126,7 +134,6 @@
 		B9BC9A2725C0FFBD00C024FE /* EZAddByQRCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */; };
 		B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */; };
 		B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC997025C0FFBB00C024FE /* GlobalKit.m */; };
-		B9BC9A2B25C0FFBD00C024FE /* libEZOpenSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */; };
 		B9EA4E8525C7E806000FFDA2 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */; };
 		B9EA4E8625C7E806000FFDA2 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */; };
 		B9EA4E8725C7E806000FFDA2 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */; };
@@ -162,6 +169,77 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		AE5068D629B9DB5E009EA09A /* HDLEZTemInfoModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HDLEZTemInfoModel.h; sourceTree = "<group>"; };
+		AE5068D729B9DB5E009EA09A /* HDLEZTemInfoModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HDLEZTemInfoModel.m; sourceTree = "<group>"; };
+		AEC306D029B9F2B5000B3861 /* HDLEZVisitorRecordView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZVisitorRecordView.h; sourceTree = "<group>"; };
+		AEC306D129B9F2B5000B3861 /* HDLEZVisitorRecordView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZVisitorRecordView.m; sourceTree = "<group>"; };
+		AEC306D329B9F2DA000B3861 /* HDLEZVisitorRecordCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZVisitorRecordCell.h; sourceTree = "<group>"; };
+		AEC306D429B9F2DB000B3861 /* HDLEZVisitorRecordCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZVisitorRecordCell.m; sourceTree = "<group>"; };
+		AEDD940729B0329D00EAA2CA /* libEZOpenSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libEZOpenSDK.a; sourceTree = "<group>"; };
+		AEDD940929B0329D00EAA2CA /* EZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants.h; sourceTree = "<group>"; };
+		AEDD940A29B0329D00EAA2CA /* EZHCNetDeviceSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceSDK.h; sourceTree = "<group>"; };
+		AEDD940B29B0329D00EAA2CA /* EZStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStreamPlayer.h; sourceTree = "<group>"; };
+		AEDD940C29B0329D00EAA2CA /* EZOpenSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZOpenSDK.h; sourceTree = "<group>"; };
+		AEDD940D29B0329D00EAA2CA /* EZConstants_Auth.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants_Auth.h; sourceTree = "<group>"; };
+		AEDD940E29B0329D00EAA2CA /* EZPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayer.h; sourceTree = "<group>"; };
+		AEDD940F29B0329D00EAA2CA /* EZGlobalSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZGlobalSDK.h; sourceTree = "<group>"; };
+		AEDD941129B0329D00EAA2CA /* EZDeviceVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceVersion.h; sourceTree = "<group>"; };
+		AEDD941229B0329D00EAA2CA /* EZUserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZUserInfo.h; sourceTree = "<group>"; };
+		AEDD941329B0329D00EAA2CA /* EZDeviceUpgradeStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceUpgradeStatus.h; sourceTree = "<group>"; };
+		AEDD941429B0329D00EAA2CA /* EZAccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAccessToken.h; sourceTree = "<group>"; };
+		AEDD941529B0329D00EAA2CA /* EZPlayerExParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayerExParamInfo.h; sourceTree = "<group>"; };
+		AEDD941729B0329D00EAA2CA /* EZRTCCameraParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCCameraParam.h; sourceTree = "<group>"; };
+		AEDD941829B0329D00EAA2CA /* EZRTCMediaSessionDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCMediaSessionDefines.h; sourceTree = "<group>"; };
+		AEDD941929B0329D00EAA2CA /* EZVideoTalkSDKDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkSDKDefines.h; sourceTree = "<group>"; };
+		AEDD941A29B0329D00EAA2CA /* EZVideoTalkView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkView.h; sourceTree = "<group>"; };
+		AEDD941B29B0329D00EAA2CA /* EZConferenceClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConferenceClient.h; sourceTree = "<group>"; };
+		AEDD941C29B0329D00EAA2CA /* EZVideoTalkGlobal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkGlobal.h; sourceTree = "<group>"; };
+		AEDD941D29B0329D00EAA2CA /* EZVideoTalk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalk.h; sourceTree = "<group>"; };
+		AEDD941E29B0329D00EAA2CA /* EZVideoTalkSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkSDK.h; sourceTree = "<group>"; };
+		AEDD941F29B0329D00EAA2CA /* EZRTCSampleHandleManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCSampleHandleManager.h; sourceTree = "<group>"; };
+		AEDD942029B0329D00EAA2CA /* EZBAVParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZBAVParam.h; sourceTree = "<group>"; };
+		AEDD942129B0329D00EAA2CA /* EZRTCVideoEncodeParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRTCVideoEncodeParam.h; sourceTree = "<group>"; };
+		AEDD942229B0329D00EAA2CA /* EZAPDevInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAPDevInfo.h; sourceTree = "<group>"; };
+		AEDD942329B0329D00EAA2CA /* EzvizWatchServerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizWatchServerInfo.h; sourceTree = "<group>"; };
+		AEDD942429B0329D00EAA2CA /* EZDeviceRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordDownloadTask.h; sourceTree = "<group>"; };
+		AEDD942529B0329D00EAA2CA /* EzvizRecordFileInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizRecordFileInfo.h; sourceTree = "<group>"; };
+		AEDD942629B0329D00EAA2CA /* EZDeviceRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordFile.h; sourceTree = "<group>"; };
+		AEDD942729B0329D00EAA2CA /* EZLeaveMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZLeaveMessage.h; sourceTree = "<group>"; };
+		AEDD942829B0329D00EAA2CA /* EZWiFiItemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZWiFiItemInfo.h; sourceTree = "<group>"; };
+		AEDD942929B0329D00EAA2CA /* EZRecordCoverFetcherManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordCoverFetcherManager.h; sourceTree = "<group>"; };
+		AEDD942A29B0329D00EAA2CA /* EZHiddnsDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHiddnsDeviceInfo.h; sourceTree = "<group>"; };
+		AEDD942B29B0329D00EAA2CA /* Sadp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sadp.h; sourceTree = "<group>"; };
+		AEDD942C29B0329D00EAA2CA /* EZDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceInfo.h; sourceTree = "<group>"; };
+		AEDD942D29B0329D00EAA2CA /* EZRecordDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloader.h; sourceTree = "<group>"; };
+		AEDD942E29B0329D00EAA2CA /* EZRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloadTask.h; sourceTree = "<group>"; };
+		AEDD942F29B0329D00EAA2CA /* EZVideoTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTransformer.h; sourceTree = "<group>"; };
+		AEDD943029B0329D00EAA2CA /* EZTokenKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZTokenKit.h; sourceTree = "<group>"; };
+		AEDD943129B0329D00EAA2CA /* EZPMPlayPrivateTokenInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPMPlayPrivateTokenInfo.h; sourceTree = "<group>"; };
+		AEDD943229B0329D00EAA2CA /* EZDetectorInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDetectorInfo.h; sourceTree = "<group>"; };
+		AEDD943329B0329D00EAA2CA /* EZHCNetDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceInfo.h; sourceTree = "<group>"; };
+		AEDD943429B0329D00EAA2CA /* EZCameraInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCameraInfo.h; sourceTree = "<group>"; };
+		AEDD943529B0329D00EAA2CA /* EZCloudRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordFile.h; sourceTree = "<group>"; };
+		AEDD943629B0329D00EAA2CA /* EZCloudRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordDownloadTask.h; sourceTree = "<group>"; };
+		AEDD943729B0329D00EAA2CA /* EZAreaInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAreaInfo.h; sourceTree = "<group>"; };
+		AEDD943829B0329D00EAA2CA /* EZProbeDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZProbeDeviceInfo.h; sourceTree = "<group>"; };
+		AEDD943929B0329D00EAA2CA /* EZDevicePtzAngleInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDevicePtzAngleInfo.h; sourceTree = "<group>"; };
+		AEDD943A29B0329D00EAA2CA /* EZDeviceCloudServiceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceCloudServiceInfo.h; sourceTree = "<group>"; };
+		AEDD943B29B0329D00EAA2CA /* EZVideoQualityInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoQualityInfo.h; sourceTree = "<group>"; };
+		AEDD943C29B0329D00EAA2CA /* EZAlarmInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAlarmInfo.h; sourceTree = "<group>"; };
+		AEDD943D29B0329D00EAA2CA /* EZConfigTokenInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConfigTokenInfo.h; sourceTree = "<group>"; };
+		AEDD943E29B0329D00EAA2CA /* EZSADPDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSADPDeviceInfo.h; sourceTree = "<group>"; };
+		AEDD943F29B0329D00EAA2CA /* EZStorageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStorageInfo.h; sourceTree = "<group>"; };
+		AEDD944029B0329D00EAA2CA /* EZConstants_WifiConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants_WifiConfig.h; sourceTree = "<group>"; };
+		AEE84D3929BABABF0078FDAD /* HDLEZVisitorRecordViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZVisitorRecordViewController.m; sourceTree = "<group>"; };
+		AEE84D3A29BABAC00078FDAD /* HDLEZVisitorRecordViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZVisitorRecordViewController.h; sourceTree = "<group>"; };
+		AEE84D3D29BAC5BC0078FDAD /* HDLEZBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZBaseViewController.m; sourceTree = "<group>"; };
+		AEE84D3E29BAC5BF0078FDAD /* HDLEZBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZBaseViewController.h; sourceTree = "<group>"; };
+		AEE84D4029BAC7F60078FDAD /* HDLEZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZConstants.h; sourceTree = "<group>"; };
+		AEE84D4129BAC7F90078FDAD /* HDLEZConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZConstants.m; sourceTree = "<group>"; };
+		AEE84D4429BACBAA0078FDAD /* HDLEZTopBarView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZTopBarView.m; sourceTree = "<group>"; };
+		AEE84D4529BACBAD0078FDAD /* HDLEZTopBarView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZTopBarView.h; sourceTree = "<group>"; };
+		AEE84D4729BAE2550078FDAD /* HDLEZNoDataView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLEZNoDataView.h; sourceTree = "<group>"; };
+		AEE84D4829BAE2590078FDAD /* HDLEZNoDataView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLEZNoDataView.m; sourceTree = "<group>"; };
 		B95AB87C26984D49007BC8D7 /* HDLAlarmInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HDLAlarmInfo.h; sourceTree = "<group>"; };
 		B95AB87D26984D49007BC8D7 /* HDLAlarmInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HDLAlarmInfo.m; sourceTree = "<group>"; };
 		B95AB88226984DD5007BC8D7 /* YYClassInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YYClassInfo.h; sourceTree = "<group>"; };
@@ -173,43 +251,6 @@
 		B965BE0025EE0B0D00E58AFB /* ResponseData.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ResponseData.m; sourceTree = "<group>"; };
 		B965BE0125EE0B0D00E58AFB /* EZHttpUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHttpUtil.h; sourceTree = "<group>"; };
 		B965BE0225EE0B0D00E58AFB /* ResponseData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResponseData.h; sourceTree = "<group>"; };
-		B99F57BB262D85CF0049A308 /* EZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants.h; sourceTree = "<group>"; };
-		B99F57BC262D85CF0049A308 /* EZHCNetDeviceSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceSDK.h; sourceTree = "<group>"; };
-		B99F57BD262D85CF0049A308 /* EZStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStreamPlayer.h; sourceTree = "<group>"; };
-		B99F57BE262D85CF0049A308 /* EZOpenSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZOpenSDK.h; sourceTree = "<group>"; };
-		B99F57BF262D85CF0049A308 /* EZPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayer.h; sourceTree = "<group>"; };
-		B99F57C0262D85CF0049A308 /* EZGlobalSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZGlobalSDK.h; sourceTree = "<group>"; };
-		B99F57C2262D85CF0049A308 /* EZDeviceVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceVersion.h; sourceTree = "<group>"; };
-		B99F57C3262D85CF0049A308 /* EZUserInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZUserInfo.h; sourceTree = "<group>"; };
-		B99F57C4262D85CF0049A308 /* EZDeviceUpgradeStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceUpgradeStatus.h; sourceTree = "<group>"; };
-		B99F57C5262D85CF0049A308 /* EZAccessToken.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAccessToken.h; sourceTree = "<group>"; };
-		B99F57C6262D85CF0049A308 /* EZPlayerExParamInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayerExParamInfo.h; sourceTree = "<group>"; };
-		B99F57C7262D85CF0049A308 /* EzvizWatchServerInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizWatchServerInfo.h; sourceTree = "<group>"; };
-		B99F57C8262D85CF0049A308 /* EZDeviceRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordDownloadTask.h; sourceTree = "<group>"; };
-		B99F57C9262D85CF0049A308 /* EzvizRecordFileInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EzvizRecordFileInfo.h; sourceTree = "<group>"; };
-		B99F57CA262D85CF0049A308 /* EZDeviceRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceRecordFile.h; sourceTree = "<group>"; };
-		B99F57CB262D85CF0049A308 /* EZLeaveMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZLeaveMessage.h; sourceTree = "<group>"; };
-		B99F57CC262D85CF0049A308 /* EZHiddnsDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHiddnsDeviceInfo.h; sourceTree = "<group>"; };
-		B99F57CD262D85CF0049A308 /* EZVideoTalkView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkView.h; sourceTree = "<group>"; };
-		B99F57CE262D85CF0049A308 /* EZDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDeviceInfo.h; sourceTree = "<group>"; };
-		B99F57CF262D85CF0049A308 /* EZRecordDownloader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloader.h; sourceTree = "<group>"; };
-		B99F57D0262D85CF0049A308 /* EZRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZRecordDownloadTask.h; sourceTree = "<group>"; };
-		B99F57D1262D85CF0049A308 /* EZVideoTransformer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTransformer.h; sourceTree = "<group>"; };
-		B99F57D2262D85CF0049A308 /* EZTokenKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZTokenKit.h; sourceTree = "<group>"; };
-		B99F57D3262D85CF0049A308 /* EZDetectorInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZDetectorInfo.h; sourceTree = "<group>"; };
-		B99F57D4262D85CF0049A308 /* EZHCNetDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceInfo.h; sourceTree = "<group>"; };
-		B99F57D5262D85CF0049A308 /* EZCameraInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCameraInfo.h; sourceTree = "<group>"; };
-		B99F57D6262D85CF0049A308 /* EZCloudRecordFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordFile.h; sourceTree = "<group>"; };
-		B99F57D7262D85CF0049A308 /* EZCloudRecordDownloadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCloudRecordDownloadTask.h; sourceTree = "<group>"; };
-		B99F57D8262D85CF0049A308 /* EZAreaInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAreaInfo.h; sourceTree = "<group>"; };
-		B99F57D9262D85CF0049A308 /* EZProbeDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZProbeDeviceInfo.h; sourceTree = "<group>"; };
-		B99F57DA262D85CF0049A308 /* EZVideoTalkSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkSDK.h; sourceTree = "<group>"; };
-		B99F57DB262D85CF0049A308 /* EZMediaSessionVideoParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZMediaSessionVideoParam.h; sourceTree = "<group>"; };
-		B99F57DC262D85CF0049A308 /* EZVideoQualityInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoQualityInfo.h; sourceTree = "<group>"; };
-		B99F57DD262D85CF0049A308 /* EZAlarmInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZAlarmInfo.h; sourceTree = "<group>"; };
-		B99F57DE262D85CF0049A308 /* EZVideoTalkParam.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZVideoTalkParam.h; sourceTree = "<group>"; };
-		B99F57DF262D85CF0049A308 /* EZSADPDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSADPDeviceInfo.h; sourceTree = "<group>"; };
-		B99F57E0262D85CF0049A308 /* EZStorageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStorageInfo.h; sourceTree = "<group>"; };
 		B9BC92FA25C0FC3500C024FE /* libEZSDK.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libEZSDK.a; sourceTree = BUILT_PRODUCTS_DIR; };
 		B9BC92FD25C0FC3500C024FE /* EZSDK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EZSDK.h; sourceTree = "<group>"; };
 		B9BC92FE25C0FC3500C024FE /* EZSDK.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EZSDK.m; sourceTree = "<group>"; };
@@ -427,7 +468,6 @@
 		B9BC98FA25C0FFBA00C024FE /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = "<group>"; };
 		B9BC98FB25C0FFBA00C024FE /* pq_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pq_compat.h; sourceTree = "<group>"; };
 		B9BC98FD25C0FFBA00C024FE /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libcrypto.a; sourceTree = "<group>"; };
-		B9BC98FE25C0FFBA00C024FE /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libssl.a; sourceTree = "<group>"; };
 		B9BC990025C0FFBA00C024FE /* Aspects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Aspects.h; sourceTree = "<group>"; };
 		B9BC990125C0FFBA00C024FE /* Aspects.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Aspects.m; sourceTree = "<group>"; };
 		B9BC990325C0FFBA00C024FE /* NSDate-Utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDate-Utilities.h"; sourceTree = "<group>"; };
@@ -527,7 +567,6 @@
 		B9BC996E25C0FFBB00C024FE /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
 		B9BC997025C0FFBB00C024FE /* GlobalKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GlobalKit.m; sourceTree = "<group>"; };
 		B9BC997125C0FFBB00C024FE /* GlobalKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalKit.h; sourceTree = "<group>"; };
-		B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libEZOpenSDK.a; sourceTree = "<group>"; };
 		B9EA4E5425C7E805000FFDA2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
 		B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
 		B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
@@ -577,8 +616,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				B9BC99F525C0FFBD00C024FE /* libssl.a in Frameworks */,
-				B9BC9A2B25C0FFBD00C024FE /* libEZOpenSDK.a in Frameworks */,
+				AEDD944129B0329D00EAA2CA /* libEZOpenSDK.a in Frameworks */,
 				B9BC99F425C0FFBD00C024FE /* libcrypto.a in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -586,68 +624,145 @@
 /* End PBXFrameworksBuildPhase section */
 
 /* Begin PBXGroup section */
-		B95AB88126984DD5007BC8D7 /* YYModel */ = {
+		AE5068C329B9CE40009EA09A /* TempPassword */ = {
 			isa = PBXGroup;
 			children = (
-				B95AB88226984DD5007BC8D7 /* YYClassInfo.h */,
-				B95AB88326984DD5007BC8D7 /* YYModel.h */,
-				B95AB88426984DD5007BC8D7 /* NSObject+YYModel.m */,
-				B95AB88526984DD5007BC8D7 /* YYClassInfo.m */,
-				B95AB88626984DD5007BC8D7 /* NSObject+YYModel.h */,
+				AE5068C429B9CED3009EA09A /* Controllers */,
+				AE5068C529B9CEDC009EA09A /* Views */,
+				AE5068C629B9CEE6009EA09A /* Models */,
 			);
-			path = YYModel;
+			path = TempPassword;
 			sourceTree = "<group>";
 		};
-		B99F57BA262D85CF0049A308 /* include */ = {
+		AE5068C429B9CED3009EA09A /* Controllers */ = {
 			isa = PBXGroup;
 			children = (
-				B99F57BB262D85CF0049A308 /* EZConstants.h */,
-				B99F57BC262D85CF0049A308 /* EZHCNetDeviceSDK.h */,
-				B99F57BD262D85CF0049A308 /* EZStreamPlayer.h */,
-				B99F57BE262D85CF0049A308 /* EZOpenSDK.h */,
-				B99F57BF262D85CF0049A308 /* EZPlayer.h */,
-				B99F57C0262D85CF0049A308 /* EZGlobalSDK.h */,
-				B99F57C1262D85CF0049A308 /* modules */,
+				AEE84D3A29BABAC00078FDAD /* HDLEZVisitorRecordViewController.h */,
+				AEE84D3929BABABF0078FDAD /* HDLEZVisitorRecordViewController.m */,
+			);
+			path = Controllers;
+			sourceTree = "<group>";
+		};
+		AE5068C529B9CEDC009EA09A /* Views */ = {
+			isa = PBXGroup;
+			children = (
+				AEC306D029B9F2B5000B3861 /* HDLEZVisitorRecordView.h */,
+				AEC306D129B9F2B5000B3861 /* HDLEZVisitorRecordView.m */,
+				AEC306D329B9F2DA000B3861 /* HDLEZVisitorRecordCell.h */,
+				AEC306D429B9F2DB000B3861 /* HDLEZVisitorRecordCell.m */,
+			);
+			path = Views;
+			sourceTree = "<group>";
+		};
+		AE5068C629B9CEE6009EA09A /* Models */ = {
+			isa = PBXGroup;
+			children = (
+				AE5068D629B9DB5E009EA09A /* HDLEZTemInfoModel.h */,
+				AE5068D729B9DB5E009EA09A /* HDLEZTemInfoModel.m */,
+			);
+			path = Models;
+			sourceTree = "<group>";
+		};
+		AEDD940829B0329D00EAA2CA /* include */ = {
+			isa = PBXGroup;
+			children = (
+				AEDD940929B0329D00EAA2CA /* EZConstants.h */,
+				AEDD940A29B0329D00EAA2CA /* EZHCNetDeviceSDK.h */,
+				AEDD940B29B0329D00EAA2CA /* EZStreamPlayer.h */,
+				AEDD940C29B0329D00EAA2CA /* EZOpenSDK.h */,
+				AEDD940D29B0329D00EAA2CA /* EZConstants_Auth.h */,
+				AEDD940E29B0329D00EAA2CA /* EZPlayer.h */,
+				AEDD940F29B0329D00EAA2CA /* EZGlobalSDK.h */,
+				AEDD941029B0329D00EAA2CA /* modules */,
+				AEDD944029B0329D00EAA2CA /* EZConstants_WifiConfig.h */,
 			);
 			path = include;
 			sourceTree = "<group>";
 		};
-		B99F57C1262D85CF0049A308 /* modules */ = {
+		AEDD941029B0329D00EAA2CA /* modules */ = {
 			isa = PBXGroup;
 			children = (
-				B99F57C2262D85CF0049A308 /* EZDeviceVersion.h */,
-				B99F57C3262D85CF0049A308 /* EZUserInfo.h */,
-				B99F57C4262D85CF0049A308 /* EZDeviceUpgradeStatus.h */,
-				B99F57C5262D85CF0049A308 /* EZAccessToken.h */,
-				B99F57C6262D85CF0049A308 /* EZPlayerExParamInfo.h */,
-				B99F57C7262D85CF0049A308 /* EzvizWatchServerInfo.h */,
-				B99F57C8262D85CF0049A308 /* EZDeviceRecordDownloadTask.h */,
-				B99F57C9262D85CF0049A308 /* EzvizRecordFileInfo.h */,
-				B99F57CA262D85CF0049A308 /* EZDeviceRecordFile.h */,
-				B99F57CB262D85CF0049A308 /* EZLeaveMessage.h */,
-				B99F57CC262D85CF0049A308 /* EZHiddnsDeviceInfo.h */,
-				B99F57CD262D85CF0049A308 /* EZVideoTalkView.h */,
-				B99F57CE262D85CF0049A308 /* EZDeviceInfo.h */,
-				B99F57CF262D85CF0049A308 /* EZRecordDownloader.h */,
-				B99F57D0262D85CF0049A308 /* EZRecordDownloadTask.h */,
-				B99F57D1262D85CF0049A308 /* EZVideoTransformer.h */,
-				B99F57D2262D85CF0049A308 /* EZTokenKit.h */,
-				B99F57D3262D85CF0049A308 /* EZDetectorInfo.h */,
-				B99F57D4262D85CF0049A308 /* EZHCNetDeviceInfo.h */,
-				B99F57D5262D85CF0049A308 /* EZCameraInfo.h */,
-				B99F57D6262D85CF0049A308 /* EZCloudRecordFile.h */,
-				B99F57D7262D85CF0049A308 /* EZCloudRecordDownloadTask.h */,
-				B99F57D8262D85CF0049A308 /* EZAreaInfo.h */,
-				B99F57D9262D85CF0049A308 /* EZProbeDeviceInfo.h */,
-				B99F57DA262D85CF0049A308 /* EZVideoTalkSDK.h */,
-				B99F57DB262D85CF0049A308 /* EZMediaSessionVideoParam.h */,
-				B99F57DC262D85CF0049A308 /* EZVideoQualityInfo.h */,
-				B99F57DD262D85CF0049A308 /* EZAlarmInfo.h */,
-				B99F57DE262D85CF0049A308 /* EZVideoTalkParam.h */,
-				B99F57DF262D85CF0049A308 /* EZSADPDeviceInfo.h */,
-				B99F57E0262D85CF0049A308 /* EZStorageInfo.h */,
+				AEDD941129B0329D00EAA2CA /* EZDeviceVersion.h */,
+				AEDD941229B0329D00EAA2CA /* EZUserInfo.h */,
+				AEDD941329B0329D00EAA2CA /* EZDeviceUpgradeStatus.h */,
+				AEDD941429B0329D00EAA2CA /* EZAccessToken.h */,
+				AEDD941529B0329D00EAA2CA /* EZPlayerExParamInfo.h */,
+				AEDD941629B0329D00EAA2CA /* EZVideoTalk */,
+				AEDD942229B0329D00EAA2CA /* EZAPDevInfo.h */,
+				AEDD942329B0329D00EAA2CA /* EzvizWatchServerInfo.h */,
+				AEDD942429B0329D00EAA2CA /* EZDeviceRecordDownloadTask.h */,
+				AEDD942529B0329D00EAA2CA /* EzvizRecordFileInfo.h */,
+				AEDD942629B0329D00EAA2CA /* EZDeviceRecordFile.h */,
+				AEDD942729B0329D00EAA2CA /* EZLeaveMessage.h */,
+				AEDD942829B0329D00EAA2CA /* EZWiFiItemInfo.h */,
+				AEDD942929B0329D00EAA2CA /* EZRecordCoverFetcherManager.h */,
+				AEDD942A29B0329D00EAA2CA /* EZHiddnsDeviceInfo.h */,
+				AEDD942B29B0329D00EAA2CA /* Sadp.h */,
+				AEDD942C29B0329D00EAA2CA /* EZDeviceInfo.h */,
+				AEDD942D29B0329D00EAA2CA /* EZRecordDownloader.h */,
+				AEDD942E29B0329D00EAA2CA /* EZRecordDownloadTask.h */,
+				AEDD942F29B0329D00EAA2CA /* EZVideoTransformer.h */,
+				AEDD943029B0329D00EAA2CA /* EZTokenKit.h */,
+				AEDD943129B0329D00EAA2CA /* EZPMPlayPrivateTokenInfo.h */,
+				AEDD943229B0329D00EAA2CA /* EZDetectorInfo.h */,
+				AEDD943329B0329D00EAA2CA /* EZHCNetDeviceInfo.h */,
+				AEDD943429B0329D00EAA2CA /* EZCameraInfo.h */,
+				AEDD943529B0329D00EAA2CA /* EZCloudRecordFile.h */,
+				AEDD943629B0329D00EAA2CA /* EZCloudRecordDownloadTask.h */,
+				AEDD943729B0329D00EAA2CA /* EZAreaInfo.h */,
+				AEDD943829B0329D00EAA2CA /* EZProbeDeviceInfo.h */,
+				AEDD943929B0329D00EAA2CA /* EZDevicePtzAngleInfo.h */,
+				AEDD943A29B0329D00EAA2CA /* EZDeviceCloudServiceInfo.h */,
+				AEDD943B29B0329D00EAA2CA /* EZVideoQualityInfo.h */,
+				AEDD943C29B0329D00EAA2CA /* EZAlarmInfo.h */,
+				AEDD943D29B0329D00EAA2CA /* EZConfigTokenInfo.h */,
+				AEDD943E29B0329D00EAA2CA /* EZSADPDeviceInfo.h */,
+				AEDD943F29B0329D00EAA2CA /* EZStorageInfo.h */,
 			);
 			path = modules;
+			sourceTree = "<group>";
+		};
+		AEDD941629B0329D00EAA2CA /* EZVideoTalk */ = {
+			isa = PBXGroup;
+			children = (
+				AEDD941729B0329D00EAA2CA /* EZRTCCameraParam.h */,
+				AEDD941829B0329D00EAA2CA /* EZRTCMediaSessionDefines.h */,
+				AEDD941929B0329D00EAA2CA /* EZVideoTalkSDKDefines.h */,
+				AEDD941A29B0329D00EAA2CA /* EZVideoTalkView.h */,
+				AEDD941B29B0329D00EAA2CA /* EZConferenceClient.h */,
+				AEDD941C29B0329D00EAA2CA /* EZVideoTalkGlobal.h */,
+				AEDD941D29B0329D00EAA2CA /* EZVideoTalk.h */,
+				AEDD941E29B0329D00EAA2CA /* EZVideoTalkSDK.h */,
+				AEDD941F29B0329D00EAA2CA /* EZRTCSampleHandleManager.h */,
+				AEDD942029B0329D00EAA2CA /* EZBAVParam.h */,
+				AEDD942129B0329D00EAA2CA /* EZRTCVideoEncodeParam.h */,
+			);
+			path = EZVideoTalk;
+			sourceTree = "<group>";
+		};
+		AEE84D3C29BAC3CA0078FDAD /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				AEE84D4729BAE2550078FDAD /* HDLEZNoDataView.h */,
+				AEE84D4829BAE2590078FDAD /* HDLEZNoDataView.m */,
+				AEE84D4529BACBAD0078FDAD /* HDLEZTopBarView.h */,
+				AEE84D4429BACBAA0078FDAD /* HDLEZTopBarView.m */,
+				AEE84D3E29BAC5BF0078FDAD /* HDLEZBaseViewController.h */,
+				AEE84D3D29BAC5BC0078FDAD /* HDLEZBaseViewController.m */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
+		B95AB88126984DD5007BC8D7 /* YYModel */ = {
+			isa = PBXGroup;
+			children = (
+				B95AB88626984DD5007BC8D7 /* NSObject+YYModel.h */,
+				B95AB88426984DD5007BC8D7 /* NSObject+YYModel.m */,
+				B95AB88226984DD5007BC8D7 /* YYClassInfo.h */,
+				B95AB88526984DD5007BC8D7 /* YYClassInfo.m */,
+				B95AB88326984DD5007BC8D7 /* YYModel.h */,
+			);
+			path = YYModel;
 			sourceTree = "<group>";
 		};
 		B9BC92F125C0FC3500C024FE = {
@@ -682,6 +797,8 @@
 		B9BC97D325C0FFB600C024FE /* EZ */ = {
 			isa = PBXGroup;
 			children = (
+				AEE84D3C29BAC3CA0078FDAD /* Base */,
+				AE5068C329B9CE40009EA09A /* TempPassword */,
 				B9BC97D425C0FFB600C024FE /* Venders */,
 				B9BC990225C0FFBA00C024FE /* CustomUI */,
 				B9BC991725C0FFBA00C024FE /* EZStartPushParameter.h */,
@@ -1040,7 +1157,6 @@
 			isa = PBXGroup;
 			children = (
 				B9BC98FD25C0FFBA00C024FE /* libcrypto.a */,
-				B9BC98FE25C0FFBA00C024FE /* libssl.a */,
 			);
 			path = lib;
 			sourceTree = "<group>";
@@ -1057,26 +1173,26 @@
 		B9BC990225C0FFBA00C024FE /* CustomUI */ = {
 			isa = PBXGroup;
 			children = (
-				B9BC990325C0FFBA00C024FE /* NSDate-Utilities.h */,
+				B9BC991325C0FFBA00C024FE /* EZCustomTableView.h */,
+				B9BC990925C0FFBA00C024FE /* EZCustomTableView.m */,
+				B9BC990E25C0FFBA00C024FE /* EZQRView.h */,
 				B9BC990425C0FFBA00C024FE /* EZQRView.m */,
 				B9BC990525C0FFBA00C024FE /* EZRecordCell.h */,
-				B9BC990625C0FFBA00C024FE /* HIKLoadPercentView.h */,
-				B9BC990725C0FFBA00C024FE /* HIKLoadViewItem+configPath.h */,
-				B9BC990825C0FFBA00C024FE /* HIKLoadViewItem.h */,
-				B9BC990925C0FFBA00C024FE /* EZCustomTableView.m */,
-				B9BC990A25C0FFBA00C024FE /* UIImageView+EzvizOpenSDK.m */,
-				B9BC990B25C0FFBA00C024FE /* Toast+UIView.m */,
-				B9BC990C25C0FFBA00C024FE /* HIKLoadView.h */,
 				B9BC990D25C0FFBA00C024FE /* EZRecordCell.m */,
-				B9BC990E25C0FFBA00C024FE /* EZQRView.h */,
-				B9BC990F25C0FFBA00C024FE /* NSDate-Utilities.m */,
-				B9BC991025C0FFBA00C024FE /* HIKLoadViewItem+configPath.m */,
+				B9BC990625C0FFBA00C024FE /* HIKLoadPercentView.h */,
 				B9BC991125C0FFBA00C024FE /* HIKLoadPercentView.m */,
-				B9BC991225C0FFBA00C024FE /* UIImageView+EzvizOpenSDK.h */,
-				B9BC991325C0FFBA00C024FE /* EZCustomTableView.h */,
-				B9BC991425C0FFBA00C024FE /* HIKLoadViewItem.m */,
+				B9BC990C25C0FFBA00C024FE /* HIKLoadView.h */,
 				B9BC991525C0FFBA00C024FE /* HIKLoadView.m */,
+				B9BC990825C0FFBA00C024FE /* HIKLoadViewItem.h */,
+				B9BC991425C0FFBA00C024FE /* HIKLoadViewItem.m */,
+				B9BC990725C0FFBA00C024FE /* HIKLoadViewItem+configPath.h */,
+				B9BC991025C0FFBA00C024FE /* HIKLoadViewItem+configPath.m */,
+				B9BC990325C0FFBA00C024FE /* NSDate-Utilities.h */,
+				B9BC990F25C0FFBA00C024FE /* NSDate-Utilities.m */,
 				B9BC991625C0FFBA00C024FE /* Toast+UIView.h */,
+				B9BC990B25C0FFBA00C024FE /* Toast+UIView.m */,
+				B9BC991225C0FFBA00C024FE /* UIImageView+EzvizOpenSDK.h */,
+				B9BC990A25C0FFBA00C024FE /* UIImageView+EzvizOpenSDK.m */,
 			);
 			path = CustomUI;
 			sourceTree = "<group>";
@@ -1097,72 +1213,72 @@
 		B9BC992325C0FFBA00C024FE /* UIViewControllers */ = {
 			isa = PBXGroup;
 			children = (
-				B9BC992F25C0FFBA00C024FE /* EZDeviceTableViewController.h */,
-				B9BC994925C0FFBB00C024FE /* EZDeviceTableViewController.m */,
-				B9BC996025C0FFBB00C024FE /* EZLivePlayViewController.h */,
-				B9BC993925C0FFBA00C024FE /* EZLivePlayViewController.m */,
-				B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
-				B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
-				B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
-				B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
-				B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
-				B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
-				B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */,
-				B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
+				B9BC994525C0FFBB00C024FE /* EZAddByQRCodeViewController.h */,
+				B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */,
+				B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
+				B9BC993F25C0FFBB00C024FE /* EZAPConfigResultViewController.m */,
+				B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
+				B9BC994425C0FFBB00C024FE /* EZAPWiFiConfigViewController.m */,
 				B9BC992525C0FFBA00C024FE /* EZCalendarViewController.h */,
 				B9BC995425C0FFBB00C024FE /* EZCalendarViewController.m */,
+				B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
+				B9BC992625C0FFBA00C024FE /* EZCameraTableViewController.m */,
+				B9BC993225C0FFBA00C024FE /* EZDdnsDeviceTableViewController.h */,
+				B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
+				B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
+				B9BC993825C0FFBA00C024FE /* EZDeviceRestartTipsViewController.m */,
+				B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
+				B9BC993525C0FFBA00C024FE /* EZDeviceResultViewController.m */,
+				B9BC992F25C0FFBA00C024FE /* EZDeviceTableViewController.h */,
+				B9BC994925C0FFBB00C024FE /* EZDeviceTableViewController.m */,
+				B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
+				B9BC992D25C0FFBA00C024FE /* EZDeviceUpgradeViewController.m */,
+				B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
+				B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
+				B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
+				B9BC994225C0FFBB00C024FE /* EZEncryptCameraCell.m */,
+				B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
+				B9BC994325C0FFBB00C024FE /* EZHubDebugViewController.m */,
+				B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
+				B9BC993D25C0FFBB00C024FE /* EZInputSerialViewController.m */,
+				B9BC996025C0FFBB00C024FE /* EZLivePlayViewController.h */,
+				B9BC993925C0FFBA00C024FE /* EZLivePlayViewController.m */,
 				B9BC994B25C0FFBB00C024FE /* EZLocalCameraListViewController.h */,
 				B9BC992E25C0FFBA00C024FE /* EZLocalCameraListViewController.m */,
 				B9BC995725C0FFBB00C024FE /* EZLocalDeviceListViewController.h */,
 				B9BC993425C0FFBA00C024FE /* EZLocalDeviceListViewController.m */,
-				B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
-				B9BC992625C0FFBA00C024FE /* EZCameraTableViewController.m */,
-				B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
-				B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
-				B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
-				B9BC992725C0FFBA00C024FE /* EZWifiConfigViewController.m */,
+				B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
+				B9BC993A25C0FFBA00C024FE /* EZLocalRealPlayViewController.m */,
+				B9BC993E25C0FFBB00C024FE /* EZLocationAlertVCViewController.h */,
+				B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
+				B9BC993B25C0FFBA00C024FE /* EZMessageListViewController.h */,
+				B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
+				B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
+				B9BC993725C0FFBA00C024FE /* EZMessagePhotoViewController.m */,
 				B9BC994E25C0FFBB00C024FE /* EZMessagePlaybackViewController.h */,
 				B9BC992B25C0FFBA00C024FE /* EZMessagePlaybackViewController.m */,
 				B9BC994D25C0FFBB00C024FE /* EZMultiChannelRealPlayVC.h */,
 				B9BC992C25C0FFBA00C024FE /* EZMultiChannelRealPlayVC.m */,
-				B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
-				B9BC992D25C0FFBA00C024FE /* EZDeviceUpgradeViewController.m */,
-				B9BC994825C0FFBB00C024FE /* UIViewController+EZBackPop.h */,
-				B9BC993125C0FFBA00C024FE /* UIViewController+EZBackPop.m */,
-				B9BC993225C0FFBA00C024FE /* EZDdnsDeviceTableViewController.h */,
-				B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
-				B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
-				B9BC993525C0FFBA00C024FE /* EZDeviceResultViewController.m */,
+				B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
+				B9BC994125C0FFBB00C024FE /* EZOfflineCameraCell.m */,
+				B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
+				B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
+				B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
+				B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
+				B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
+				B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
+				B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
+				B9BC992725C0FFBA00C024FE /* EZWifiConfigViewController.m */,
+				B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */,
+				B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
+				B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
+				B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
 				B9BC993625C0FFBA00C024FE /* UIAlertController+TextField.h */,
 				B9BC996325C0FFBB00C024FE /* UIAlertController+TextField.m */,
-				B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
-				B9BC993725C0FFBA00C024FE /* EZMessagePhotoViewController.m */,
-				B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
-				B9BC993825C0FFBA00C024FE /* EZDeviceRestartTipsViewController.m */,
-				B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
-				B9BC993A25C0FFBA00C024FE /* EZLocalRealPlayViewController.m */,
-				B9BC993B25C0FFBA00C024FE /* EZMessageListViewController.h */,
-				B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
 				B9BC993C25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.h */,
 				B9BC995D25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.m */,
-				B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
-				B9BC993D25C0FFBB00C024FE /* EZInputSerialViewController.m */,
-				B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
-				B9BC993E25C0FFBB00C024FE /* EZLocationAlertVCViewController.h */,
-				B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
-				B9BC993F25C0FFBB00C024FE /* EZAPConfigResultViewController.m */,
-				B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
-				B9BC994125C0FFBB00C024FE /* EZOfflineCameraCell.m */,
-				B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
-				B9BC994225C0FFBB00C024FE /* EZEncryptCameraCell.m */,
-				B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
-				B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
-				B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
-				B9BC994325C0FFBB00C024FE /* EZHubDebugViewController.m */,
-				B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
-				B9BC994425C0FFBB00C024FE /* EZAPWiFiConfigViewController.m */,
-				B9BC994525C0FFBB00C024FE /* EZAddByQRCodeViewController.h */,
-				B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */,
+				B9BC994825C0FFBB00C024FE /* UIViewController+EZBackPop.h */,
+				B9BC993125C0FFBA00C024FE /* UIViewController+EZBackPop.m */,
 			);
 			path = UIViewControllers;
 			sourceTree = "<group>";
@@ -1170,6 +1286,8 @@
 		B9BC996F25C0FFBB00C024FE /* Global */ = {
 			isa = PBXGroup;
 			children = (
+				AEE84D4029BAC7F60078FDAD /* HDLEZConstants.h */,
+				AEE84D4129BAC7F90078FDAD /* HDLEZConstants.m */,
 				B95AB87C26984D49007BC8D7 /* HDLAlarmInfo.h */,
 				B95AB87D26984D49007BC8D7 /* HDLAlarmInfo.m */,
 				B9BC997125C0FFBB00C024FE /* GlobalKit.h */,
@@ -1185,8 +1303,8 @@
 		B9BC997425C0FFBC00C024FE /* SDK */ = {
 			isa = PBXGroup;
 			children = (
-				B99F57BA262D85CF0049A308 /* include */,
-				B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */,
+				AEDD940829B0329D00EAA2CA /* include */,
+				AEDD940729B0329D00EAA2CA /* libEZOpenSDK.a */,
 			);
 			path = SDK;
 			sourceTree = "<group>";
@@ -1244,11 +1362,11 @@
 			isa = PBXGroup;
 			children = (
 				B9EA4E6525C7E805000FFDA2 /* MJRefreshBackGifFooter.h */,
-				B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */,
-				B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */,
 				B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */,
-				B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */,
+				B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */,
 				B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */,
+				B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */,
+				B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */,
 			);
 			path = Back;
 			sourceTree = "<group>";
@@ -1373,6 +1491,8 @@
 				B9BC9A2125C0FFBD00C024FE /* EZLocationAlertVCViewController.m in Sources */,
 				B9BC99D025C0FFBD00C024FE /* UIViewController+DDKit.m in Sources */,
 				B9BC99F625C0FFBD00C024FE /* Aspects.m in Sources */,
+				AEE84D4629BACBAD0078FDAD /* HDLEZTopBarView.m in Sources */,
+				AEE84D4929BAE2590078FDAD /* HDLEZNoDataView.m in Sources */,
 				B9EA4E8925C7E806000FFDA2 /* UIView+MJExtension.m in Sources */,
 				B9BC99FA25C0FFBD00C024FE /* Toast+UIView.m in Sources */,
 				B9BC9A1525C0FFBD00C024FE /* EZAPConfigResultViewController.m in Sources */,
@@ -1382,6 +1502,7 @@
 				B9BC9A0A25C0FFBD00C024FE /* EZMultiChannelRealPlayVC.m in Sources */,
 				B9BC99F825C0FFBD00C024FE /* EZCustomTableView.m in Sources */,
 				B9BC9A2625C0FFBD00C024FE /* EZEditViewController.m in Sources */,
+				AEC306D529B9F2DB000B3861 /* HDLEZVisitorRecordCell.m in Sources */,
 				B9BC9A2525C0FFBD00C024FE /* EZOnlineCameraCell.m in Sources */,
 				B9BC999B25C0FFBD00C024FE /* UITableView+FDTemplateLayoutCell.m in Sources */,
 				B9BC9A0325C0FFBD00C024FE /* CameraListCell.m in Sources */,
@@ -1428,6 +1549,7 @@
 				B9BC9A1A25C0FFBD00C024FE /* EZDeviceTableViewController.m in Sources */,
 				B9BC99D625C0FFBD00C024FE /* AFNetworkActivityIndicatorManager.m in Sources */,
 				B9BC99EF25C0FFBD00C024FE /* SDWebImageDownloaderOperation.m in Sources */,
+				AEE84D4329BAC7FE0078FDAD /* HDLEZConstants.m in Sources */,
 				B9BC99BD25C0FFBD00C024FE /* MWGridCell.m in Sources */,
 				B9BC9A0E25C0FFBD00C024FE /* EZLocalDeviceListViewController.m in Sources */,
 				B9BC9A1125C0FFBD00C024FE /* EZDeviceRestartTipsViewController.m in Sources */,
@@ -1437,10 +1559,12 @@
 				B9BC92FF25C0FC3500C024FE /* EZSDK.m in Sources */,
 				B9BC99BA25C0FFBD00C024FE /* MWPhoto.m in Sources */,
 				B9BC9A1D25C0FFBD00C024FE /* EZCalendarViewController.m in Sources */,
+				AEC306D229B9F2B5000B3861 /* HDLEZVisitorRecordView.m in Sources */,
 				B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */,
 				B9BC99E625C0FFBD00C024FE /* SDWebImageManager.m in Sources */,
 				B9BC99EC25C0FFBD00C024FE /* SDWebImageCompat.m in Sources */,
 				B9BC99E125C0FFBD00C024FE /* AFNetworkReachabilityManager.m in Sources */,
+				AEE84D3B29BABAC00078FDAD /* HDLEZVisitorRecordViewController.m in Sources */,
 				B9BC9A1B25C0FFBD00C024FE /* EZWifiTipsViewController.m in Sources */,
 				B9BC99D925C0FFBD00C024FE /* UIActivityIndicatorView+AFNetworking.m in Sources */,
 				B9BC9A0725C0FFBD00C024FE /* EZWifiConfigViewController.m in Sources */,
@@ -1455,6 +1579,7 @@
 				B9BC99D125C0FFBD00C024FE /* NSDate+DDKit.m in Sources */,
 				B9BC9A1625C0FFBD00C024FE /* EZOfflineCameraCell.m in Sources */,
 				B9BC99CC25C0FFBD00C024FE /* UIColor+DDKit.m in Sources */,
+				AEE84D3F29BAC5BF0078FDAD /* HDLEZBaseViewController.m in Sources */,
 				B9BC99DC25C0FFBD00C024FE /* AFURLConnectionOperation.m in Sources */,
 				B9BC99E525C0FFBD00C024FE /* MKAnnotationView+WebCache.m in Sources */,
 				B9BC9A0F25C0FFBD00C024FE /* EZDeviceResultViewController.m in Sources */,
@@ -1466,6 +1591,7 @@
 				B9BC99FD25C0FFBD00C024FE /* HIKLoadViewItem+configPath.m in Sources */,
 				B9BC99E325C0FFBD00C024FE /* MBProgressHUD.m in Sources */,
 				B9EA4E8F25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */,
+				AE5068D829B9DB5E009EA09A /* HDLEZTemInfoModel.m in Sources */,
 				B9BC99BB25C0FFBD00C024FE /* MWTapDetectingView.m in Sources */,
 				B9BC99F725C0FFBD00C024FE /* EZQRView.m in Sources */,
 				B9BC9A1F25C0FFBD00C024FE /* EZSettingViewController.m in Sources */,
@@ -1544,7 +1670,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MACH_O_TYPE = staticlib;
 				MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
 				MTL_FAST_MATH = YES;
@@ -1598,7 +1724,7 @@
 				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
-				IPHONEOS_DEPLOYMENT_TARGET = 10.0;
+				IPHONEOS_DEPLOYMENT_TARGET = 12.0;
 				MACH_O_TYPE = staticlib;
 				MTL_ENABLE_DEBUG_INFO = NO;
 				MTL_FAST_MATH = YES;
diff --git a/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme b/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
index 8643394..0f9297c 100644
--- a/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
+++ b/EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
@@ -31,7 +31,7 @@
       </Testables>
    </TestAction>
    <LaunchAction
-      buildConfiguration = "Release"
+      buildConfiguration = "Debug"
       selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.h b/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.h
new file mode 100755
index 0000000..9ce8321
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.h
@@ -0,0 +1,45 @@
+//
+//  HDLFVBaseViewController.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/2/21.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "HDLEZTopBarView.h"
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZBaseViewController : UIViewController
+
+@property (nonatomic, strong)  HDLEZTopBarView *topBarView;
+
+@property (nonatomic, copy)  NSString *rightBtnTitle;//鍙宠竟鎸夐挳鏍囬
+
+
+/*娣诲姞瀛恦iew
+ */
+-(void)addSubViews;
+
+/*璁剧疆鏍囬鍜岃繑鍥炴寜閽�
+ */
+- (void)setTopBarViewWithTitle:(NSString *)title;
+
+/*杩斿洖
+ */
+- (void)goBack;
+
+//鐐瑰嚮鍙宠竟鎸夐挳
+-(void)clickRightBtn;
+
+/*灞曠ず鏃犳暟鎹彁绀篤iew
+ */
+-(void)showNoDataViewWithMessage:(NSString *)message;
+
+/*闅愯棌鏃犳暟鎹彁绀篤iew
+ */
+-(void)hideNoDataView;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.m b/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.m
new file mode 100755
index 0000000..3364aff
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZBaseViewController.m
@@ -0,0 +1,108 @@
+//
+//  HDLFVBaseViewController.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/2/21.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZBaseViewController.h"
+#import "HDLEZNoDataView.h"
+@interface HDLEZBaseViewController ()
+@property (nonatomic, strong)  HDLEZNoDataView *noDataV;
+
+@end
+
+@implementation HDLEZBaseViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    //娣诲姞鐐瑰嚮灞忓箷鎵嬪娍
+    UITapGestureRecognizer *tapGr = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector (viewTapped)];
+    tapGr.cancelsTouchesInView = NO ;
+    [ self.view addGestureRecognizer:tapGr];
+    
+    self.view.backgroundColor=HDLEZ_COLOR_VIEW_BACKGROUND;
+    
+    [self addSubViews];
+    
+    // Do any additional setup after loading the view.
+}
+
+//璁剧疆鏍囬鍜岃繑鍥炴寜閽�
+- (void)setTopBarViewWithTitle:(NSString *)title{
+    [self.view addSubview:self.topBarView];
+    self.topBarView.titleLabel.text = title;
+}
+
+-(void)addSubViews{
+    //鏃犳暟鎹甐iew
+    _noDataV=[[HDLEZNoDataView alloc] init];
+    [self.view addSubview:_noDataV];
+    [_noDataV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self.view.mas_centerY);
+        make.left.equalTo(self.view).offset(20);
+        make.right.equalTo(self.view).offset(-20);
+        make.height.mas_equalTo(60);
+    }];
+    [_noDataV setHidden:YES];
+
+}
+
+
+/*灞曠ず鏃犳暟鎹彁绀篤iew
+ */
+-(void)showNoDataViewWithMessage:(NSString *)message {
+    [_noDataV setHidden:NO];
+    _noDataV.tipMsg=message;
+}
+
+
+/*闅愯棌鏃犳暟鎹彁绀篤iew
+ */
+-(void)hideNoDataView{
+    [_noDataV setHidden:YES];
+}
+
+//閫�鍑虹紪杈�
+-(void)viewTapped{
+    //閿洏閫�鍑�
+    [self.view endEditing:YES];
+}
+
+
+- (HDLEZTopBarView *)topBarView{
+    if (!_topBarView) {
+        _topBarView = [[HDLEZTopBarView alloc] initWithFrame: CGRectMake(0, 0, HDLEZ_APP_SCREEN_WIDTH, 40)];
+        [_topBarView.backButton addTarget:self action:@selector(goBack) forControlEvents:UIControlEventTouchUpInside];
+    }
+    return _topBarView;
+}
+
+
+/*杩斿洖
+ */
+- (void)goBack{
+//    [self.navigationController popViewControllerAnimated:YES];
+    if ([self.navigationController.viewControllers indexOfObject:self] == 0) {
+        HDLEZLog(@"杩斿洖");
+        [self dismissViewControllerAnimated:YES completion:nil];
+    }
+    else {
+        [self.navigationController popViewControllerAnimated:YES];
+//        [self.navigationController popToRootViewControllerAnimated:YES];
+    }
+}
+
+//璁剧疆鍙宠竟鎸夐挳鏍囬
+-(void)setRightBtnTitle:(NSString *)rightBtnTitle{
+    _rightBtnTitle=rightBtnTitle;
+    _topBarView.rightBtnTitle=rightBtnTitle;
+    [_topBarView.rightButton addTarget:self action:@selector(clickRightBtn) forControlEvents:UIControlEventTouchDown];
+}
+
+//鐐瑰嚮鍙宠竟鎸夐挳
+-(void)clickRightBtn{
+    
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.h b/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.h
new file mode 100755
index 0000000..d7470a7
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.h
@@ -0,0 +1,18 @@
+//
+//  HDLFVNoDataView.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/8.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZNoDataView : UIView
+@property (nonatomic, copy)NSString *tipMsg;//鎻愮ず鍐呭
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.m b/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.m
new file mode 100755
index 0000000..9c1fa4f
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZNoDataView.m
@@ -0,0 +1,43 @@
+//
+//  HDLFVNoDataView.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/8.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZNoDataView.h"
+@interface HDLEZNoDataView()
+@property (nonatomic, strong)UILabel *tipL;//鎻愮ずlable
+
+@end
+@implementation HDLEZNoDataView
+
+-(instancetype)init{
+    self = [super init];
+    if (self) {
+        [self initUI];
+    }
+    
+    return  self;
+}
+
+
+-(void)initUI{
+    _tipL=[[UILabel alloc] init];
+    [self addSubview:_tipL];
+    [_tipL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.left.top.right.bottom.equalTo(self);
+    }];
+    _tipL.textColor=HDLEZ_COLOR_TEXT_INPUT_GRAY;
+    _tipL.font=HDLEZ_Get_FontRegularWithSize(HDLEZ_FontSize_15);
+    _tipL.textAlignment=NSTextAlignmentCenter;
+    _tipL.numberOfLines=2;
+    _tipL.adjustsFontSizeToFitWidth=YES;
+}
+
+-(void)setTipMsg:(NSString *)tipMsg{
+    _tipMsg=tipMsg;
+    _tipL.text=_tipMsg;
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.h b/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.h
new file mode 100755
index 0000000..24b6d02
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.h
@@ -0,0 +1,25 @@
+//
+//  TopBarView.h
+//  Ezviz
+//
+//   Created by 闄堝惎鎵� on 2022/3/23.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZTopBarView : UIView
+
+@property (nonatomic, strong) UIButton      *backButton;//杩斿洖鎸夐挳
+@property (nonatomic, strong) UIButton      *rightButton;//鍙宠竟鎸夐挳
+@property (nonatomic, strong) UILabel       *titleLabel;//鏍囬
+@property (nonatomic, strong) UIView       *bottomLine;//涓嬪垝绾�
+@property (nonatomic, copy)  NSString *rightBtnTitle;//鍙宠竟鎸夐挳鏍囬
+
+
+-(void)setTitle:(NSString *)title;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.m b/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.m
new file mode 100755
index 0000000..4f16694
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLEZTopBarView.m
@@ -0,0 +1,104 @@
+//
+//  TopBarView.m
+//Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/3/23.
+//
+
+#import "HDLEZTopBarView.h"
+
+@interface HDLEZTopBarView()
+
+
+@end
+
+@implementation HDLEZTopBarView
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        self.frame = CGRectMake(0, 0, HDLEZ_APP_SCREEN_WIDTH, HDLEZ_APP_TOP_BAR_HEIGHT);
+        self.backgroundColor=HDLEZ_COLOR_NAV_BACKGROUND;
+        [self addSubview:self.backButton];
+        [self addSubview:self.titleLabel];
+        [self addSubview:self.bottomLine];
+        [self addSubview:self.rightButton];
+        [self.rightButton setHidden:YES];
+    }
+    return self;
+}
+
+- (UIButton*)backButton{
+    if(!_backButton){
+        //buttonWithType UIButtonTypeSystem 璁剧疆tintColor 灏卞彲浠ユ敼鍙樺浘鐗囩殑棰滆壊
+        _backButton = [UIButton buttonWithType:UIButtonTypeSystem];
+        _backButton.frame = CGRectMake(16, HDLEZ_APP_STATUS_BAR_HEIGHT+(40-20)/2, 12, 20);
+        [_backButton setImage:[UIImage imageNamed:@"hdl_ez_ic_nav_back"] forState:UIControlStateNormal];
+        //鎸夐挳鍥炬爣棰滆壊
+        _backButton.tintColor = HDLEZ_COLOR_TEXT;
+    }
+    return _backButton;
+}
+
+- (UILabel *)titleLabel{
+    if (!_titleLabel) {
+        _titleLabel = [self NewLabel:CGRectMake(40, HDLEZ_APP_STATUS_BAR_HEIGHT, HDLEZ_APP_SCREEN_WIDTH - 80, 44) font:HDLEZ_Get_FontRegularWithSize(HDLEZ_FontSize_18) textColor:HDLEZ_COLOR_TEXT text:@""];
+        _titleLabel.textAlignment = NSTextAlignmentCenter;
+    }
+    return _titleLabel;
+}
+
+- (UIView *)bottomLine{
+    if (!_bottomLine) {
+        _bottomLine = [[UIView alloc] initWithFrame:CGRectMake(0, HDLEZ_APP_TOP_BAR_HEIGHT, HDLEZ_APP_SCREEN_WIDTH, 0.5)];
+//        _bottomLine.backgroundColor=HDLFVRGBCOLOR(191, 192, 194,1.0);
+        _bottomLine.backgroundColor=HDLEZ_COLOR_TEXT;
+
+    }
+    return _bottomLine;
+}
+
+- (UIButton*)rightButton{
+    if(!_rightButton){
+        //buttonWithType UIButtonTypeSystem 璁剧疆tintColor 灏卞彲浠ユ敼鍙樺浘鐗囩殑棰滆壊
+//        _rightButton = [UIButton buttonWithType:UIButtonTypeSystem];
+        _rightButton=[[UIButton alloc] init];
+        _rightButton.frame = CGRectMake(HDLEZ_APP_SCREEN_WIDTH-16-60, HDLEZ_APP_STATUS_BAR_HEIGHT, 60, 44);
+        [_rightButton setTitleColor:HDLEZ_COLOR_TEXT_LIGHT_BLUE forState:UIControlStateNormal];
+        _rightButton.titleLabel.font=HDLEZ_Get_FontRegularWithSize(HDLEZ_FontSize_14);
+        //鎸夐挳鍥炬爣棰滆壊
+//        _backButton.tintColor = HDLEZ_COLOR_TEXT;
+    }
+    return _rightButton;
+}
+//
+-(void)backButtonClick{
+    
+}
+
+-(void)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+}
+
+-(UILabel *)NewLabel:(CGRect)frame font:(UIFont *)font textColor:(UIColor *)color text:(NSString *)text{
+    UILabel *label = [[UILabel alloc] initWithFrame:frame];
+    label.backgroundColor = [UIColor clearColor];
+    label.font = font;
+    if (color != nil) {
+        label.textColor = color;
+    }
+    label.text = text;
+    
+    return label;
+}
+
+
+//璁剧疆鍙宠竟鎸夐挳鏍囬
+-(void)setRightBtnTitle:(NSString *)rightBtnTitle{
+    _rightBtnTitle=rightBtnTitle;
+    [_rightButton setHidden:NO];
+    [_rightButton setTitle:rightBtnTitle forState:UIControlStateNormal];
+}
+
+@end
diff --git a/EZSDK/EZSDK/EZ/Base/HDLFVTopBarView.h b/EZSDK/EZSDK/EZ/Base/HDLFVTopBarView.h
new file mode 100644
index 0000000..24b6d02
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Base/HDLFVTopBarView.h
@@ -0,0 +1,25 @@
+//
+//  TopBarView.h
+//  Ezviz
+//
+//   Created by 闄堝惎鎵� on 2022/3/23.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZTopBarView : UIView
+
+@property (nonatomic, strong) UIButton      *backButton;//杩斿洖鎸夐挳
+@property (nonatomic, strong) UIButton      *rightButton;//鍙宠竟鎸夐挳
+@property (nonatomic, strong) UILabel       *titleLabel;//鏍囬
+@property (nonatomic, strong) UIView       *bottomLine;//涓嬪垝绾�
+@property (nonatomic, copy)  NSString *rightBtnTitle;//鍙宠竟鎸夐挳鏍囬
+
+
+-(void)setTitle:(NSString *)title;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.h b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.h
index 7a659f3..7f4034f 100644
--- a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.h
+++ b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.h
@@ -8,7 +8,7 @@
 
 #import <Foundation/Foundation.h>
 #import "ResponseData.h"
-
+#import "HDLEZTemInfoModel.h"
 NS_ASSUME_NONNULL_BEGIN
 
 /// 娌充笢鎺ュ彛缃戠粶璇锋眰宸ュ叿绫�
@@ -24,6 +24,15 @@
  *  @param block 鍥炶皟block
  */
 - (void)getChildToken:(void (^)(NSString *accessToken))block;
+
+/**
+ *  @since 娌充笢娣诲姞璁惧涔嬪墠鏈湴楠岃瘉鐨勬帴鍙o紙鏅鸿兘闂ㄩ攣浣跨敤锛岃皟鐢ㄦ帴鍙e悗杈撳叆闂ㄩ攣瀵嗙爜锛屽啀杩涜缁戝畾锛�
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿皟鐢ㄩ獙璇佹帴鍙f垚鍔�
+ *
+ */
+- (void)verifyLocalLockByHDL:(NSString *)deviceSerial
+                completion:(void (^)(ResponseData *responseData))completion;
 
 /**
  *  @since 娌充笢娣诲姞璁惧鐨勬帴鍙�
@@ -67,6 +76,62 @@
 - (void)readAlarmMessage:(NSArray *)alarmIds
               completion:(void (^)(ResponseData *responseData))completion;
 
+/**
+ *  @since 娌充笢闂ㄩ攣缁堢鎺堟潈鎺ュ彛
+ *  @param password   闂ㄩ攣瀵嗙爜
+ *  @param deviceId   璁惧id
+ *  @param verifyCode   sdk鑾峰彇鐨勬牎楠岀爜
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)authLockByHDL:(NSString *)password
+               deviceId:(NSString *)deviceId
+           verifyCode:(NSString *)verifyCode
+                completion:(void (^)(ResponseData *responseData))completion;
+
+
+/**
+ *  @since 娌充笢杩滅▼寮�閿佹帴鍙�
+ *  @param streamToken 璁惧搴忓垪鍙�
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)remoteOpenByHDL:(NSString *)streamToken
+               deviceId:(NSString *)deviceId
+                completion:(void (^)(ResponseData *responseData))completion;
+
+/**
+ *  @since 娌充笢鑾峰彇涓存椂瀵嗙爜鍒楄〃鎺ュ彛
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)getTempListByHDL:(NSString *)deviceId
+                completion:(void (^)(ResponseData *responseData))completion;
+
+/**
+ *  @since 娌充笢娣诲姞涓存椂瀵嗙爜鎺ュ彛
+ *  @param tempInfo   涓存椂瀵嗙爜淇℃伅
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)addTempByHDL:(HDLEZTemInfoModel *)tempInfo
+            deviceId:(NSString *)deviceId
+                completion:(void (^)(ResponseData *responseData))completion;
+
+/**
+ *  @since 娌充笢鍒犻櫎涓存椂瀵嗙爜鎺ュ彛
+ *  @param extVisitorId   涓存椂瀵嗙爜绱㈠紩
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)deleteTempByHDL:(NSString *)extVisitorId
+            deviceId:(NSString *)deviceId
+                completion:(void (^)(ResponseData *responseData))completion;
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
index d87504f..c9f2102 100644
--- a/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
+++ b/EZSDK/EZSDK/EZ/Global/EZHttpUtil.m
@@ -14,10 +14,16 @@
 
 #define TestRequestHttpsHost @"https://test-gz.hdlcontrol.com"
 #pragma mark API
+#define API_POST_EZ_VerifyLocalLock @"/home-wisdom/platform/yingshi/lock/verifyLocalLock"//钀ょ煶闂ㄩ攣鏈湴楠岃瘉
 #define API_POST_EZ_AddDevice @"/home-wisdom/platform/yingshi/child/addDevice"
 #define API_POST_EZ_GetChildToken @"/home-wisdom/platform/yingshi/child/token"
 #define API_POST_EZ_ChildDelDevice @"/home-wisdom/platform/yingshi/child/deleteDevice"
 #define API_POST_EZ_RefreshToken @"/smart-footstone/member/oauth/login"
+#define API_POST_EZ_LockAuth @"/home-wisdom/platform/yingshi/lock/auth"//钀ょ煶闂ㄩ攣缁堢鎺堟潈
+#define API_POST_EZ_RemoteOpen @"/home-wisdom/platform/yingshi/lock/remote/open/door"//钀ょ煶闂ㄩ攣杩滅▼寮�閿�
+#define API_POST_EZ_TempList @"/home-wisdom/platform/yingshi/lock/temp/list"//钀ょ煶闂ㄤ复鏃跺瘑鐮佸垪琛�
+#define API_POST_EZ_AddTemp @"/home-wisdom/platform/yingshi/lock/temp/add"//钀ょ煶闂ㄦ坊鍔犱复鏃跺瘑鐮�
+#define API_POST_EZ_DeleteTemp @"/home-wisdom/platform/yingshi/lock/temp/delete"//钀ょ煶闂ㄥ垹闄や复鏃跺瘑鐮�
 
 #define API_POST_EZ_GetAlarmList @"/home-wisdom/platform/yingshi/alarm/records"//鑾峰彇鎶ヨ娑堟伅
 #define API_POST_EZ_DeleteAlarmMes @"/home-wisdom/platform/yingshi/alarm/delete"//鍒犻櫎鎶ヨ娑堟伅
@@ -72,6 +78,31 @@
     
 //    return task;
 }
+
+/**
+ *  @since 娌充笢娣诲姞璁惧涔嬪墠鏈湴楠岃瘉鐨勬帴鍙o紙鏅鸿兘闂ㄩ攣浣跨敤锛岃皟鐢ㄦ帴鍙e悗杈撳叆闂ㄩ攣瀵嗙爜锛屽啀杩涜缁戝畾锛�
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿皟鐢ㄩ獙璇佹帴鍙f垚鍔�
+ *
+ */
+- (void)verifyLocalLockByHDL:(NSString *)deviceSerial
+                  completion:(void (^)(ResponseData *responseData))completion{
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceSerial forKey:@"deviceSerial"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue: [NSString stringWithFormat:@"%d",[GlobalKit shareKit].hdlPlatform] forKey:@"platform"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    [self requestHttpsPost:API_POST_EZ_VerifyLocalLock parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
 /**
  *  @since 娌充笢娣诲姞璁惧鐨勬帴鍙�
  *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
@@ -194,6 +225,147 @@
     }];
 }
 
+/**
+ *  @since 娌充笢闂ㄩ攣缁堢鎺堟潈鎺ュ彛
+ *  @param password   闂ㄩ攣瀵嗙爜
+ *  @param deviceId   璁惧id
+ *  @param verifyCode   sdk鑾峰彇鐨勬牎楠岀爜
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ */
+- (void)authLockByHDL:(NSString *)password
+               deviceId:(NSString *)deviceId
+           verifyCode:(NSString *)verifyCode
+           completion:(void (^)(ResponseData *responseData))completion{
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceId forKey:@"deviceId"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue:password forKey:@"password"];
+    [parameters setValue:verifyCode forKey:@"verifyCode"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    NSLog(@"缁堢鎺堟潈鍙傛暟锛�%@",parameters);
+    
+    [self requestHttpsPost:API_POST_EZ_LockAuth parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+    
+}
+
+/**
+ *  @since 娌充笢杩滅▼寮�閿佹帴鍙�
+ *  @param streamToken 璁惧搴忓垪鍙�
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ */
+- (void)remoteOpenByHDL:(NSString *)streamToken
+               deviceId:(NSString *)deviceId
+             completion:(void (^)(ResponseData *responseData))completion{
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceId forKey:@"deviceId"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue:streamToken forKey:@"streamToken"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    NSLog(@"寮�闂ㄥ弬鏁帮細%@",parameters);
+    
+    [self requestHttpsPost:API_POST_EZ_RemoteOpen parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+    
+}
+
+/**
+ *  @since 娌充笢鑾峰彇涓存椂瀵嗙爜鍒楄〃鎺ュ彛
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)getTempListByHDL:(NSString *)deviceId
+              completion:(void (^)(ResponseData *responseData))completion{
+    //2.璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:deviceId forKey:@"deviceId"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    NSLog(@"鑾峰彇涓存椂瀵嗙爜鍒楄〃鍙傛暟锛�%@",parameters);
+    
+    [self requestHttpsPost:API_POST_EZ_TempList parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
+/**
+ *  @since 娌充笢娣诲姞涓存椂瀵嗙爜鎺ュ彛
+ *  @param tempInfo   涓存椂瀵嗙爜淇℃伅
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)addTempByHDL:(HDLEZTemInfoModel *)tempInfo
+            deviceId:(NSString *)deviceId
+          completion:(void (^)(ResponseData *responseData))completion{
+    //璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithDictionary:[tempInfo yy_modelToJSONObject]];
+    [parameters setValue:deviceId forKey:@"deviceId"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    NSLog(@"娣诲姞涓存椂瀵嗙爜鍙傛暟锛�%@",parameters);
+    
+    [self requestHttpsPost:API_POST_EZ_AddTemp parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+}
+
+/**
+ *  @since 娌充笢鍒犻櫎涓存椂瀵嗙爜鎺ュ彛
+ *  @param extVisitorId   涓存椂瀵嗙爜绱㈠紩
+ *  @param deviceId   璁惧id
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘垚鍔�
+ *
+ */
+- (void)deleteTempByHDL:(NSString *)extVisitorId
+            deviceId:(NSString *)deviceId
+             completion:(void (^)(ResponseData *responseData))completion{
+    //璁剧疆璇锋眰鍙傛暟
+    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
+    [parameters setValue:extVisitorId forKey:@"extVisitorId"];
+    [parameters setValue:deviceId forKey:@"deviceId"];
+    [parameters setValue:[NSString stringWithFormat:@"%@",[GlobalKit shareKit].hdlAppKey] forKey:@"appKey"];
+    [parameters setValue:[GlobalKit shareKit].hdlHomeId forKey:@"homeId"];
+    
+    parameters = [self GetSignRequestDictionary:parameters];
+    
+    NSLog(@"鍒犻櫎涓存椂瀵嗙爜鍙傛暟锛�%@",parameters);
+    
+    [self requestHttpsPost:API_POST_EZ_DeleteTemp parameters:parameters completion:^(ResponseData *responseData) {
+        if (completion) {
+            completion (responseData);
+        }
+    }];
+
+}
 
 /// 鍒锋柊token
 /// @param block 缁撴灉
@@ -251,9 +423,10 @@
                         }];
                     }
                 }];
+            }else{
+                completion(responseData);
             }
             
-            completion(responseData);
         }
     }];
 }
@@ -292,7 +465,7 @@
             
             if(responseObject != NULL){
                 //4.瑙f瀽鎷垮埌鐨勫搷搴旀暟鎹�
-                NSLog(@"%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
+                NSLog(@"鏁版嵁杩斿洖%@",[[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]);
                 NSDictionary * outDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
                 responseData = [[ResponseData alloc] initWithDictionary:outDic];
             }
diff --git a/EZSDK/EZSDK/EZ/Global/GlobalKit.h b/EZSDK/EZSDK/EZ/Global/GlobalKit.h
index d8917f4..48842f4 100644
--- a/EZSDK/EZSDK/EZ/Global/GlobalKit.h
+++ b/EZSDK/EZSDK/EZ/Global/GlobalKit.h
@@ -7,7 +7,7 @@
 //
 
 #import <Foundation/Foundation.h>
-
+#import "EZSDK.h"
 //#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
 //#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
 ////涓枃璧板浗鍐咃紝 涓嶆槸涓枃璧版捣澶�
@@ -23,6 +23,7 @@
 @property (nonatomic, copy) NSString *hdlAccessToken;
 @property (nonatomic, copy) NSString *hdlRefreshToken;
 @property (nonatomic, copy) NSString *hdlHomeId;
+@property (nonatomic, copy) NSString *hdlAppKey;
 
 @property (nonatomic, copy) NSString *accessToken;
 @property (nonatomic, copy) NSString *deviceSerialNo;  //璁惧搴忓垪鍙�
@@ -30,6 +31,7 @@
 @property (nonatomic, copy) NSString *deviceVerifyCode; //璁惧楠岃瘉鐮�
 @property (nonatomic, copy) NSMutableDictionary *deviceVerifyCodeBySerial; //鍐呭瓨瀛樺偍锛氳澶囬獙璇佺爜锛圴alue锛夊簭鍒楀彿锛圞ey锛夊瓧鍏�
 @property (nonatomic, copy) NSString *configDevSerial; //鎸囧畾璁惧搴忓垪鍙凤紙鍙�夛級
+@property (nonatomic, assign) HDLEZDeviceType deviceType;//璁惧绫诲瀷
 
 + (instancetype)shareKit;
 
diff --git a/EZSDK/EZSDK/EZ/Global/HDLEZConstants.h b/EZSDK/EZSDK/EZ/Global/HDLEZConstants.h
new file mode 100755
index 0000000..e590f45
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Global/HDLEZConstants.h
@@ -0,0 +1,181 @@
+//
+//  Constants.h
+//  SDKDemo
+//
+//  Created by  Tim Lei on 10/13/15.
+//  Copyright 漏 2015 FreeView. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+//#import "NSBundle+HDLEZ.h"
+
+// 鏃ュ織杈撳嚭
+#ifdef DEBUG
+#define HDLEZLog(fmt, ...)         NSLog((@"- HDLEZSDK: " fmt), ##__VA_ARGS__)
+#else
+#define HDLEZLog(...)
+#endif
+
+//鍥介檯鍖栬瑷�
+#define HDLEZLocallizedString(x, ...)             NSLocalizedString(x, nil)
+
+/* Default Font Name */
+#define HDLEZ_App_Default_Font_Name   @"Helvetica Neue"
+
+/* NavigationBar Style */
+#define HDLEZ_NavigationBar_Bar_Tint_Color    [UIColor colorWithHex:0x3C6DD2 alpha:1.0]
+#define HDLEZ_NavigationBar_Tint_Color    [UIColor colorWithHex:0xFFFFFF alpha:1.0]
+#define HDLEZ_NavigationBar_Foreground_Color   [UIColor colorWithHex:0xFFFFFF alpha:1.0]
+#define HDLEZ_NavigationBar_Title_Shadow_Color    [UIColor colorWithHex:0x0 alpha:1.0]
+#define HDLEZ_NavigationBar_Title_Font_Size   18.0
+
+#define HDLEZ_APP_SCREEN_BOUNDS   [[UIScreen mainScreen] bounds]
+#define HDLEZ_IPhoneX ([UIApplication sharedApplication].statusBarFrame.size.height >= 44)
+#define HDLEZ_APP_SCREEN_HEIGHT   (HDLEZ_APP_SCREEN_BOUNDS.size.height)
+#define HDLEZ_APP_SCREEN_WIDTH    (HDLEZ_APP_SCREEN_BOUNDS.size.width)
+#define HDLEZ_APP_TOP_BAR_HEIGHT    (HDLEZ_IPhoneX ? 88 : 64)
+#define HDLEZ_APP_STATUS_BAR_HEIGHT (HDLEZ_IPhoneX ? 44 : 20)
+#define HDLEZ_APP_TAB_BOTTOM_HEIGHT (HDLEZ_IPhoneX ? 34 : 0)
+
+#define HDLEZHEXCOLOR(rgbValue, a) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16)) / 255.0 green:((float)((rgbValue & 0xFF00) >> 8)) / 255.0 blue:((float)(rgbValue & 0xFF)) / 255.0 alpha:a]
+
+#define HDLEZRGBCOLOR(r,g,b,a) [UIColor colorWithRed:(r)/255 green:(g)/255 blue:(b)/255 alpha:a]
+
+// Design Width&Height
+#define HDLEZDesignWidth 375
+#define HDLEZDesignHeight 667
+#define HDLEZGetRealWidth(W)  W / (HDLEZDesignWidth * 1.0f / APP_SCREEN_WIDTH)
+#define HDLEZGetRealHeight(H)  H / (HDLEZDesignHeight * 1.0f / APP_SCREEN_HEIGHT)
+
+
+// 瀛椾綋棰滆壊*
+
+#define HDLEZ_COLOR_TITLE_BLACK HDLEZHEXCOLOR(0x1B2D4D,1.0)
+
+
+#define HDLEZ_COLOR_TEXT HDLEZHEXCOLOR(0x333333,1.0)
+#define HDLEZ_COLOR_TEXT_HIGLIGHT HDLEZHEXCOLOR(0xFB744A,1.0)
+#define HDLEZ_COLOR_TEXT_WHITE HDLEZHEXCOLOR(0xFFFFFF,1.0)
+#define HDLEZ_COLOR_TEXT_ORANGE HDLEZHEXCOLOR(0xFC744B,1.0)
+#define HDLEZ_COLOR_TEXT_GRAY HDLEZHEXCOLOR(0x666666,1.0)
+#define HDLEZ_COLOR_TEXT_LIGHT_GRAY HDLEZHEXCOLOR(0xC0C7D4,1.0)
+#define HDLEZ_COLOR_TEXT_DETAIL_GRAY HDLEZHEXCOLOR(0x999999,1.0)
+#define HDLEZ_COLOR_TEXT_LIGHT_BLUE HDLEZHEXCOLOR(0x4484F4,1.0)
+#define HDLEZ_COLOR_TEXT_TITLE_GRAY HDLEZHEXCOLOR(0x1B2D4D,1.0)
+#define HDLEZ_COLOR_TEXT_INPUT_GRAY HDLEZHEXCOLOR(0xA5AEBC,1.0)
+#define HDLEZ_COLOR_TEXT_INPUT_PLACEHOLD_GRAY HDLEZHEXCOLOR(0xC0C7D4,1.0)
+#define HDLEZ_COLOR_TEXT_BUTTON_GRAY HDLEZHEXCOLOR(0x798394,1.0)
+
+
+
+//鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_NAV_BACKGROUND HDLEZHEXCOLOR(0xF7F7F7,1.0) //瀵艰埅鏍忚儗鏅鑹�
+#define HDLEZ_COLOR_VIEW_BACKGROUND HDLEZHEXCOLOR(0xF2F3F7,1.0) //鍚庤鍥捐儗鏅鑹�
+#define HDLEZ_COLOR_VIEW_FOREGROUND HDLEZHEXCOLOR(0xFFFFFF,1.0) //鍓嶈鍥捐儗鏅鑹�
+#define HDLEZ_COLOR_BACKGROUND_GRAY HDLEZHEXCOLOR(0x000000,0.4) //鐏拌壊鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_BACKGROUND_BLACK HDLEZHEXCOLOR(0x232323,1.0) //榛戣壊鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_BACKGROUND_ORANGE HDLEZHEXCOLOR(0xFC744B,1.0) //姗欒壊鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_BACKGROUND_IMAGE HDLEZHEXCOLOR(0xE9E9E9,1.0) //鍥剧墖鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_BACKGROUND_BUTTON HDLEZHEXCOLOR(0x4484F4,1.0) //鎸夐挳鑳屾櫙棰滆壊
+#define HDLEZ_COLOR_BACKGROUND_BUTTON_GRAY HDLEZHEXCOLOR(0xC0C7D4,1.0) //鎸夐挳鐏拌儗鏅鑹�
+#define HDLEZ_COLOR_BACKGROUND_LINE HDLEZHEXCOLOR(0xECEDEE,1.0) //涓嬪垝绾胯儗鏅鑹�
+
+
+//瀛椾綋澶у皬
+
+#define HDLEZ_FontSize_15 15   //  灏忔爣棰樺瓧鍙� 15
+#define HDLEZ_FontSize_16 16   //  灏忔爣棰樺瓧鍙� 16
+#define HDLEZ_FontSize_12 12   //  灏忔爣棰樺瓧鍙� 12
+#define HDLEZ_FontSize_10 10   //  灏忔爣棰樺瓧鍙� 10
+#define HDLEZ_FontSize_14 14   //  灏忔爣棰樺瓧鍙� 14
+#define HDLEZ_FontSize_24 24   //  灏忔爣棰樺瓧鍙� 24
+#define HDLEZ_FontSize_18 18   //  灏忔爣棰樺瓧鍙� 18
+
+#define HDLEZ_APP_UIFont            @"PingFangSC-Regular"//鑻规柟-绠� 甯歌浣�
+#define HDLEZ_APP_UIFont_BOLD       @"PingFangSC-Semibold"//鑻规柟-绠� 涓矖浣�
+#define HDLEZ_APP_UIFont_Medium       @"PingFangSC-Medium"//鑻规柟-绠� 涓粦浣�
+
+#define HDLEZ_Get_FontMediumWithSize(s) [UIFont fontWithName:HDLEZ_APP_UIFont_Medium size:s]
+#define HDLEZ_Get_FontRegularWithSize(s) [UIFont fontWithName:HDLEZ_APP_UIFont size:s]
+#define HDLEZ_Get_FontBoldWithSize(s) [UIFont fontWithName:HDLEZ_APP_UIFont_BOLD size:s]
+
+
+
+// 鍒涘缓涓存椂瀵嗙爜閫氱煡
+#define HDLEZNotificationChangeTemP  @"hdlEZNotificationChangeTemP"
+
+//// 浜鸿劯淇℃伅鍙樺寲閫氱煡浜嬩欢d
+//#define HDLEZNotificationChangeFace  @"hdlNotificationChangeFace"
+//
+//// 閫氳瘽缁撴潫閫氱煡
+//#define HDLF_FV_NF_END_CALL  @"hdlNotificationEndCall"
+//
+//// 閫氳瘽寮�濮嬮�氱煡
+//#define HDLF_FV_NF_BEGIN_CALL  @"hdlNotificationBeginCall"
+//
+//
+//// 閫氳瘽绫诲瀷
+//#define HDLF_FV_CALL_TYPE_KEY  @"HDLEZCallTypeKey"
+
+@interface HDLEZConstants : NSObject
+/*鑾峰彇褰撳墠controller
+ */
++(UIViewController *)currentVC;
+
+/*鑾峰彇褰撳墠window
+ */
++(UIWindow*)appWindow;
+
+/*鎴浘
+ */
++(UIImage *)captureImageFromView:(UIView *)view;
+
+/*淇濆瓨鍥剧墖鍒扮浉鍐�
+ */
++(void)saveImageToPhotosAlbum:(UIImage *)savedImage;
+
+/**
+ *  鐢熸垚浜岀淮鐮�
+ */
++ (UIImage *)creatCIQRCodeImage:(NSString *)dataStr;
+
+/*鑾峰彇鐗瑰畾鏃堕棿鏍煎紡鐨勬椂闂村瓧绗︿覆
+ */
++(NSString *)timeStrWithFormate:(NSString *)formate data:(NSDate *)date;
+
+/**
+ 璁$畻鏂囧瓧楂樺害锛屽厑璁告崲琛岃绠�
+
+ @param fontSize 鏂囧瓧澶у皬
+ @param widht 鏂囧瓧瀹藉害
+ @param text 鏂囧瓧鍐呭
+ @return 杩斿洖鏂囧瓧鐨勯珮搴�
+ */
++(CGFloat)sizeLineFeedWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht text:(NSString*)text;
+
+
+
+/**
+ *  淇濆瓨鏁版嵁
+ */
++ (void)saveObject:(id )obj key:(NSString*)key;
+
+/**
+ *  鑾峰彇鏁版嵁
+ */
++ (id)getObjectBykey:(NSString*)key;
+
+/*灏忎簬涓や綅鏁板墠闈㈣嚜鍔ㄥ~琛�0
+ */
++(NSString *)autoFillZero:(NSInteger)value;
+
+
+/*鏃堕棿瀵规瘮
+ */
++ (int)compareOneDay:(NSDate *)oneDay withAnotherDay:(NSDate *)anotherDay;
+
+/*鏃堕棿鏍煎紡杞崲
+ */
++(NSString *)turnDateString:(NSString*)dateString toFormater:(NSString*)formater;
+
+@end
diff --git a/EZSDK/EZSDK/EZ/Global/HDLEZConstants.m b/EZSDK/EZSDK/EZ/Global/HDLEZConstants.m
new file mode 100755
index 0000000..c10fa7d
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Global/HDLEZConstants.m
@@ -0,0 +1,290 @@
+//
+//  Constants.m
+//  SDKDemo
+//
+//  Created by  Tim Lei on 10/13/15.
+//  Copyright 漏 2015 FreeView. All rights reserved.
+//
+
+#import "HDLEZConstants.h"
+#import <Photos/Photos.h>
+@implementation HDLEZConstants
+/*鑾峰彇褰撳墠controller
+ */
++(UIViewController *)currentVC{
+    UIViewController *currentVC;
+    UIViewController *rootVC=[self appWindow].rootViewController;
+    if ([rootVC presentedViewController]) {
+        rootVC=[rootVC presentedViewController];
+    }
+    if ([rootVC isKindOfClass:[UITabBarController class]]) {
+        currentVC=[(UITabBarController*)rootVC selectedViewController];
+    }else if([rootVC isKindOfClass:[UINavigationController class]]){
+        currentVC=[(UINavigationController*)rootVC visibleViewController];
+    }else{
+        currentVC=rootVC;
+    }
+    return currentVC;
+}
+
+/*鑾峰彇褰撳墠window
+ */
++(UIWindow*)appWindow{
+    UIWindow *window;
+    if (@available(iOS 13.0, *)) {
+        HDLEZLog(@"windows:%@",[UIApplication sharedApplication].windows);
+        window = [UIApplication sharedApplication].windows[0];
+        if (!window) {
+            window=[UIApplication sharedApplication].delegate.window;
+        }
+    } else {
+        window = [UIApplication sharedApplication].delegate.window;
+    }
+    return window;
+}
+
+
++(UIImage *)captureImageFromView:(UIView *)view{
+
+//    // currentView 褰撳墠鐨剉iew  鍒涘缓涓�涓熀浜庝綅鍥剧殑鍥惧舰涓婁笅鏂囧苟鎸囧畾澶у皬涓�
+//    UIGraphicsBeginImageContextWithOptions(CGSizeMake(view.frame.size.width, view.frame.size.height), NO, 0.0);
+//    // renderInContext鍛堢幇鎺ュ彈鑰呭強鍏跺瓙鑼冨洿鍒版寚瀹氱殑涓婁笅鏂�
+//    [view.layer renderInContext:UIGraphicsGetCurrentContext()];
+//    // 杩斿洖涓�涓熀浜庡綋鍓嶅浘褰笂涓嬫枃鐨勫浘鐗�
+//    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
+//    // 绉婚櫎鏍堥《鐨勫熀浜庡綋鍓嶄綅鍥剧殑鍥惧舰涓婁笅鏂�
+//    UIGraphicsEndImageContext();
+//    // 淇濆瓨鍥剧墖
+//    //UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
+//    return viewImage;
+    
+    UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0.0);
+
+    // Render our snapshot into the image context
+
+    [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:NO];
+
+    // Grab the image from the context
+
+    UIImage *complexViewImage = UIGraphicsGetImageFromCurrentImageContext();
+
+    // Finish using the context
+
+    UIGraphicsEndImageContext();
+
+    return complexViewImage;
+
+
+}
+
+#pragma 淇濆瓨鍥剧墖鍒扮浉鍐�
++(void)saveImageToPhotosAlbum:(UIImage *)savedImage
+{
+    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
+    if (status == PHAuthorizationStatusNotDetermined)
+    {
+        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
+            if(status == PHAuthorizationStatusAuthorized)
+            {
+                UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), NULL);
+            }
+        }];
+    }
+    else
+    {
+        if (status == PHAuthorizationStatusAuthorized)
+        {
+            UIImageWriteToSavedPhotosAlbum(savedImage, self, @selector(imageSavedToPhotosAlbum:didFinishSavingWithError:contextInfo:), NULL);
+        }
+    }
+}
+
+// 淇濆瓨鍒扮浉鍐屾寚瀹氬洖璋冩柟娉�
++(void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo
+{
+    NSString *message = nil;
+    NSString *languageName = [[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0];
+    NSString *saveToTheAlbumsStr,*operationFailedStr,*tipStr,*okStr;
+    // 绠�浣撲腑鏂�
+    if ([languageName rangeOfString:@"zh-Hans"].location != NSNotFound) {
+        tipStr = @"鎻愮ず";
+        saveToTheAlbumsStr = @"宸蹭繚瀛樿嚦鎵嬫満鐩稿唽.";
+        operationFailedStr = @"鎿嶄綔澶辫触";
+        okStr = @"纭";
+        
+    }else{
+        tipStr = @"Prompt";
+        okStr = @"OK";
+        saveToTheAlbumsStr = @"Saved to the albums.";
+        operationFailedStr = @"Operation failed.";
+
+    }
+    if (!error) {
+        message = saveToTheAlbumsStr;
+    }
+    else
+    {
+        message = operationFailedStr;
+    }
+    
+    [self showUIAlertView:message title:tipStr cancelTitle:okStr];
+}
+
++(void)showUIAlertView:(NSString *)mes title:(NSString *)title cancelTitle:(NSString *)cancleTitle
+{
+    UIAlertController *alertController = [UIAlertController alertControllerWithTitle:title message:mes preferredStyle:UIAlertControllerStyleAlert];
+    [alertController addAction:[UIAlertAction actionWithTitle:cancleTitle style:UIAlertActionStyleCancel handler:nil]];
+    [[self topMostController] presentViewController:alertController animated:YES completion:nil];
+    
+}
+
++(UIViewController *) topMostController {
+    UIViewController*topController ;
+    if ([UIApplication sharedApplication].delegate.window) {
+        topController= [UIApplication sharedApplication].delegate.window.rootViewController;
+    }else{
+        topController=[self appWindow].rootViewController;
+    }
+    while(topController.presentedViewController){
+        topController=topController.presentedViewController;
+    }
+    return topController;
+}
+
+/**
+ *  鐢熸垚浜岀淮鐮�
+ */
++ (UIImage *)creatCIQRCodeImage:(NSString *)dataStr{
+    //鍒涘缓杩囨护鍣紝杩欓噷鐨凘"CIQRCodeGenerator"鏄浐瀹氱殑
+    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
+    //鎭㈠榛樿璁剧疆
+    [filter setDefaults];
+    //缁欒繃婊ゅ櫒娣诲姞鏁版嵁
+    NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
+    //value蹇呴』鏄疦SData绫诲瀷
+    [filter setValue:data forKeyPath:@"inputMessage"];
+    //鐢熸垚浜岀淮鐮�
+    CIImage *outputImage = [filter outputImage];
+    //鏄剧ず浜岀淮鐮�
+    return [self creatNonInterpolatedUIImageFormCIImage:outputImage withSize:100.0];
+}
+
++ (UIImage *)creatNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat)size {
+    CGRect extent = CGRectIntegral(image.extent);
+    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
+    //鍒涘缓bitmap
+    size_t width = CGRectGetWidth(extent) * scale;
+    size_t height = CGRectGetHeight(extent) * scale;
+    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
+    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
+    CIContext *context = [CIContext contextWithOptions:nil];
+    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
+    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
+    CGContextScaleCTM(bitmapRef, scale, scale);
+    CGContextDrawImage(bitmapRef, extent, bitmapImage);
+    //淇濆瓨bitmap鍥剧墖
+    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
+    CGContextRelease(bitmapRef);
+    CGImageRelease(bitmapImage);
+    return [UIImage imageWithCGImage:scaledImage];
+}
+
+/*鑾峰彇鐗瑰畾鏃堕棿鏍煎紡鐨勬椂闂村瓧绗︿覆
+ */
++(NSString *)timeStrWithFormate:(NSString *)formate data:(NSDate *)date{
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:formate];
+    NSString *dateString = [dateFormatter stringFromDate:date];
+    return dateString;
+}
+
+/**
+ 璁$畻鏂囧瓧楂樺害锛屽厑璁告崲琛岃绠�
+
+ @param fontSize 鏂囧瓧澶у皬
+ @param widht 鏂囧瓧瀹藉害
+ @param text 鏂囧瓧鍐呭
+ @return 杩斿洖鏂囧瓧鐨勯珮搴�
+ */
++(CGFloat)sizeLineFeedWithFont:(CGFloat)fontSize textSizeWidht:(CGFloat)widht text:(NSString*)text{
+    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, widht, 0)];
+    textView.text = text;
+    textView.font = [UIFont systemFontOfSize:fontSize];
+    CGSize size = CGSizeMake(widht, MAXFLOAT);
+    CGSize constraint = [textView sizeThatFits:size];
+    return constraint.height;
+}
+
+/**
+ *  淇濆瓨鏁版嵁
+ */
++ (void)saveObject:(id )obj key:(NSString*)key{
+    NSUserDefaults *UD=[NSUserDefaults standardUserDefaults];
+    [UD setObject:obj forKey:key];
+    [UD synchronize];
+}
+
+/**
+ *  鑾峰彇鏁版嵁
+ */
++ (id)getObjectBykey:(NSString*)key{
+    NSUserDefaults *UD=[NSUserDefaults standardUserDefaults];
+    return [UD objectForKey:key];
+}
+
+/*灏忎簬涓や綅鏁板墠闈㈣嚜鍔ㄥ~琛�0
+ */
++(NSString *)autoFillZero:(NSInteger)value;{
+    NSString *result=@"";
+    if (value<10) {
+        result=[NSString stringWithFormat:@"0%ld",(long)value];
+    }else{
+        result=[NSString stringWithFormat:@"%ld",(long)value];
+    }
+    return result;
+}
+
+/*鏃堕棿瀵规瘮
+ */
++ (int)compareOneDay:(NSDate *)oneDay withAnotherDay:(NSDate *)anotherDay
+{
+    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+    [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
+    NSString *oneDayStr = [dateFormatter stringFromDate:oneDay];
+    NSString *anotherDayStr = [dateFormatter stringFromDate:anotherDay];
+    NSDate *dateA = [dateFormatter dateFromString:oneDayStr];
+    NSDate *dateB = [dateFormatter dateFromString:anotherDayStr];
+    NSComparisonResult result = [dateA compare:dateB];
+    NSLog(@"oneDay : %@, anotherDay : %@", oneDay, anotherDay);
+    if (result == NSOrderedDescending) {
+        //鍦ㄦ寚瀹氭椂闂村墠闈� 杩囦簡鎸囧畾鏃堕棿 杩囨湡
+        return 1;
+    }
+    else if (result == NSOrderedAscending){
+        //娌¤繃鎸囧畾鏃堕棿 娌¤繃鏈�
+        //NSLog(@"Date1 is in the past");
+        return -1;
+    }
+    //鍒氬ソ鏃堕棿涓�鏍�.
+    //NSLog(@"Both dates are the same");
+    return 0;
+    
+}
+
+/*鏃堕棿鏍煎紡杞崲
+ */
++(NSString *)turnDateString:(NSString*)dateString toFormater:(NSString*)formater{
+    //鍘熷鏃堕棿
+    NSDateFormatter *originDateFormatter = [[NSDateFormatter alloc] init];
+    [originDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
+    NSDate *oringinDate = [originDateFormatter dateFromString:dateString];
+    
+    //杞崲鐩爣鏃堕棿
+    NSDateFormatter *targetDateFormatter = [[NSDateFormatter alloc] init];
+    [targetDateFormatter setDateFormat:formater];
+    NSString *targetDateStr = [targetDateFormatter stringFromDate:oringinDate];
+    
+
+    return targetDateStr;
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/PrefixHeader.pch b/EZSDK/EZSDK/EZ/PrefixHeader.pch
index 96194c9..056c09a 100644
--- a/EZSDK/EZSDK/EZ/PrefixHeader.pch
+++ b/EZSDK/EZSDK/EZ/PrefixHeader.pch
@@ -19,6 +19,7 @@
 //#import "NSDate+DateTools.h"
 #import "Masonry.h"
 #import "DDKit.h"
+#import "YYModel.h"
 
 #import "EZOpenSDK.h"
 #import "EZGlobalSDK.h"
@@ -26,5 +27,6 @@
 #import "EZHttpUtil.h"
 #import "EZSDK.h"
 
+#import "HDLEZConstants.h"
 
 #endif /* PrefixHeader_pch */
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.h b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.h
new file mode 100755
index 0000000..eaeb1eb
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.h
@@ -0,0 +1,18 @@
+//
+//  HDLFVVisitorRecordViewController.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZBaseViewController.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZVisitorRecordViewController : HDLEZBaseViewController
+@property (nonatomic, copy)NSString *deviceId;//璁惧id
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.m b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.m
new file mode 100755
index 0000000..5b0c31d
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLEZVisitorRecordViewController.m
@@ -0,0 +1,88 @@
+//
+//  HDLFVVisitorRecordViewController.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZVisitorRecordViewController.h"
+#import "HDLEZVisitorRecordView.h"
+//#import "HDLFVTempPassViewController.h"
+//#import "HDLFVHttpRequestManager.h"
+@interface HDLEZVisitorRecordViewController ()<HDLEZVisitorRecordViewDelegate>
+@property (nonatomic, strong) HDLEZVisitorRecordView *visitorRecordV;
+
+@end
+
+@implementation HDLEZVisitorRecordViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setTopBarViewWithTitle:HDLEZLocallizedString(@"device_temp_pass")];
+    [self.topBarView.bottomLine setHidden:YES];
+
+    //娉ㄥ唽涓存椂瀵嗙爜鍒楄〃鍙樺寲閫氱煡
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationChangeTemP) name:HDLEZNotificationChangeTemP object:nil];
+    // Do any additional setup after loading the view.
+}
+// dealloc
+- (void)dealloc{
+    HDLEZLog(@"delloc");
+    //绉婚櫎閫氱煡
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+//涓存椂瀵嗙爜鍙樺寲閫氱煡
+-(void)notificationChangeTemP{
+    [self getTemPList];
+}
+
+-(void)addSubViews{
+    
+    //
+    _visitorRecordV=[[HDLEZVisitorRecordView alloc] init];
+    [self.view addSubview:_visitorRecordV];
+    [_visitorRecordV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(HDLEZ_APP_TOP_BAR_HEIGHT);
+        make.left.bottom.right.equalTo(self.view);
+    }];
+    _visitorRecordV.choseDelegate=self;
+    
+    [self getTemPList];
+}
+
+/*鑾峰彇涓存椂瀵嗙爜鍒楄〃
+ */
+-(void)getTemPList{
+    __weak __typeof(self)weakSelf = self;
+    [[EZHttpUtil sharedManager] getTempListByHDL:self.deviceId completion:^(ResponseData * _Nonnull responseData) {
+        HDLEZLog(@"涓存椂瀵嗙爜鍒楄〃锛�%@",responseData.data);
+        weakSelf.visitorRecordV.temPList=[NSArray yy_modelArrayWithClass:[HDLEZTemInfoModel class] json:responseData.data];
+    }];
+}
+
+/*鏃犱复鏃跺瘑鐮佹暟鎹�
+ */
+-(void)noData:(BOOL)isNodata{
+//    if (isNodata) {
+//        [_visitorRecordV setHidden:YES];
+//        [self showNoDataViewWithMessage:HDLEZLocallizedString(@"No Data")];
+////        [_noDataV setHidden:NO];
+//    }else{
+//        [_visitorRecordV setHidden:NO];
+//        [self hideNoDataView];
+////        [_noDataV setHidden:YES];
+//    }
+}
+
+
+
+-(void)visitorRecordViewdidSelectRecord:(HDLEZTemInfoModel *)tempDetailModel{
+//    HDLFVTempPassViewController *vc=[[HDLFVTempPassViewController alloc] init];
+//    vc.temPassType=HDLFVTemPassType_Detail;
+//    vc.temPdetailModel=tempDetailModel;
+//    vc.isShowDetail=YES;
+//    [self.navigationController pushViewController:vc animated:YES ];
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.h b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.h
new file mode 100755
index 0000000..7e90976
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.h
@@ -0,0 +1,26 @@
+//
+//  HDLFVTempPassViewController.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/22.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLFVBaseViewController.h"
+//#import "HDLFVCreateTemPassView.h"
+#import "HDLFVTemPDetailModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLFVTempPassViewController : HDLFVBaseViewController
+@property(nonatomic,assign)HDLFVTemPassType temPassType;//涓存椂瀵嗙爜绫诲瀷
+
+@property(nonatomic,copy)NSString *deviceId;//璁惧id
+
+@property(nonatomic,strong)HDLFVTemPDetailModel *temPdetailModel;//涓存椂瀵嗙爜model
+
+@property(nonatomic,assign)BOOL isShowDetail;//鍒ゆ柇鏄惁浠庡垪琛ㄧ偣鍑昏繘鏉ョ湅璇︽儏鐨勶紙鐢ㄤ簬鍒ゆ柇鍙栨秷鍚庢槸鍚﹂渶瑕佽嚜鍔ㄨ繑鍥炲垪琛級
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.m b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.m
new file mode 100755
index 0000000..94ecf5b
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Controllers/HDLFVTempPassViewController.m
@@ -0,0 +1,339 @@
+//
+//  HDLFVTempPassViewController.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/22.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLFVTempPassViewController.h"
+#import "HDLFVCreateTemPassView.h"
+#import "HDLFVCommonButton.h"
+#import "PGDatePickManager.h"
+#import "HDLFVImageDetail.h"
+#import "HDLFVVisitorRecordViewController.h"
+#import "HDLFVAlert.h"
+#import "HDLFVAddTemPassModel.h"
+#import "HDLFVCancleTemPModel.h"
+#import "HDLFVHttpRequestManager.h"
+
+typedef enum {
+    HDLFVPickTimeType_Effective=0, //鐢熸晥
+    HDLFVPickTimeType_Expire=1,//澶辨晥
+}HDLFVPickTimeType;
+
+@interface HDLFVTempPassViewController ()<PGDatePickerDelegate>
+@property(nonatomic,strong)HDLFVCreateTemPassView *tempView; //涓存椂瀵嗙爜view
+@property (nonatomic, strong)HDLFVCommonButton *sureBtn;//纭鎸夐挳
+
+@property(nonatomic,strong)PGDatePicker *datePicker;//鏃堕棿閫夋嫨鍣�
+
+@property (nonatomic, copy)NSString *selectedEffectiveTime;//宸查�夋嫨鐨勭敓鏁堟椂闂�
+@property (nonatomic, copy)NSString *selectedExpireTime;//宸查�夋嫨鐨勫け鏁堟椂闂�
+
+@property(nonatomic,assign)HDLFVPickTimeType pickTimeType;//閫夋嫨鏃堕棿绫诲瀷
+
+@property(nonatomic,strong)HDLFVImageDetail * imgD;//
+
+@property(nonatomic,strong)HDLFVAddTemPassModel *addTemPModel;//娣诲姞涓存椂瀵嗙爜model
+@property(nonatomic,strong)HDLFVCancleTemPModel *cancleTemPModel;//鍙栨秷涓存椂瀵嗙爜model
+
+
+@end
+
+@implementation HDLFVTempPassViewController
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    [self setTopBarViewWithTitle:HDLFVLocalizedString(@"Visitor Invitation")];
+    
+    if (self.temPassType==HDLFVTemPassType_Generate) {
+        self.rightBtnTitle=HDLFVLocalizedString(@"Visitor Record");
+    }
+
+    // Do any additional setup after loading the view.
+}
+
+-(void)addSubViews{
+    
+    //纭娣诲姞鎸夐挳
+    _sureBtn=[[HDLFVCommonButton alloc] init];
+    [self.view addSubview:_sureBtn];
+    [_sureBtn mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerX.equalTo(self.view.mas_centerX);
+        make.bottom.equalTo(self.view).offset(-APP_TAB_BOTTOM_HEIGHT-20);
+        make.height.mas_equalTo(44);
+        make.width.mas_equalTo(HDLFVGetRealWidth(220));
+    }];
+    if (self.temPassType==HDLFVTemPassType_Detail) {
+        _sureBtn.titleName=HDLFVLocalizedString(@"Cancle Visitor Credentials");
+    }else{
+        _sureBtn.titleName=HDLFVLocalizedString(@"Generate Visitor Credentials");
+    }
+    [_sureBtn addTarget:self action:@selector(sure) forControlEvents:UIControlEventTouchDown];
+    
+
+    
+    //涓存椂瀵嗙爜view
+    _tempView=[[HDLFVCreateTemPassView alloc] init];
+    [self.view addSubview:_tempView];
+    [_tempView mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.view).offset(APP_TOP_BAR_HEIGHT);
+        make.left.right.equalTo(self.view);
+        make.bottom.equalTo(_sureBtn.mas_top).offset(-5);
+    }];
+    _tempView.temPassType=self.temPassType;
+    WeakSelf(weakSelf);
+    _tempView.validTimeV.clickBtn = ^{
+        [weakSelf selectEffectiveTime];
+    };
+    
+    _tempView.expireTimeV.clickBtn = ^{
+        [weakSelf selectExpirationTime];
+    };
+    
+    _tempView.temPassInputV.clickBtn = ^{
+        [weakSelf genarateTemPass];
+    };
+    
+    _tempView.clickQRCodeBlock = ^(UIImage * _Nonnull image) {
+        [weakSelf tapQRCode:image];
+    };
+    
+    _tempView.longTapQRCodeBlock = ^(UIImage * _Nonnull image) {
+        [weakSelf longTapQRCode:image];
+
+    };
+    
+    //灞曠ず涓存椂鍑瘉璇︽儏
+    if (self.temPassType==HDLFVTemPassType_Detail) {
+        
+        _tempView.phoneInputV.inputTextF.text=self.temPdetailModel.phone;
+        _tempView.temPassInputV.inputTextF.text=self.temPdetailModel.tempPwd;
+//        _tempView.useTimesInputV.inputTextF.text=self.temPdetailModel.useCount;
+        _tempView.validTimeV.contentL.text=[Constants turnDateString:self.temPdetailModel.validBeginTime toFormater:[NSString stringWithFormat:@"yyyy%@MM%@dd%@ HH:mm",HDLFVLocalizedString(@"Y"),HDLFVLocalizedString(@"M"),HDLFVLocalizedString(@"D")]];
+        _tempView.expireTimeV.contentL.text=[Constants turnDateString:self.temPdetailModel.validEndTime toFormater:[NSString stringWithFormat:@"yyyy%@MM%@dd%@ HH:mm",HDLFVLocalizedString(@"Y"),HDLFVLocalizedString(@"M"),HDLFVLocalizedString(@"D")]];
+
+        _tempView.QRCodeImageV.image=[Constants creatCIQRCodeImage:_tempView.temPassInputV.inputTextF.text];
+        self.selectedEffectiveTime=self.temPdetailModel.validBeginTime;
+        self.selectedExpireTime=self.temPdetailModel.validEndTime;
+        [_tempView showQRCode:YES];
+        HDLFVLog(@"tempId鍚�:%@",self.temPdetailModel.ID);
+
+        //鍒ゆ柇鏄惁杩囨湡
+//        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
+//          [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"];
+//        NSDate *date = [dateFormatter dateFromString:self.temPdetailModel.validEndTime];
+//        if ([Constants compareOneDay:[NSDate date] withAnotherDay:date]==1) {
+//            _tempView.isInvalid=YES;
+//        }
+        
+        if (!self.temPdetailModel.status) {
+            HDLFVLog(@"瀵嗙爜鏃犳晥");
+            _tempView.isInvalid=YES;
+            [_sureBtn setHidden:YES];
+        }
+
+    }
+    
+}
+
+//鐐瑰嚮瀵艰埅鏍忓彸杈规寜閽�
+-(void)clickRightBtn{
+    HDLFVLog(@"鐐瑰嚮浜嗗彸杈规寜閽�");
+    HDLFVVisitorRecordViewController *vc=[[HDLFVVisitorRecordViewController alloc] init];
+    [self.navigationController setNavigationBarHidden:YES];
+    [self.navigationController pushViewController:vc animated:YES];
+}
+
+
+/*鐐瑰嚮浜嗙敓鎴愪复鏃跺瘑鐮�
+ */
+-(void)genarateTemPass{
+    HDLFVLog(@"鐐瑰嚮鐢熸垚鍔ㄦ�佺爜");
+    _tempView.temPassInputV.inputTextF.text=[FVTool randomNumerWithCount:6];
+
+}
+
+/*鐐瑰嚮浜嗛�夋嫨鐢熸晥鏃堕棿
+ */
+-(void)selectEffectiveTime{
+    self.pickTimeType=HDLFVPickTimeType_Effective;
+    [self showDatePicker];
+}
+
+/*鐐瑰嚮浜嗛�夋嫨澶辨晥鏃堕棿
+ */
+-(void)selectExpirationTime{
+    self.pickTimeType=HDLFVPickTimeType_Expire;
+    [self showDatePicker];
+
+}
+
+/*鐐瑰嚮浜嗙‘璁ゆ寜閽�
+ */
+-(void)sure{
+    if (_tempView.phoneInputV.inputTextF.text.length==0||_tempView.phoneInputV.inputTextF.text.length!=11) {
+        [HDLToast showTostWithMessage:HDLFVLocalizedString(@"Please enter a correct phone number")];
+        return;
+    }
+    if (_tempView.temPassInputV.inputTextF.text.length!=6) {
+        [HDLToast showTostWithMessage:HDLFVLocalizedString(@"Input 6-digits temporary password")];
+        return;
+    }
+//    if (_tempView.useTimesInputV.inputTextF.text.length==0) {
+//        [HDLToast showTostWithMessage:HDLFVLocalizedString(@"Input usage times")];
+//        return;
+//    }
+    if (self.selectedEffectiveTime.length==0) {
+        [HDLToast showTostWithMessage:HDLFVLocalizedString(@"Please select a effective time")];
+        return;
+    }
+    if (self.selectedExpireTime.length==0) {
+        [HDLToast showTostWithMessage:HDLFVLocalizedString(@"Please select a expire time")];
+        return;
+    }
+    
+    WeakSelf(weakSelf);
+    HDLFVAlert *alert=[[HDLFVAlert alloc] init];
+    if (self.temPassType==HDLFVTemPassType_Generate) {
+        self.addTemPModel=[[HDLFVAddTemPassModel alloc] init];
+        self.addTemPModel.homeId=[HDLFVHttpRequestManager sharedInstance].currentUserId;
+        self.addTemPModel.phone=_tempView.phoneInputV.inputTextF.text;
+        self.addTemPModel.tempPwd=_tempView.temPassInputV.inputTextF.text;
+        self.addTemPModel.useCount=@"10000";
+//        _addTemPModel.deviceId=_deviceId;
+        self.addTemPModel.validBeginTime=self.selectedEffectiveTime;
+        self.addTemPModel.validEndTime=self.selectedExpireTime;
+
+        HDLFVLog(@"鐢熸垚锛�%@",self.addTemPModel);
+
+        [alert showAlertWithTitle:HDLFVLocalizedString(@"Tips") message:HDLFVLocalizedString(@"After confirmation, the visitor QR code will be generated, and the 6-digit dynamic digital password SMS will also be sent to the visitor's mobile phone.") height:158 cancle:^{
+        } sure:^{
+            HDLFVLog(@"鐐瑰嚮浜嗙‘璁�");
+            [weakSelf generateCredentials];
+        }];
+    }else{
+        [alert showAlertWithTitle:HDLFVLocalizedString(@"Tips") message:HDLFVLocalizedString(@"You are canceling visitor credentials") height:158 cancle:^{
+        } sure:^{
+            HDLFVLog(@"鐐瑰嚮浜嗙‘璁�");
+            [weakSelf cancleCredentials];
+        }];
+    }
+    
+}
+
+/*鐐瑰嚮浜嗕簩缁寸爜
+ */
+-(void)tapQRCode:(UIImage *)QRImage{
+    HDLFVLog(@"鐐瑰嚮浜嗕簩缁寸爜");
+    _imgD=[[HDLFVImageDetail alloc] init];
+    [_imgD showImage:QRImage describe:HDLFVLocalizedString(@"Long press the QR code to save the QR code to the album")];
+
+}
+
+/*闀挎寜浜岀淮鐮�
+ */
+-(void)longTapQRCode:(UIImage*)QRCImage{
+
+    [Constants saveImageToPhotosAlbum:QRCImage];
+}
+
+/*灞曠ず鏃堕棿閫夋嫨鍣�
+ */
+-(void)showDatePicker{
+    PGDatePickManager *datePickManager = [[PGDatePickManager alloc]init];
+    datePickManager.isShadeBackgroud = true;
+    self.datePicker = datePickManager.datePicker;
+    self.datePicker.delegate = self;
+
+    datePickManager.confirmButtonTextColor=HDLFV_COLOR_TEXT_LIGHT_BLUE;
+    datePickManager.confirmButtonFont=HDLFV_Get_FontRegularWithSize(HDLFV_FontSize_16);
+    datePickManager.headerViewBackgroundColor=HDLFV_COLOR_NAV_BACKGROUND;
+    datePickManager.cancelButtonTextColor=HDLFV_COLOR_TEXT_TITLE_GRAY;
+    datePickManager.cancelButtonFont=HDLFV_Get_FontRegularWithSize(HDLFV_FontSize_16);
+
+    self.datePicker.datePickerMode = PGDatePickerModeDateHourMinute;
+    [self presentViewController:datePickManager animated:false completion:nil];
+
+}
+
+/*鐢熸垚涓存椂鍑瘉
+ */
+-(void)generateCredentials{
+    WeakSelf(weakSelf);
+    [HDLFVHUD showHudInView:self.view];
+    [[HDLFVHttpRequestManager sharedInstance] addTemPassWithAddTemPassModel:self.addTemPModel success:^(NSString *_Nullable tempId) {
+        [HDLFVHUD  hideHUDForView:weakSelf.view];
+        [weakSelf generateTempSuccess:tempId];
+    } fail:^(NSError * _Nullable error) {
+        [HDLFVHUD  hideHUDForView:weakSelf.view];
+        [HDLToast showTostWithMessage:error.localizedDescription];
+    }];
+}
+
+/*鍙栨秷涓存椂鍑瘉
+ */
+-(void)cancleCredentials{
+    WeakSelf(weakSelf);
+    [HDLFVHUD showHudInView:self.view];
+    _cancleTemPModel=[[HDLFVCancleTemPModel alloc] init];
+    _cancleTemPModel.homeId=[HDLFVHttpRequestManager sharedInstance].currentUserId;
+    HDLFVLog(@"tempId:%@",self.temPdetailModel.ID);
+    _cancleTemPModel.ID=self.temPdetailModel.ID;
+    [[HDLFVHttpRequestManager sharedInstance] deleteTemPassWithAddTemPassModel:_cancleTemPModel success:^{
+        [HDLFVHUD  hideHUDForView:weakSelf.view];
+        [weakSelf cancleTempSuccess];
+    } fail:^(NSError * _Nullable error) {
+        [HDLFVHUD  hideHUDForView:weakSelf.view];
+        [HDLToast showTostWithMessage:error.localizedDescription];
+    }];
+}
+
+/*鐢熸垚涓存椂鍑瘉鎴愬姛
+ */
+-(void)generateTempSuccess:(NSString*)tempId{
+    [_tempView showQRCode:YES];
+    _tempView.QRCodeImageV.image=[Constants creatCIQRCodeImage:_tempView.temPassInputV.inputTextF.text];
+    _tempView.temPassType=HDLFVTemPassType_Detail;
+    HDLFVLog(@"tempId:%@",tempId);
+    self.temPdetailModel=[[HDLFVTemPDetailModel alloc] init];
+    self.temPdetailModel.ID=tempId;
+    _sureBtn.titleName=HDLFVLocalizedString(@"Cancle Visitor Credentials");
+    self.temPassType=HDLFVTemPassType_Detail;
+}
+
+/*鍙栨秷涓存椂鍑瘉鎴愬姛
+ */
+-(void)cancleTempSuccess{
+    if (_isShowDetail) {
+        [[NSNotificationCenter defaultCenter] postNotificationName:HDLFVNotificationChangeTemP object:nil];
+        [self.navigationController popViewControllerAnimated:YES];
+    }else{
+        [self.navigationController popViewControllerAnimated:YES];
+//
+//        _tempView.temPassType=HDLFVTemPassType_Generate;
+//        _sureBtn.titleName=HDLFVLocalizedString(@"Generate Visitor Credentials");
+//        self.temPassType=HDLFVTemPassType_Generate;
+    }
+}
+
+
+#pragma PGDatePickerDelegate
+- (void)datePicker:(PGDatePicker *)datePicker didSelectDate:(NSDateComponents *)dateComponents {
+    
+    NSString *sendTimeStr=[NSString stringWithFormat:@"%ld-%@-%@ %@:%@:00",dateComponents.year,[Constants autoFillZero:dateComponents.month],[Constants autoFillZero:dateComponents.day],[Constants autoFillZero:dateComponents.hour],[Constants autoFillZero:dateComponents.minute]];//璇锋眰鎺ュ彛鏍煎紡鐨勬椂闂�
+    NSString *showTimeStr=[NSString stringWithFormat:@"%ld%@%@%@%@%@ %@:%@",dateComponents.year,HDLFVLocalizedString(@"Y"),[Constants autoFillZero:dateComponents.month],HDLFVLocalizedString(@"M"),[Constants autoFillZero:dateComponents.day],HDLFVLocalizedString(@"D"),[Constants autoFillZero:dateComponents.hour],[Constants autoFillZero:dateComponents.minute]];//灞曠ず鏍煎紡鐨勬椂闂�
+    
+    if (self.pickTimeType==HDLFVPickTimeType_Effective) {
+        self.selectedEffectiveTime=sendTimeStr;
+        _tempView.validTimeV.contentL.text=showTimeStr;
+    }else{
+        self.selectedExpireTime=sendTimeStr;
+        _tempView.expireTimeV.contentL.text=showTimeStr;
+
+    }
+    
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.h b/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.h
new file mode 100644
index 0000000..8636d38
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.h
@@ -0,0 +1,22 @@
+//
+//  HDLEZTemListModel.h
+//  EZSDK
+//
+//  Created by 闄堝惎鎵� on 2023/3/9.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZTemInfoModel : NSObject
+@property (nonatomic, copy)NSString *extVisitorId;//涓存椂瀵嗙爜绱㈠紩
+@property (nonatomic, copy)NSString *password;//瀵嗙爜
+@property (nonatomic, copy)NSString *userName;//閿佺敤鎴峰悕
+@property (nonatomic, copy)NSString *beginTime;//寮�濮嬫椂闂存埑
+@property (nonatomic, copy)NSString *endTime;//缁撴潫鏃堕棿鎴�
+@property (nonatomic, copy)NSString *limitCount;//闄愬埗娆℃暟
+@property (nonatomic, copy)NSString *useCount;//鍓╀綑浣跨敤娆℃暟
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.m b/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.m
new file mode 100644
index 0000000..2c433cd
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Models/HDLEZTemInfoModel.m
@@ -0,0 +1,12 @@
+//
+//  HDLEZTemListModel.m
+//  EZSDK
+//
+//  Created by 闄堝惎鎵� on 2023/3/9.
+//
+
+#import "HDLEZTemInfoModel.h"
+
+@implementation HDLEZTemInfoModel
+
+@end
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.h b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.h
new file mode 100755
index 0000000..4e58565
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.h
@@ -0,0 +1,21 @@
+//
+//  HDLFVVisitorRecordCell.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface HDLEZVisitorRecordCell : UITableViewCell
+@property (nonatomic, copy)NSString *title;//鏍囬
+@property (nonatomic, copy)NSString *describe;//鎻忚堪
+
+@property (nonatomic, strong)HDLEZTemInfoModel* tempInfo;//涓存椂瀵嗙爜淇℃伅
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.m b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.m
new file mode 100755
index 0000000..fb37b13
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordCell.m
@@ -0,0 +1,138 @@
+//
+//  HDLFVVisitorRecordCell.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZVisitorRecordCell.h"
+@interface HDLEZVisitorRecordCell(){
+    UIFont *titleFont,*describeFont;
+}
+
+@property (nonatomic, strong)UILabel *titleL;//鏍囬lable
+@property (nonatomic, strong)UILabel *timeL;//鏃堕棿lable
+@property (nonatomic, strong)UILabel *describeL;//鎻忚堪lable
+@property (nonatomic, strong)UIView *lineV;//涓嬪垝绾�
+@property (nonatomic, strong)UIImageView *nextImgV;//鍙崇澶�
+
+@end
+@implementation HDLEZVisitorRecordCell
+
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+
+-(instancetype)initWithFrame:(CGRect)frame{
+    if(self = [super initWithFrame:frame]){
+        self.frame=frame;
+        self.selectionStyle=UITableViewCellSelectionStyleNone;
+        titleFont=HDLEZ_Get_FontRegularWithSize(HDLEZ_FontSize_16);
+        describeFont=HDLEZ_Get_FontRegularWithSize(HDLEZ_FontSize_12);
+
+        [self initUI];
+    }
+    return self;
+}
+
+-(void)initUI{
+    //鍙崇澶�
+    _nextImgV =[[UIImageView alloc] init];
+    [self.contentView addSubview:_nextImgV];
+    [_nextImgV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.right.equalTo(self.contentView).offset(-16);
+        make.centerY.equalTo(self.contentView.mas_centerY);
+        make.height.width.mas_equalTo(16);
+    }];
+    _nextImgV.image=[UIImage imageNamed:@"hdl_ez_list_next"];
+
+    //鏍囬L
+    _titleL=[[UILabel alloc] init];
+    _titleL.font=titleFont;
+    _titleL.textColor=HDLEZ_COLOR_TITLE_BLACK;
+    _titleL.adjustsFontSizeToFitWidth=YES;
+    [self.contentView addSubview:_titleL];
+    [_titleL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self.contentView).offset(12);
+        make.left.equalTo(self.contentView).offset(16);
+        make.height.mas_equalTo(22);
+        make.right.equalTo(_nextImgV.mas_left).offset(-5);
+    }];
+    
+    //鏃堕棿L
+    _timeL=[[UILabel alloc] init];
+    _timeL.font=describeFont;
+    _timeL.textColor=HDLEZ_COLOR_TEXT_LIGHT_GRAY;
+    _timeL.adjustsFontSizeToFitWidth=YES;
+    [self.contentView addSubview:_timeL];
+    [_timeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.centerY.equalTo(self.contentView.mas_centerY);
+        make.left.right.equalTo(_titleL);
+        make.height.mas_equalTo(17);
+    }];
+
+    //鎻忚堪L
+    _describeL=[[UILabel alloc] init];
+    _describeL.font=describeFont;
+    _describeL.textColor=HDLEZ_COLOR_TEXT_LIGHT_GRAY;
+    _describeL.adjustsFontSizeToFitWidth=YES;
+    [self.contentView addSubview:_describeL];
+    [_describeL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.bottom.equalTo(self.contentView).offset(-15);
+        make.height.mas_equalTo(17);
+        make.left.right.equalTo(_titleL);
+    }];
+    
+//    //涓嬪垝绾�
+//    _lineV=[[UIView alloc] init];
+//    [self.contentView addSubview:_lineV];
+//    [_lineV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.left.equalTo(_titleL.mas_left);
+//        make.bottom.equalTo(self.contentView);
+//        make.right.equalTo(_nextImgV.mas_right);
+//        make.height.mas_equalTo(1);
+//    }];
+//    _lineV.backgroundColor=HDLEZ_COLOR_BACKGROUND_LINE;
+
+}
+
+/*鏃堕棿鎴宠浆鏃堕棿
+ */
+-(NSString *)turnDate:(NSString*)dateStr{
+//    return   [HDLEZConstants turnDateString:dateStr toFormater:[NSString stringWithFormat:@"yyyy%@MM%@dd%@ HH:mm",HDLEZLocallizedString(@"Y"),HDLEZLocallizedString(@"M"),HDLEZLocallizedString(@"D")]];
+    return [HDLEZConstants timeStrWithFormate:[NSString stringWithFormat:@"yyyy%@MM%@dd%@ HH:mm",HDLEZLocallizedString(@"device_temp_year"),HDLEZLocallizedString(@"device_temp_month"),HDLEZLocallizedString(@"device_temp_date")] data:[NSDate dateWithTimeIntervalSince1970:[dateStr integerValue]]];;
+}
+
+-(void)setTitle:(NSString *)title{
+    _title=title;
+    _titleL.text=title;
+}
+
+-(void)setDescribe:(NSString *)describe{
+    _describe=describe;
+    _describeL.text=describe;
+}
+
+-(void)setTempInfo:(HDLEZTemInfoModel *)tempInfo{
+    _tempInfo=tempInfo;
+    
+    //鍚嶇О
+    _titleL.text=[NSString stringWithFormat:@"%@",_tempInfo.userName];
+    
+    //鏃堕棿
+    _timeL.text=[NSString stringWithFormat:@"%@ - %@",[self turnDate:tempInfo.beginTime],[self turnDate:tempInfo.endTime]];
+    
+    //鍓╀綑娆℃暟
+    NSString *contentStr=[NSString stringWithFormat:@"%@%@%@",HDLEZLocallizedString(@"device_temp_left"),tempInfo.useCount,HDLEZLocallizedString(@"device_temp_times")];
+    NSMutableAttributedString *attributedStringM = [[NSMutableAttributedString alloc] initWithString:contentStr];
+    [attributedStringM addAttribute:NSForegroundColorAttributeName value:HDLEZ_COLOR_TITLE_BLACK range:NSMakeRange(contentStr.length-HDLEZLocallizedString(@"device_temp_times").length-tempInfo.useCount.length, tempInfo.useCount.length)];
+    _describeL.attributedText=attributedStringM;
+    
+    
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.h b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.h
new file mode 100755
index 0000000..b76116c
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.h
@@ -0,0 +1,23 @@
+//
+//  HDLFVVisitorRecordView.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "HDLEZTemInfoModel.h"
+NS_ASSUME_NONNULL_BEGIN
+@protocol HDLEZVisitorRecordViewDelegate <NSObject>
+-(void)visitorRecordViewdidSelectRecord:(HDLEZTemInfoModel *)tempDetailModel;
+@end
+@interface HDLEZVisitorRecordView : UITableView<UITableViewDelegate,UITableViewDataSource>
+
+@property (nonatomic, weak) id<HDLEZVisitorRecordViewDelegate> choseDelegate;
+
+@property (nonatomic, strong) NSArray<HDLEZTemInfoModel*> *temPList;//涓存椂瀵嗙爜鍒楄〃
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.m b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.m
new file mode 100755
index 0000000..8aebb30
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLEZVisitorRecordView.m
@@ -0,0 +1,79 @@
+//
+//  HDLFVVisitorRecordView.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/29.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLEZVisitorRecordView.h"
+#import "HDLEZVisitorRecordCell.h"
+@implementation HDLEZVisitorRecordView{
+    CGFloat cellHeight;
+}
+
+-(instancetype)init{
+    self = [super init];
+    if (self) {
+        self.backgroundColor = HDLEZ_COLOR_VIEW_BACKGROUND;
+
+        self.separatorStyle = NO;
+        self.showsVerticalScrollIndicator=NO;
+        self.delegate = self;
+        self.dataSource = self;
+        cellHeight=92;//鏍规嵁闀垮害璋冩暣
+        [self setSeparatorInset:UIEdgeInsetsZero];
+//        [self setLayoutMargins:UIEdgeInsetsZero];
+    }
+    
+    return  self;
+}
+
+-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
+    return 1;
+}
+
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+    return self.temPList.count;
+}
+
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+    return cellHeight;
+}
+
+-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
+    HDLEZLog(@"鍒濆鍖朿ell");
+    HDLEZVisitorRecordCell *cell = [tableView dequeueReusableCellWithIdentifier:@"HDLFVVisitorRecordCell"];
+    if(cell == nil){
+        cell=[[HDLEZVisitorRecordCell alloc]initWithFrame:CGRectMake(0, 0, self.frame.size.width, cellHeight)];
+    }
+//    cell.title=HDLEZLocallizedString(@"Visitor Invitation Record");
+    HDLEZTemInfoModel *model=self.temPList[indexPath.row];
+    cell.tempInfo=model;
+    HDLEZLog(@"鍒濆鍖朿ell ID:%@",model.extVisitorId);
+
+//    cell.describe=@"鏃堕棿锛�2022骞�4鏈�29鏃� 16:00 ~ 2022骞�5鏈�20鏃� 16:00";
+//    cell.describe=[NSString stringWithFormat:@"%@: %@ ~ %@",HDLEZLocallizedString(@"Time"),[self turnDate:model.beginTime],[self turnDate:model.endTime]];
+    return cell;
+
+}
+
+//-(NSString *)turnDate:(NSString*)dateStr{
+//    return   [HDLEZConstants turnDateString:dateStr toFormater:[NSString stringWithFormat:@"yyyy%@MM%@dd%@ HH:mm",HDLEZLocallizedString(@"Y"),HDLEZLocallizedString(@"M"),HDLEZLocallizedString(@"D")]];
+//}
+
+
+
+-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
+    [tableView deselectRowAtIndexPath:indexPath animated:YES];
+    if (self.choseDelegate&&[self.choseDelegate respondsToSelector:@selector(visitorRecordViewdidSelectRecord:)]) {//浠g悊
+        [self.choseDelegate visitorRecordViewdidSelectRecord:self.temPList[indexPath.row]];
+    }
+}
+
+
+-(void)setTemPList:(NSArray<HDLEZTemInfoModel *> *)temPList{
+    _temPList=temPList;
+    [self reloadData];
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.h b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.h
new file mode 100755
index 0000000..44ebdea
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.h
@@ -0,0 +1,43 @@
+//
+//  HDLFVCreateTemPassView.h
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/22.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "HDLTopTitleInputView.h"
+#import "HDLFVNormalCellView.h"
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^HDLFVImageVBlock)(UIImage * image);
+
+typedef enum {
+    HDLFVTemPassType_Generate=0, //鐢熸垚
+    HDLFVTemPassType_Detail=1,//璇︽儏
+}HDLFVTemPassType;
+@interface HDLFVCreateTemPassView : UIView
+@property(nonatomic,assign)HDLFVTemPassType temPassType;//涓存椂瀵嗙爜绫诲瀷
+
+@property (nonatomic, strong)HDLTopTitleInputView *phoneInputV;//璁垮鎵嬫満杈撳叆view
+@property (nonatomic, strong)HDLTopTitleInputView *temPassInputV;//鍔ㄦ�佸瘑鐮佽緭鍏iew
+//@property (nonatomic, strong)HDLTopTitleInputView *useTimesInputV;//浣跨敤娆℃暟杈撳叆view
+
+@property (nonatomic, strong)HDLFVNormalCellView *validTimeV;//鐢熸晥鏃堕棿view
+@property (nonatomic, strong)HDLFVNormalCellView *expireTimeV;//澶辨晥鏃堕棿view
+
+@property (nonatomic, strong)UIImageView *QRCodeImageV;//浜岀淮鐮乮mageView
+
+@property(nonatomic,strong)HDLFVImageVBlock clickQRCodeBlock; //鐐瑰嚮浜岀淮鐮�
+@property(nonatomic,strong)HDLFVImageVBlock longTapQRCodeBlock; //闀挎寜浜岀淮鐮�
+
+@property(nonatomic,assign)BOOL isInvalid;//鏄惁鏃犳晥
+
+/*灞曠ず浜岀淮鐮�
+ 
+ */
+-(void)showQRCode:(BOOL)show;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.m b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.m
new file mode 100755
index 0000000..ebe5654
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/TempPassword/Views/HDLFVCreateTemPassView.m
@@ -0,0 +1,240 @@
+//
+//  HDLFVCreateTemPassView.m
+//  Ezviz
+//
+//  Created by 闄堝惎鎵� on 2022/4/22.
+//  Copyright 漏 2022 hdl. All rights reserved.
+//
+
+#import "HDLFVCreateTemPassView.h"
+@interface HDLFVCreateTemPassView ()
+@property (nonatomic, strong)UILabel *tipL;//鎻愮ずLable
+@property (nonatomic, strong)UILabel *QRCodetipL;//浜岀淮鐮佹彁绀篖able
+@property (nonatomic, strong)UIView *expireV;//鏃犳晥View
+@property (nonatomic, strong)UILabel *expireL;//鏃犳晥Lable
+
+@property (nonatomic, strong)UIScrollView *scrollV;//婊氬姩view
+
+@end
+@implementation HDLFVCreateTemPassView
+
+-(instancetype)init{
+    self = [super init];
+    if (self) {
+//        _isShow=YES;
+//        _tempPassword=@"";
+        [self initUI];
+    }
+    
+    return  self;
+}
+
+-(void)initUI{
+    //婊氬姩view
+    _scrollV=[[UIScrollView alloc] init];
+    if (@available(iOS 11.0, *)) {
+        _scrollV.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
+    }
+    [self addSubview:_scrollV];
+    [_scrollV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(self);
+        make.right.left.bottom.equalTo(self);
+    }];
+    _scrollV.contentSize=CGSizeMake(APP_SCREEN_WIDTH, 665);
+
+
+
+    //鎻愮ずlable
+    _tipL=[[UILabel alloc] init];
+    [_scrollV addSubview:_tipL];
+    [_tipL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_scrollV).offset(20);
+        make.left.equalTo(self).offset(20);
+        make.right.equalTo(self).offset(-20);
+        make.height.mas_equalTo(40);
+    }];
+    _tipL.adjustsFontSizeToFitWidth=YES;
+    _tipL.numberOfLines=2;
+    _tipL.textColor=HDLFV_COLOR_TEXT_LIGHT_GRAY;
+    _tipL.font=HDLFV_Get_FontRegularWithSize(HDLFV_FontSize_12);
+    _tipL.text=HDLFVLocalizedString(@"*After you initiate the visitor certificate, you can  unlock the door by password or swipe the code  freely within the validity period you set. Please share the certificate carefully.");
+    
+    //璁垮鎵嬫満
+    _phoneInputV=[[HDLTopTitleInputView alloc] init];
+    [_scrollV addSubview:_phoneInputV];
+    [_phoneInputV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_tipL.mas_bottom).offset(30);
+        make.left.right.equalTo(self);
+        make.height.mas_equalTo(80);
+    }];
+    _phoneInputV.inputTextF.keyboardType=UIKeyboardTypeNumberPad;
+    _phoneInputV.placeHolder=HDLFVLocalizedString(@"Input phone number of the visitor");
+    _phoneInputV.title=HDLFVLocalizedString(@"Visitor Phone Number");
+    
+
+    //鍔ㄦ�佸瘑鐮�
+    _temPassInputV=[[HDLTopTitleInputView alloc] init];
+    [_scrollV addSubview:_temPassInputV];
+    [_temPassInputV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_phoneInputV.mas_bottom);
+        make.left.right.equalTo(self);
+        make.height.mas_equalTo(80);
+    }];
+    _temPassInputV.inputTextF.keyboardType=UIKeyboardTypeNumberPad;
+    _temPassInputV.placeHolder=HDLFVLocalizedString(@"Input 6-digits temporary password");
+    _temPassInputV.title=HDLFVLocalizedString(@"Temporary password");
+    _temPassInputV.btnTitle=HDLFVLocalizedString(@"Random Generation");
+    
+    
+//    //浣跨敤娆℃暟
+//    _useTimesInputV=[[HDLTopTitleInputView alloc] init];
+//    [_scrollV addSubview:_useTimesInputV];
+//    [_useTimesInputV mas_makeConstraints:^(MASConstraintMaker *make) {
+//        make.top.equalTo(_temPassInputV.mas_bottom);
+//        make.left.right.equalTo(self);
+//        make.height.mas_equalTo(80);
+//    }];
+//    _useTimesInputV.inputTextF.keyboardType=UIKeyboardTypeNumberPad;
+//    _useTimesInputV.inputTextF.text=@"1";
+//    _useTimesInputV.placeHolder=HDLFVLocalizedString(@"Input usage times");
+//    _useTimesInputV.title=HDLFVLocalizedString(@"Usage Times");
+    
+    //鐢熸晥鏃堕棿
+    _validTimeV=[[HDLFVNormalCellView alloc] init];
+    [_scrollV addSubview:_validTimeV];
+    [_validTimeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_temPassInputV.mas_bottom).offset(8);
+        make.left.right.equalTo(self);
+        make.height.mas_equalTo(50);
+    }];
+    _validTimeV.title=HDLFVLocalizedString(@"Effective Time");
+    
+    //澶辨晥鏃堕棿
+    _expireTimeV=[[HDLFVNormalCellView alloc] init];
+    [_scrollV addSubview:_expireTimeV];
+    [_expireTimeV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_validTimeV.mas_bottom);
+        make.left.right.equalTo(self);
+        make.height.mas_equalTo(50);
+    }];
+    _expireTimeV.title=HDLFVLocalizedString(@"Expiration Time");
+    
+    //浜岀淮鐮�
+    _QRCodeImageV=[[UIImageView alloc] init];
+    [_scrollV addSubview:_QRCodeImageV];
+    [_QRCodeImageV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_expireTimeV.mas_bottom).offset(33);
+        make.centerX.equalTo(self.mas_centerX);
+        make.height.width.mas_equalTo(142);
+    }];
+    _QRCodeImageV.userInteractionEnabled = YES;
+    
+    //娣诲姞鐐瑰嚮浜嬩欢
+    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickQRCode)];
+    UILongPressGestureRecognizer *longTap=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longTapQRCode:)];
+    [_QRCodeImageV addGestureRecognizer:tap];
+    [_QRCodeImageV addGestureRecognizer:longTap];
+    [_QRCodeImageV setHidden:YES];
+
+    //鏃犳晥view
+    _expireV=[[UIView alloc] init];
+    [_scrollV addSubview:_expireV];
+    [_expireV mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_expireTimeV.mas_bottom).offset(33);
+        make.centerX.equalTo(self.mas_centerX);
+        make.height.width.mas_equalTo(142);
+    }];
+    _expireV.backgroundColor=[UIColor blackColor];
+    _expireV.alpha=0.6;
+    [_expireV setHidden:YES];
+    
+    //鏃犳晥Lable
+    _expireL=[[UILabel alloc] init];
+    [_scrollV addSubview:_expireL];
+    _expireL.textAlignment=NSTextAlignmentCenter;
+    _expireL.textColor=[UIColor whiteColor];
+    [_expireL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_expireTimeV.mas_bottom).offset(33);
+        make.centerX.equalTo(self.mas_centerX);
+        make.height.width.mas_equalTo(142);
+        
+    }];
+    _expireL.font=HDLFV_Get_FontRegularWithSize(HDLFV_FontSize_12);
+    _expireL.text=HDLFVLocalizedString(@"QR code is invalid");
+    [_expireL setHidden:YES];
+
+    //鎻愮ずlable
+    _QRCodetipL=[[UILabel alloc] init];
+    [_scrollV addSubview:_QRCodetipL];
+    [_QRCodetipL mas_makeConstraints:^(MASConstraintMaker *make) {
+        make.top.equalTo(_QRCodeImageV.mas_bottom).offset(20);
+        make.left.equalTo(self).offset(10);
+        make.right.equalTo(self).offset(-10);
+        make.height.mas_equalTo(20);
+    }];
+    _QRCodetipL.adjustsFontSizeToFitWidth=YES;
+    _QRCodetipL.textAlignment=NSTextAlignmentCenter;
+    _QRCodetipL.textColor=HDLFV_COLOR_TEXT_TITLE_GRAY;
+    _QRCodetipL.font=HDLFV_Get_FontRegularWithSize(HDLFV_FontSize_12);
+    _QRCodetipL.text=HDLFVLocalizedString(@"Long press the QR code to save the QR code to the album");
+    [_QRCodetipL setHidden:YES];
+    
+    
+}
+
+//鐐瑰嚮浜嗕簩缁寸爜
+-(void)clickQRCode{
+    
+    self.clickQRCodeBlock(_QRCodeImageV.image);
+}
+
+//闀挎寜浜岀淮鐮�
+-(void)longTapQRCode:(UIGestureRecognizer*)recognizer{
+    if (recognizer.state==UIGestureRecognizerStateBegan) {
+        HDLFVLog(@"闀挎寜浜嗕簩缁寸爜");
+        self.longTapQRCodeBlock(_QRCodeImageV.image);
+    }
+
+}
+
+/*灞曠ず浜岀淮鐮�
+ 
+ */
+-(void)showQRCode:(BOOL)show{
+    [_QRCodetipL setHidden:!show];
+    [_QRCodeImageV setHidden:!show];
+
+}
+
+-(void)setIsInvalid:(BOOL)isInvalid{
+    _isInvalid=isInvalid;
+    if (isInvalid) {//濡傛灉涓烘棤鏁�
+        [_expireL setHidden:NO];
+        [_expireV setHidden:NO];
+        [_QRCodetipL setHidden:YES];
+        _temPassInputV.inputTextF.text=HDLFVLocalizedString(@"Temporary password is invalid");
+    }
+}
+
+-(void)setTemPassType:(HDLFVTemPassType)temPassType{
+    _temPassType=temPassType;
+    if (temPassType==HDLFVTemPassType_Generate) {
+        [_phoneInputV.inputTextF setEnabled:YES];
+        [_temPassInputV.inputTextF setEnabled:YES];
+        _temPassInputV.btnTitle=HDLFVLocalizedString(@"Random Generation");
+//        [_useTimesInputV.inputTextF setEnabled:YES];
+        [_expireTimeV.button setEnabled:YES];
+        [_validTimeV.button setEnabled:YES];
+        [self showQRCode:NO];
+    }else{
+        [_phoneInputV.inputTextF setEnabled:NO];
+        [_temPassInputV.inputTextF setEnabled:NO];
+        _temPassInputV.btnTitle=@"";
+//        [_useTimesInputV.inputTextF setEnabled:NO];
+        [_expireTimeV.button setEnabled:NO];
+        [_validTimeV.button setEnabled:NO];
+        [self showQRCode:YES];
+
+    }
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
index 748bfd4..1645fb3 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPConfigResultViewController.m
@@ -13,6 +13,7 @@
 #import "Toast+UIView.h"
 #import "EZDeviceTableViewController.h"
 
+#import "EZAddByQRCodeViewController.h"
 
 #define MAX_COUNT (20)
 
@@ -24,6 +25,8 @@
 @property (weak, nonatomic) IBOutlet UILabel *msgLabel;
 @property (nonatomic,strong) NSTimer *timer;
 @property (nonatomic,assign) NSInteger addCount;
+@property (nonatomic,strong) UIButton *verifiedBtn;//宸叉牎楠屾寜閽�
+
 @end
 
 @implementation EZAPConfigResultViewController
@@ -33,6 +36,9 @@
     [super viewDidLoad];
     
     self.title = NSLocalizedString(@"wifi_ap_add_device_title", @"娣诲姞璁惧");
+    
+    self.msgLabel.numberOfLines=2;
+    self.msgLabel.adjustsFontSizeToFitWidth=YES;
     
     [self initSubviews];
     
@@ -52,6 +58,18 @@
 - (void) initSubviews
 {
     [self.loadingIndicator startAnimating];
+    
+    //娣诲姞宸查獙璇佹寜閽�
+    CGFloat screenHeight = self.view.frame.size.height;
+    CGFloat screenWidth = self.view.frame.size.width;
+    self.verifiedBtn=[[UIButton alloc] initWithFrame:CGRectMake((screenWidth-120)/2, screenHeight-150, 120, 30)];
+    self.verifiedBtn.titleLabel.textColor=[UIColor whiteColor];
+    [self.verifiedBtn setBackgroundColor:[UIColor orangeColor]];
+    [self.verifiedBtn setTitle:NSLocalizedString(@"ad_verified", @"宸叉牎楠�") forState:UIControlStateNormal];
+    [self.verifiedBtn addTarget:self action:@selector(verified) forControlEvents:UIControlEventTouchUpInside];
+    [self.view addSubview:self.verifiedBtn];
+    [self.verifiedBtn setHidden:YES];
+    
 }
 
 #pragma mark - actions
@@ -67,6 +85,14 @@
             [self.navigationController popToViewController:vc animated:YES];
             break;
         }
+        
+        if ([vc isKindOfClass:[EZAddByQRCodeViewController class]])
+        {//璺宠浆鍒版壂鐮侀〉
+            ((EZAddByQRCodeViewController *)vc).shouldPop = YES;
+            [self.navigationController popToViewController:vc animated:YES];
+            break;
+        }
+        
     }
 }
 
@@ -78,6 +104,27 @@
     self.retryBtn.hidden = YES;
     
     [self startTimer];
+}
+
+/*宸叉牎楠�
+ */
+-(void)verified{
+    self.loadingIndicator.hidden = NO;
+    [self.loadingIndicator startAnimating];
+    [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
+                    verifyCode:[GlobalKit shareKit].deviceVerifyCode
+                    completion:^(ResponseData *responseData) {
+        
+        if (!responseData.success){
+            [self.view makeToast:NSLocalizedString(@"wifi_add_fail", @"娣诲姞澶辫触") duration:2.0 position:@"center"];
+        }
+        else
+        {
+            [self.verifiedBtn setHidden:YES];
+            [self successProcess];
+        }
+        
+    }];
 }
 
 #pragma mark - callback
@@ -148,20 +195,35 @@
             //                                              [self successProcess];
             //                                          }
             //                                      }];
-            [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
-                            verifyCode:[GlobalKit shareKit].deviceVerifyCode
-                            completion:^(ResponseData *responseData) {
-                
-                if (!responseData.success)
-                {
-                    [self addErrorProcessWithError:responseData];
-                }
-                else
-                {
-                    [self successProcess];
-                }
-                
-            }];
+            if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿�
+                [EZHttpUtil.sharedManager verifyLocalLockByHDL:[GlobalKit shareKit].deviceSerialNo completion:^(ResponseData * _Nonnull responseData) {
+                    if (responseData.success) {
+                        self.loadingIndicator.hidden = YES;
+                        [self.loadingIndicator stopAnimating];
+                        self.msgLabel.text = NSLocalizedString(@"ad_result_verify_local_lock",@"璇峰湪2鍒嗛挓涔嬪唴鏍¢獙宸叉坊鍔犵殑涓荤敤鎴锋寚绾广�佸瘑閽ユ垨鎰熷簲鍗★紝鏍¢獙瀹屾垚璇风偣鍑诲凡鏍¢獙鎸夐挳");
+                        [self.verifiedBtn setHidden:NO];
+                        
+                    }else{
+                        [self addErrorProcessWithError:responseData];
+                    }
+                }];
+            }else{
+                [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
+                                verifyCode:[GlobalKit shareKit].deviceVerifyCode
+                                completion:^(ResponseData *responseData) {
+                    
+                    if (!responseData.success)
+                    {
+                        [self addErrorProcessWithError:responseData];
+                    }
+                    else
+                    {
+                        [self successProcess];
+                    }
+                    
+                }];
+            }
+
             
         }
     }];
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
index 0b9d955..0e3dc8c 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
@@ -139,17 +139,55 @@
                                 password:self.password
                             deviceSerial:[GlobalKit shareKit].deviceSerialNo
                               verifyCode:[GlobalKit shareKit].deviceVerifyCode
-                                  result:^(BOOL ret) {
-                                      if (ret)
-                                      {
-                                          [self configSuccess];
-                                      }
-                                      else
-                                      {
-                                          [self configFailed];
-                                          NSLog(@"config failed");
-                                      }
-                                  }];
+                            deviceStatus:^(EZWifiConfigStatus status, NSString * _Nonnull deviceSerial) {
+//        EZStrong(self);
+        switch (status) {
+            case DEVICE_WIFI_SENT_SUCCESS:// 鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛
+                // 绛夊緟璁惧閰嶇綉锛屽鏋渨ifi瀵嗙爜閿欒锛屾渶鍚庝細鍥炶皟DEVICE_PLATFORM_REGIST_FAILED
+                NSLog(@"鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛");
+                [self configSuccess];
+
+//                [EZToast show:@"鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛"];
+                break;
+            case DEVICE_WIFI_SENT_FAILED:// 鍚戣澶囧彂閫乄iFi淇℃伅澶辫触
+                // 閰嶇綉澶辫触锛屽彲浠ラ噸璇�
+                NSLog(@"閰嶇綉澶辫触锛岃绋嶅悗閲嶈瘯");
+//                [EZToast show:@"閰嶇綉澶辫触锛岃绋嶅悗閲嶈瘯"];
+                break;
+            case DEVICE_PLATFORM_REGISTED:// 璁惧娉ㄥ唽骞冲彴鎴愬姛
+                // TODO 灏嗚澶囨坊鍔犲埌鑷繁璐﹀彿涓�
+                NSLog(@"璁惧娉ㄥ唽骞冲彴鎴愬姛");
+//                [EZToast show:@"璁惧娉ㄥ唽骞冲彴鎴愬姛"];
+                
+//                [self stopAction];
+//                self.addBtn.hidden = NO;
+                break;
+            case DEVICE_PLATFORM_REGIST_FAILED:// 璁惧娉ㄥ唽骞冲彴澶辫触
+                // TODO 鍙互鑷寮�鍚柊涓�杞疆璇�
+                NSLog(@"璁惧娉ㄥ唽骞冲彴澶辫触");
+//                [EZToast show:@"璁惧娉ㄥ唽骞冲彴澶辫触"];
+                [self stopAction];
+                
+                break;
+            default:
+                break;
+        }
+    }];
+//    [EZOPENSDK startAPConfigWifiWithSsid:self.ssid
+//                                password:self.password
+//                            deviceSerial:[GlobalKit shareKit].deviceSerialNo
+//                              verifyCode:[GlobalKit shareKit].deviceVerifyCode
+//                                  result:^(BOOL ret) {
+//                                      if (ret)
+//                                      {
+//                                          [self configSuccess];
+//                                      }
+//                                      else
+//                                      {
+//                                          [self configFailed];
+//                                          NSLog(@"config failed");
+//                                      }
+//                                  }];
 }
 
 - (void) stopConfigWifi
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.h b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.h
index 1910006..6942a93 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.h
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.h
@@ -7,7 +7,12 @@
 //
 
 #import <UIKit/UIKit.h>
-
+#import "EZSDK.h"
 @interface EZAddByQRCodeViewController : UIViewController
 
+@property (nonatomic, assign) HDLEZDeviceType deviceType;//璁惧绫诲瀷
+
+@property (nonatomic, assign) bool shouldPop;//闇�瑕佽繑鍥�
+
+
 @end
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
index 4abf5f3..27f7e85 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
@@ -71,6 +71,10 @@
 - (void)viewWillAppear:(BOOL)animated
 {
     [super viewWillAppear:animated];
+    if(self.shouldPop){//閫�鍑虹晫闈�
+        [self.navigationController popViewControllerAnimated:YES];
+    }
+    
     [[GlobalKit shareKit] clearDeviceInfo];
     if (authStatus == AVAuthorizationStatusDenied ||
         authStatus == AVAuthorizationStatusRestricted)
@@ -237,7 +241,7 @@
     strQRcode = [strQRcode stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\r"];//2021-10-19 瑙e喅閮ㄥ垎鐚溂璁惧灞忓箷鏄剧ず鐨勪簩缁寸爜锛屽弬鏁颁箣闂村嚭鐜扮┖琛屽鑷村垎鍓插彇閿欏瓧娈甸棶棰�
     
     NSArray *arrString = [strQRcode componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
-    
+    [GlobalKit shareKit].deviceType = self.deviceType;
     if(arrString.count >=3)
     {
         [GlobalKit shareKit].deviceSerialNo = arrString[1];
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
index afe9d1e..500c658 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceResultViewController.m
@@ -127,13 +127,29 @@
 //                          [hud hide:YES];
 //                          [self handleTheError:error];
 //                      }];
-            [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
-                       verifyCode:[GlobalKit shareKit].deviceVerifyCode
-                       completion:^(ResponseData *responseData) {
-                           [hud hide:YES];
-                           [self handleTheError:responseData];
-                       }];
-            
+            if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬绂佽澶囷紙闇�瑕侀獙璇侀棬閿侊級
+                [EZHttpUtil.sharedManager verifyLocalLockByHDL:[GlobalKit shareKit].deviceSerialNo completion:^(ResponseData * _Nonnull responseData) {
+                    [hud hide:YES];
+                    if (responseData.success) {
+                        self.resultLabel.numberOfLines=2;
+                        self.resultLabel.adjustsFontSizeToFitWidth=YES;
+                        self.resultLabel.text = NSLocalizedString(@"ad_result_verify_local_lock",@"璇峰湪2鍒嗛挓涔嬪唴鏍¢獙宸叉坊鍔犵殑涓荤敤鎴锋寚绾广�佸瘑閽ユ垨鎰熷簲鍗★紝鏍¢獙瀹屾垚璇风偣鍑诲凡鏍¢獙鎸夐挳");
+                        
+                        [self.actionButton setTitle:NSLocalizedString(@"ad_verified", @"宸叉牎楠�") forState:UIControlStateNormal];
+                    }else{
+                        [self handleTheError:responseData];
+                    }
+
+                    NSLog(@"璋冪敤楠岃瘉鎺ュ彛杩斿洖锛�%@",responseData.data);
+                }];
+            }else{
+                [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
+                           verifyCode:[GlobalKit shareKit].deviceVerifyCode
+                           completion:^(ResponseData *responseData) {
+                               [hud hide:YES];
+                               [self handleTheError:responseData];
+                           }];
+            }
             
         }
         else
@@ -144,6 +160,22 @@
             [alertView show];
         }
     }
+    else if([self.actionButton.titleLabel.text isEqualToString:NSLocalizedString(@"ad_verified",@"宸叉牎楠�")])
+    {
+        __weak MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
+        hud.labelText = NSLocalizedString(@"ad_adding_msg", @"姝e湪娣诲姞锛岃绋嶅��...");
+        [EZHttpUtil.sharedManager addDeviceByHDL:[GlobalKit shareKit].deviceSerialNo
+                   verifyCode:[GlobalKit shareKit].deviceVerifyCode
+                   completion:^(ResponseData *responseData) {
+                       [hud hide:YES];
+                if (!responseData.success){
+                    [self.view makeToast:NSLocalizedString(@"wifi_add_fail", @"娣诲姞澶辫触") duration:2.0 position:@"center"];
+                }else{
+                    [self handleTheError:responseData];
+                }
+
+        }];
+    }
     else
     {
         [self doSearchDevice];
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
index 464f29e..a830842 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
@@ -22,7 +22,7 @@
 #import "Toast+UIView.h"
 #import "EZStreamPlayer.h"
 #import "MBProgressHUD.h"
-
+#import "EZPMPlayPrivateTokenInfo.h"
 
 #define MinimumZoomScale 1.0
 #define MaximumZoomScale 4.0
@@ -89,6 +89,8 @@
 @property (weak, nonatomic) IBOutlet UILabel *streamTypeLabel;
 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
 @property (weak, nonatomic) IBOutlet UILabel *zoomSizeLabel;
+
+@property (nonatomic, copy) NSString *streamToken;
 
 @end
 
@@ -219,6 +221,13 @@
     self.scrollView.userInteractionEnabled = YES;
     self.scrollView.multipleTouchEnabled = YES;
     self.scrollView.pagingEnabled = NO;
+    
+    if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佹椂锛屽彧鏄剧ず楹﹀厠椋庡拰寮�闂ㄦ寜閽�
+        self.captureButton.hidden=YES;
+        self.localRecordButton.hidden=YES;
+        
+        [self.controlButton setTitle:NSLocalizedString(@"device_open", @"寮�闂�") forState:UIControlStateNormal];
+    }
 }
 
 - (void)viewDidAppear:(BOOL)animated {
@@ -493,6 +502,11 @@
     }
 }
 
+/** 鏅鸿兘闂ㄩ攣寮�闂╰oken */
+- (void)player:(EZPlayer *)player playPrivateTokenInfo:(EZPMPlayPrivateTokenInfo *)tokenInfo {
+    NSLog(@"寮�闂╰oken--->%@", tokenInfo.token);
+    self.streamToken=tokenInfo.token;
+}
 #pragma mark - ValidateCode Methods
 
 - (void)showSetPassword
@@ -798,6 +812,18 @@
 
 - (IBAction)ptzViewShow:(id)sender
 {
+    if ([GlobalKit shareKit].deviceType==HDLEZDeviceType_Door) {//涓洪棬閿佽澶囨椂锛屾墽琛屽紑闂�
+        NSString *verifyCode = [[GlobalKit shareKit].deviceVerifyCodeBySerial objectForKey:self.deviceInfo.deviceSerial];
+
+        [[EZHttpUtil sharedManager] authLockByHDL:@"123456" deviceId:self.deviceInfo.deviceSerial verifyCode:verifyCode completion:^(ResponseData * _Nonnull responseData) {
+            NSLog(@"缁堢鎺堟潈缁撴灉锛�%@",responseData.data);
+            [[EZHttpUtil sharedManager] remoteOpenByHDL:self.streamToken deviceId:self.deviceInfo.deviceSerial completion:^(ResponseData * _Nonnull responseData) {
+                NSLog(@"寮�闂ㄧ粨鏋滐細%@",responseData.data);
+            }];
+        }];
+        return;
+    }
+    
     self.ptzView.hidden = NO;
     [self.bottomView bringSubviewToFront:self.ptzView];
     self.ptzControlButton.alpha = 0;
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
index 6a410db..336c9ec 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZWifiConfigViewController.m
@@ -11,6 +11,7 @@
 #import "DDKit.h"
 #import "EZDeviceTableViewController.h"
 #import "EZDdnsDeviceTableViewController.h"
+#import "EZAddByQRCodeViewController.h"
 
 // 璁惧bonjour鎼滅储鍒扮殑鐘舵�佹爣绀�
 typedef enum _DEVICE_STATE
@@ -788,7 +789,6 @@
     }
 }
 #pragma mark - Action Methods
-
 - (void)completionButtonClicked:(id)sender
 {
     NSArray *viewControllers = self.navigationController.viewControllers;
@@ -807,6 +807,13 @@
             [self.navigationController popToViewController:vc animated:YES];
             break;
         }
+        
+        if ([vc isKindOfClass:[EZAddByQRCodeViewController class]])
+        {//璺宠浆鍒版壂鐮侀〉
+            ((EZAddByQRCodeViewController *)vc).shouldPop = YES;
+            [self.navigationController popToViewController:vc animated:YES];
+            break;
+        }
     }
 }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/openssl/lib/libcrypto.a b/EZSDK/EZSDK/EZ/Venders/openssl/lib/libcrypto.a
index 757096f..ad3d482 100644
--- a/EZSDK/EZSDK/EZ/Venders/openssl/lib/libcrypto.a
+++ b/EZSDK/EZSDK/EZ/Venders/openssl/lib/libcrypto.a
Binary files differ
diff --git a/EZSDK/EZSDK/EZ/Venders/openssl/lib/libssl.a b/EZSDK/EZSDK/EZ/Venders/openssl/lib/libssl.a
index c526e71..342610d 100644
--- a/EZSDK/EZSDK/EZ/Venders/openssl/lib/libssl.a
+++ b/EZSDK/EZSDK/EZ/Venders/openssl/lib/libssl.a
Binary files differ
diff --git a/EZSDK/EZSDK/EZSDK.h b/EZSDK/EZSDK/EZSDK.h
index 9a39d58..2ae3791 100644
--- a/EZSDK/EZSDK/EZSDK.h
+++ b/EZSDK/EZSDK/EZSDK.h
@@ -8,6 +8,12 @@
 #import <Foundation/Foundation.h>
 #import "EZDeviceInfo.h"
 
+//璁惧绫诲瀷
+typedef enum {
+    HDLEZDeviceType_Default=0, //榛樿绫诲瀷
+    HDLEZDeviceType_Door=1,//闂ㄩ攣
+}HDLEZDeviceType;
+
 @interface EZSDK : NSObject
 ///sharedInstance
 + (instancetype)sharedInstance;
@@ -38,6 +44,13 @@
  璺宠浆娣诲姞娣诲姞璁惧
  */
 - (void)addEzvizMonitor;
+
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ @param deviceType 璁惧绫诲瀷
+ */
+- (void)addEzvizMonitorWithDeviceType:(HDLEZDeviceType)deviceType;
+
 /**
  鏌ョ湅瑙嗛鐩戞帶鐩存挱
  */
@@ -57,5 +70,10 @@
 ////鏌ョ湅鍛婅淇℃伅
 //- (void)goToEZMessagePhotoVC:(EZAlarmInfo*)alarmInfo;
 
+/**涓存椂瀵嗙爜椤�
+ @param deviceId 璁惧id
+ */
+- (void)toTemPassView:(NSString*)deviceId;
+
 
 @end
diff --git a/EZSDK/EZSDK/EZSDK.m b/EZSDK/EZSDK/EZSDK.m
index f8d0607..81b7859 100644
--- a/EZSDK/EZSDK/EZSDK.m
+++ b/EZSDK/EZSDK/EZSDK.m
@@ -19,7 +19,7 @@
 #import "EZDeviceTableViewController.h"
 #import "EZHCNetDeviceSDK.h"
 #import "EZMessagePhotoViewController.h"
-
+#import "HDLEZVisitorRecordViewController.h"
 
 
 
@@ -45,8 +45,8 @@
  */
 - (BOOL)initLibWithAppKey:(NSString *)appKey globalAppKey:(NSString *)globalAppKey
 {
-  
     if (!isHavelibInit) {
+        [EZOPENSDK setDebugLogEnable:YES];
         //        isHavelibInit=YES;
         //        NSLog(@"绗竴娆″垵濮嬪寲钀ょ煶搴�");
         if (!LanguageIsChinese) {
@@ -55,13 +55,15 @@
             NSLog(@"娴峰鐗坘ey--%@",globalAppKey);
         }else{
             isHavelibInit = [EZOpenSDK initLibWithAppKey:appKey];
+            [[GlobalKit shareKit] setHdlAppKey:appKey];
             NSLog(@"鍥藉唴鐗坘ey--%@", appKey);
         }
-        
         [EZHCNetDeviceSDK initSDK];
         [EZOPENSDK enableP2P:YES];
-        [EZOPENSDK setDebugLogEnable:YES];
+//        [EZOPENSDK setDebugLogEnable:YES];
         NSLog(@"EZOpenSDK Version = %@", [EZOPENSDK getVersion]);
+//        NSLog(@"EZOpenSDK treamToken= %@", );
+
     }
     return isHavelibInit;
 }
@@ -135,17 +137,35 @@
  */
 -(void)addEzvizMonitor
 {
+//    //    NSLog(@"娣诲姞鎽勫儚澶�");
+//    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
+//        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
+//        EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
+//        [[self getCurrentVC] setNavigationBarHidden:NO];
+//        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
+//    } else {
+//        //        [UIView dd_showMessage:@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�"];
+//        NSLog(@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�");
+//    }
+    [self addEzvizMonitorWithDeviceType:HDLEZDeviceType_Default];
+}
+
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ @param deviceType 璁惧绫诲瀷
+ */
+- (void)addEzvizMonitorWithDeviceType:(HDLEZDeviceType)deviceType{
     //    NSLog(@"娣诲姞鎽勫儚澶�");
     if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
         UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
         EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
+        rootViewController.deviceType=deviceType;
         [[self getCurrentVC] setNavigationBarHidden:NO];
         [[self getCurrentVC] pushViewController:rootViewController animated:YES];
     } else {
         //        [UIView dd_showMessage:@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�"];
         NSLog(@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�");
     }
-    
 }
 
 /**
@@ -205,6 +225,16 @@
     [[self getCurrentVC] pushViewController:playBackVC animated:YES];
 }
 
+/**涓存椂瀵嗙爜椤�
+ @param deviceId 璁惧id
+ */
+- (void)toTemPassView:(NSString*)deviceId{
+    HDLEZVisitorRecordViewController *vc=[[HDLEZVisitorRecordViewController alloc] init];
+    vc.deviceId=deviceId;
+    [[self getCurrentVC] setNavigationBarHidden:YES];
+    [[self getCurrentVC] pushViewController:vc animated:YES];
+}
+
 ////
 //-(void)goToEZMessagePhotoVC:(EZAlarmInfo*)alarmInfo{
 //    UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
diff --git a/EZSDK/EZSDK/SDK/include/EZConstants.h b/EZSDK/EZSDK/SDK/include/EZConstants.h
index 1d6ea09..edc3b24 100644
--- a/EZSDK/EZSDK/SDK/include/EZConstants.h
+++ b/EZSDK/EZSDK/SDK/include/EZConstants.h
@@ -18,7 +18,7 @@
  
  @param result 鏄惁鎴愬姛
  */
-- (void) ezvizLoginResult:(BOOL) result;
+- (void)ezvizLoginResult:(BOOL)result;
 
 @end
 
@@ -33,7 +33,7 @@
     EZ_DEVICE_TTS_INTER_ERROR = 360004,               //TTS鍐呴儴鍙戠敓閿欒
     EZ_DEVICE_TTS_SEND_ERROR = 360005,                //瀹㈡埛绔彂閫佺殑娑堟伅閿欒
     EZ_DEVICE_TTS_RECEIVE_ERROR = 360006,             //瀹㈡埛绔帴鏀跺彂鐢熼敊璇�
-    EZ_DEVICE_TTS_CLOSE_CONNECT = 360007,             // TTS鍏抽棴浜嗕笌瀹㈡埛绔殑杩炴帴
+    EZ_DEVICE_TTS_CLOSE_CONNECT = 360007,             //TTS鍏抽棴浜嗕笌瀹㈡埛绔殑杩炴帴
     EZ_DEVICE_TTS_TALKING = 360010,                   //璁惧姝e湪瀵硅涓�
     EZ_DEVICE_TTS_PRIVACY_PROTECT = 360013,           //璁惧寮�鍚簡闅愮淇濇姢
     EZ_DEVICE_TTS_INIT_ERROR = 360102,                //TTS鍒濆鍖栧け璐�
@@ -102,6 +102,7 @@
     EZ_HTTPS_OPERATE_LEAVE_MSG_FAIL = 120202,         //鎿嶄綔鐣欒█娑堟伅澶辫触
     EZ_HTTPS_SERVER_DATA_ERROR = 149999,              //鏁版嵁寮傚父
     EZ_HTTPS_SERVER_ERROR = 150000,                   //鏈嶅姟鍣ㄥ紓甯�
+    EZ_HTTPS_CLOUD_DELETE_ALL_EXCEPT_LAST = 150002,   //浜戝瓨鍌ㄨ棰戝垹闄ゅ畬鎴愶紝闄や簡鏈�鍚庝竴涓湪褰曞埗鐨勮棰戞棤娉曞垹闄�
     EZ_HTTPS_DEVICE_PTZ_NOT_SUPPORT = 160000,         //璁惧涓嶆敮鎸佷簯鍙版帶鍒�
     EZ_HTTPS_DEVICE_PTZ_NO_PERMISSION = 160001,       //鐢ㄦ埛娌℃湁鏉冮檺鎿嶄綔浜戝彴鎺у埗
     EZ_HTTPS_DEVICE_PTZ_UPPER_LIMIT = 160002,         //浜戝彴杈惧埌涓婇檺浣嶏紙椤堕儴锛�
@@ -132,7 +133,7 @@
     EZ_NPC_CLIENT_MEMORY_ERROR = 500003,              //鍒嗛厤鍐呭瓨澶辫触
     EZ_NPC_CLIENT_BUFFER_OVERFLOW_ERROR = 500004,     //缂撳啿鍖烘孩鍑�
     EZ_NPC_CLIENT_SYSTEM_NO_SUPPORT_ERROR = 500005,   //绯荤粺涓嶆敮鎸�
-    EZ_NPC_CLIENT_INVALID_PORT_ERROR = 500006,         //鏃犳晥绔彛
+    EZ_NPC_CLIENT_INVALID_PORT_ERROR = 500006,        //鏃犳晥绔彛
     EZ_NPC_CLIENT_STREAM_CLOSE_ERROR = 500101,        //娴佸叧闂�
     EZ_NPC_CLIENT_TRACK_CLOSE_ERROR = 500102,         //TRACK_CLOSE
     EZ_NPC_CLIENT_NPCCREATE_ERROR = 500103,           //鍒涘缓澶辫触
@@ -140,15 +141,7 @@
     EZ_NPC_CLIENT_FAIL_UNKNOWN_ERROR = 509999,        //FAIL_UNKNOWN
 };
 
-/* WiFi閰嶇疆璁惧鐘舵�� */
-typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
-    DEVICE_WIFI_CONNECTING = 1,   //璁惧姝e湪杩炴帴WiFi
-    DEVICE_WIFI_CONNECTED = 2,    //璁惧杩炴帴WiFi鎴愬姛  (宸插簾寮� v4.16.0)
-    DEVICE_PLATFORM_REGISTED = 3, //璁惧娉ㄥ唽骞冲彴鎴愬姛
-    DEVICE_ACCOUNT_BINDED = 4     //璁惧宸茬粡缁戝畾璐︽埛  (宸插簾寮� v4.16.0)
-};
-
-/* 璁惧ptz鍛戒护 */
+/* 璁惧ptz鍛戒护锛屽畾涔夌殑鍊间笌Android瀹氫箟鐨勪笉涓�鏍凤紝SDK浼氬湪鍐呴儴浼氬仛涓�灞傝浆鎹� */
 typedef NS_OPTIONS(NSUInteger, EZPTZCommand) {
     EZPTZCommandLeft            = 1 << 0, //鍚戝乏鏃嬭浆
     EZPTZCommandRight           = 1 << 1, //鍚戝彸鏃嬭浆
@@ -202,44 +195,26 @@
 };
 
 /* 閫氶亾娓呮櫚搴︼紝璇锋敞鎰忎笉鏄墍鏈夎澶囬兘鏈夎繖浜涙竻鏅板害鐨勶紝璇锋牴鎹疄闄呭満鏅娇鐢� */
-typedef NS_ENUM(NSInteger, EZVideoLevelType)
-{
+typedef NS_ENUM(NSInteger, EZVideoLevelType) {
     EZVideoLevelLow       = 0,  //娴佺晠
     EZVideoLevelMiddle    = 1,  //鍧囪 
     EZVideoLevelHigh      = 2,  //楂樻竻
     EZVideoLevelSuperHigh = 3   //瓒呮竻
 };
 
-/* 钀ょ煶鐮斿彂鐨凙PP */
-typedef NS_ENUM(NSInteger, EZAppType)
-{
-    EZEzviz                 = 0,  //钀ょ煶浜戣棰戝浗鍐呯増
-    EZEzvizInternational    = 1,  //钀ょ煶浜戣棰戞捣澶栫増
-    EZHIKConnect            = 2,  //HIK-Connect
+/* 褰曞儚绫诲瀷 */
+typedef NS_ENUM(NSUInteger, EZVideoRecordType) {
+    EZVideoRecordTypeAll,     // 鎵�鏈夌被鍨�
+    EZVideoRecordTypeCMR,     // 瀹氭椂褰曞儚
+    EZVideoRecordTypeEvent    // 浜嬩欢绫诲瀷
 };
 
-/* 钀ょ煶璐熻矗鐮斿彂鐨凙PP */
-typedef NS_ENUM(NSInteger, EZAppPageType)
-{
-    EZPageDeviceList        = 0,  //璁惧鍒楄〃椤甸潰
-    EZPageAlarmList         = 1,  //鍛婅娑堟伅鍒楄〃椤甸潰
+/* 浜戝瓨鍌ㄥ綍鍍忕被鍨� */
+typedef NS_ENUM(NSInteger, EZCloudVideoType) {
+    EZCloudVideoTypeAll = -1,   // 鍏ㄩ儴褰曞儚
+    EZCloudVideoTypeSeries = 1, // 杩炵画褰曞儚
+    EZCloudVideoTypeAct = 2     // 娲诲姩褰曞儚
 };
-
-/* 閰嶇綉鏂瑰紡 */
-typedef NS_ENUM(NSInteger, EZWiFiConfigMode)
-{
-    EZWiFiConfigSmart        = 1 << 0,  //smart config
-    EZWiFiConfigWave         = 1 << 1,  //澹版尝閰嶇綉
-};
-
-///闇�瑕佽繘琛岄噸鏂扮櫥褰曠殑閫氱煡锛岃閫氱煡瑙﹀彂棰戠巼涓�5骞翠竴娆★紝闇�鍦⊿DK鍒濆鍖栫洃鍚�
-extern const NSNotificationName EZNeedReloginNotification;
-
-///閿欒瑙e喅鏂规KEY
-extern const NSString *EZErrorSolutionKey;
-
-///閿欒妯″潡閿欒鐮並EY
-extern const NSString *EZErrorModuleCodeKey;
 
 /// 寮�鏀惧钩鍙板父閲忕被
 @interface EZConstants : NSObject
diff --git a/EZSDK/EZSDK/SDK/include/EZConstants_Auth.h b/EZSDK/EZSDK/SDK/include/EZConstants_Auth.h
new file mode 100644
index 0000000..1d70767
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/EZConstants_Auth.h
@@ -0,0 +1,52 @@
+//
+//  EZConstants_Auth.h
+//  Auth
+//
+//  Created by JuneCheng on 2022/5/18.
+//
+
+#import <Foundation/Foundation.h>
+
+// 钀ょ煶寮�鏀惧钩鍙板鎵樻柟娉�
+@protocol EZAuthSDKDelegate <NSObject>
+
+@optional
+
+/**
+ 钀ょ煶鐧诲綍鏄惁鎴愬姛
+ 
+ @param result 鏄惁鎴愬姛
+ */
+- (void)ezvizLoginResult:(BOOL)result;
+
+@end
+
+/* 钀ょ煶鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppType) {
+    EZEzviz                 = 0,  // 钀ょ煶浜戣棰戝浗鍐呯増
+    EZEzvizInternational    = 1,  // 钀ょ煶浜戣棰戞捣澶栫増
+    EZHIKConnect            = 2,  // HIK-Connect
+};
+
+/* 钀ょ煶璐熻矗鐮斿彂鐨凙PP */
+typedef NS_ENUM(NSInteger, EZAppPageType) {
+    EZPageDeviceList        = 0,  // 璁惧鍒楄〃椤甸潰
+    EZPageAlarmList         = 1,  // 鍛婅娑堟伅鍒楄〃椤甸潰
+};
+
+///闇�瑕佽繘琛岄噸鏂扮櫥褰曠殑閫氱煡锛岃閫氱煡瑙﹀彂棰戠巼涓�5骞翠竴娆★紝闇�鍦⊿DK鍒濆鍖栫洃鍚�
+extern const NSNotificationName EZNeedReloginNotification;
+
+///閿欒瑙e喅鏂规KEY
+extern NSErrorUserInfoKey const EZErrorSolutionKey;
+
+///閿欒妯″潡閿欒鐮並EY
+extern NSErrorUserInfoKey const EZErrorModuleCodeKey;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConstants_Auth : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/EZConstants_WifiConfig.h b/EZSDK/EZSDK/SDK/include/EZConstants_WifiConfig.h
new file mode 100644
index 0000000..97dd69d
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/EZConstants_WifiConfig.h
@@ -0,0 +1,36 @@
+//
+//  EZConstants_WifiConfig.h
+//  WifiConfig
+//
+//  Created by JuneCheng on 2022/5/6.
+//
+
+#ifndef EZConstants_WifiConfig_h
+#define EZConstants_WifiConfig_h
+
+/* 閰嶇綉鏂瑰紡 */
+typedef NS_ENUM(NSInteger, EZWiFiConfigMode) {
+    EZWiFiConfigSmart        = 1 << 0,  // smart config
+    EZWiFiConfigWave         = 1 << 1,  // 澹版尝閰嶇綉
+};
+
+/* WiFi閰嶇疆璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
+    DEVICE_WIFI_CONNECTING = 1,   //璁惧姝e湪杩炴帴WiFi
+    DEVICE_WIFI_CONNECTED = 2,    //璁惧杩炴帴WiFi鎴愬姛  (宸插簾寮� v4.16.0)
+    DEVICE_PLATFORM_REGISTED = 3, //璁惧娉ㄥ唽骞冲彴鎴愬姛
+    DEVICE_ACCOUNT_BINDED = 4,    //璁惧宸茬粡缁戝畾璐︽埛  (宸插簾寮� v4.16.0)
+    DEVICE_WIFI_SENT_SUCCESS = 5, //鍚戣澶囧彂閫乄iFi淇℃伅鎴愬姛
+    DEVICE_WIFI_SENT_FAILED = 6,  //鍚戣澶囧彂閫乄iFi淇℃伅澶辫触
+    DEVICE_PLATFORM_REGIST_FAILED = 7, //璁惧娉ㄥ唽骞冲彴澶辫触锛岃疆璇�20娆★紝20娆℃湭鏌ヨ鍒拌澶囦笂绾胯涓烘敞鍐屽钩鍙板け璐�
+};
+
+/* New AP閰嶇綉璁惧鐘舵�� */
+typedef NS_ENUM(NSInteger, EZNewAPConfigStatus) {
+    EZNewAPConfigStatusConnectSuccess          = 104,    // 杩炴帴鎴愬姛
+    EZNewAPConfigStatusUnknow                  = 105,    // 鏈煡閿欒
+    EZNewAPConfigStatusPasswordError           = 106,    // 瀵嗙爜閿欒
+    EZNewAPConfigStatusNoAPFound               = 201,    // 鏈壘鍒皐ifi鐑偣
+};
+
+#endif /* EZConstants_WifiConfig_h */
diff --git a/EZSDK/EZSDK/SDK/include/EZGlobalSDK.h b/EZSDK/EZSDK/SDK/include/EZGlobalSDK.h
index e4c919a..90f7cc9 100644
--- a/EZSDK/EZSDK/SDK/include/EZGlobalSDK.h
+++ b/EZSDK/EZSDK/SDK/include/EZGlobalSDK.h
@@ -1,31 +1,34 @@
 //
 //  EZGlobalSDK.h
-//  EZGlobalSDK
+//  EZOpenSDK
 //
-//  Created by DeJohn Dong on 16/7/14.
-//  Copyright 漏 2016骞� Ezviz. All rights reserved.
+//  Created by JuneCheng on 2022/7/18.
 //
 
 #import <Foundation/Foundation.h>
 #import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
 
-@class EZPlayer;
 @class EZAccessToken;
-@class EZDeviceInfo;
-@class EZCameraInfo;
-@class EZDeviceVersion;
-@class EZProbeDeviceInfo;
+@class EZPlayer;
 @class EZUserInfo;
+@class EZDeviceVersion;
+@class EZDeviceInfo;
+@class EZProbeDeviceInfo;
 @class EZDeviceUpgradeStatus;
 @class EZLeaveMessage;
 @class EZHiddnsDeviceInfo;
+@class EZDeviceCloudServiceInfo;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
 
-/// 姝ょ被涓篍ZGlobalSDK鎺ュ彛绫� 鐗瑰埆璇存槑锛�110001锛堝弬鏁伴敊璇級銆�110002锛圓ccessToken杩囨湡锛夈��149999銆�150000锛堟湇鍔$寮傚父锛夋槸鎵�鏈塰ttp鎺ュ彛锛堣繑鍥炲�兼槸NSOperation瀵硅薄鐨勫ぇ閮ㄥ垎鏄痟ttp鎺ュ彛锛夐兘浼氳繑鍥炵殑閫氱敤閿欒鐮侊紝400002涓烘帴鍙e弬鏁伴敊璇殑閫氱敤閿欒鐮�
+NS_ASSUME_NONNULL_BEGIN
+
 @interface EZGlobalSDK : NSObject
 
+#pragma mark - Auth璁よ瘉鐩稿叧Api
 
 /**
- *  @since 4.4.0
  *  瀹炰緥EZOpenSDK鎺ュ彛
  *
  *  @param appKey 浼犲叆鐢宠鐨刟ppKey
@@ -35,18 +38,51 @@
 + (BOOL)initLibWithAppKey:(NSString *)appKey;
 
 /**
- *  瀹炰緥EZGlobalSDK鎺ュ彛锛屽尯鍩熸湇鍔″櫒鍒囨崲鎺ュ彛
+ *  鍒濆鍖栨帴鍙o紝鍙缃湇鍔″櫒锛屾捣澶栫敤鎴蜂娇鐢ㄨ鍒濆鍖栨柟娉�
  *
  *  @param appKey 浼犲叆鐢宠鐨刟ppKey
- *  @param url apiUrl鍦板潃
+ *  @param apiUrl apiUrl鍦板潃
  *  @param authUrl auth鍦板潃
  *
  *  @return YES/NO
  */
-+ (BOOL)initLibWithAppKey:(NSString *)appKey url:(NSString *)url authUrl:(NSString *)authUrl;
++ (BOOL)initLibWithAppKey:(NSString *)appKey
+                      url:(NSString *)apiUrl
+                  authUrl:(NSString *)authUrl;
 
 /**
- *  @since 1.0.0
+ *  閿�姣丒ZOpenSDK鎺ュ彛
+ *
+ *  @return YES/NO
+ */
++ (BOOL)destoryLib;
+
+/**
+ *  璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ *  @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ *  @return YES/NO
+ */
++ (BOOL)setDebugLogEnable:(BOOL)enable;
+
+/**
+ *  璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ *  @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
+ *  鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
+ *
+ *  @param areaId areaId
+ *  @param block 鍥炶皟block
+*/
++ (void)openLoginPage:(NSString *)areaId
+           completion:(void (^)(EZAccessToken *accessToken))block;
+
+/**
  *  鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
  *
  *  @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
@@ -54,85 +90,275 @@
 + (void)setAccessToken:(NSString *)accessToken;
 
 /**
- *  @since 1.0.0
- *  閿�姣丒ZOpenSDK鏂规硶
- *
- *  @return YES/NO
- */
-+ (BOOL)destoryLib;
-
-/**
- *  @since 1.0.0
- *  鑾峰彇SDK鐗堟湰鍙�
- *
- *  @return 鐗堟湰鍙�
- */
-+ (NSString *)getVersion;
-
-/**
- *  @since 1.0.0
- *  璁剧疆p2p鍔熻兘鏄惁寮�鍚紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
- *
- *  @param enable p2p鏄惁寮�鍚�
- */
-+ (void)enableP2P:(BOOL)enable;
-
-/**
- *  @since 1.0.0
- *  鑾峰彇鍖哄煙鍒楄〃鎺ュ彛
- *
- *  @param completion 鍥炶皟block锛宎reaList涓殑鍏冪礌涓篍ZAreaInfo瀵硅薄
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getAreaList:(void (^)(NSArray *areaList, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰
- *
- *  @param block 鍥炶皟block
- */
-+ (void)openLoginPage:(NSString *)areaId
-           completion:(void (^)(EZAccessToken *accessToken))block;
-
-/**
- *  @since 1.0.0
  *  璐︽埛娉ㄩ攢鎺ュ彛
  *
  *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
  */
 + (void)logout:(void (^)(NSError *error))completion;
 
+
 /**
- *  @since 1.0.0
- *  鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
+ */
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZAuthSDKDelegate>)delegate;
+
+/**
+ *  鑾峰彇SDK鐗堟湰鍙锋帴鍙�
  *
- *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
- *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *  @return 鐗堟湰鍙�
+ */
++ (NSString *)getVersion;
+
+/**
+ *  鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param channelNo    璁惧閫氶亾鍙�
+ */
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
+
+/**
+ *  鎵撳紑淇敼瀵嗙爜涓棿椤�
+ *
+ *  @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
+ */
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
+
+/**
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ */
++ (BOOL)isLogin;
+
+/**
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
+ */
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
+
+/**
+ *  鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+                                  cameraNo:(NSInteger)cameraNo;
+
+/**
+ *  涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     铏氭嫙閫氶亾
+ *  @param useSubStream   鏄惁浣跨敤瀛愮爜娴�
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+                                  cameraNo:(NSInteger)cameraNo
+                              useSubStream:(BOOL)useSubStream;
+
+/**
+ *  鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ *
+ *  @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
+
+
+/**
+ *  閲婃斁EZPlayer瀵硅薄
+ *
+ *  @param player EZPlayer瀵硅薄
+ *
+ *  @return YES/NO
+ */
++ (BOOL)releasePlayer:(EZPlayer *)player;
+
+#pragma mark - 鍙栨祦鐩稿叧Api
+
+/**
+ *  璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
+ *
+ *  @param enable p2p鏄惁寮�鍚�
+ */
++ (void)enableP2P:(BOOL)enable;
+
+/**
+ *  娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ */
++ (void)clearStreamInfoCache;
+
+/**
+ *  鏄惁鏀寔鍥芥爣
+ *  @param enable YES or NO
+ */
++ (void)enableNationalStandard:(BOOL)enable;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
+ *  鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param beginTime    鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ *  @param endTime      鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
-                  completion:(void (^)(NSError *error))completion;
++ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
+                                           cameraNo:(NSInteger)cameraNo
+                                          beginTime:(NSDate *)beginTime
+                                            endTime:(NSDate *)endTime
+                                         completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
 
 /**
- *  @since 1.0.0
- *  璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *  鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
  *
- *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
- *  @param status     鍛婅娑堟伅鐘舵��
- *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param beginTime    鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ *  @param endTime      鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
  *
- *  @return opeartion
+ *  @return operation
  */
-+ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
-                    alarmStatus:(EZMessageStatus)status
-                     completion:(void (^)(NSError *error))completion;
-
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+                                            cameraNo:(NSInteger)cameraNo
+                                           beginTime:(NSDate *)beginTime
+                                             endTime:(NSDate *)endTime
+                                          completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
 
 /**
- *  @since 1.0.0
+ *  鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ *  @param beginTime    寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ *  @param endTime      缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ *  @param rectype      鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ *  @param bizType       璁惧褰掑睘涓氬姟鏉ユ簮
+ *  @param platFormId  骞冲彴ID
+ *  @param completion   鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+                                  cameraNo:(NSString *)cameraNo
+                                 beginTime:(NSDate *)beginTime
+                                   endTime:(NSDate *)endTime
+                                   recType:(NSInteger)rectype
+                                   bizType:(NSString *)bizType
+                                platFormId:(NSString *)platFormId
+                                completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param verifyCode   璁惧楠岃瘉鐮�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+                         verifyCode:(NSString *)verifyCode
+                         completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+                               pageSize:(NSInteger)pageSize
+                             completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+                                     pageSize:(NSInteger)pageSize
+                                   completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+                             completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ *  鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+                                completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ *  閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ *  @param isEncrypt    鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+                                      verifyCode:(NSString *)verifyCode
+                                         encrypt:(BOOL)isEncrypt
+                                      completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param deviceName   璁惧鍚嶇О
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+                           deviceSerial:(NSString *)deviceSerial
+                             completion:(void (^)(NSError *error))completion;
+
+/**
  *  鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
@@ -142,10 +368,408 @@
  *  @return operation
  */
 + (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
-                   completion:(void (^)(NSError *error))completion;
+                            completion:(void (^)(NSError *error))completion;
 
 /**
- *  @since 1.0.0
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+                                completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+                           storageIndex:(NSInteger)storageIndex
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+                                      completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ *  閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ *  @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ *  鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+                               cameraNo:(NSInteger)cameraNo
+                             completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ *  璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param videoLevel   閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ *  @param completion   鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ *  @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+                               cameraNo:(NSInteger)cameraNo
+                             videoLevel:(EZVideoLevelType)videoLevel
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ *  @param defence      甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+                        deviceSerial:(NSString *)deviceSerial
+                          completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ *  PTZ 鎺у埗鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param command      ptz鎺у埗鍛戒护
+ *  @param action       鎺у埗鍚姩/鍋滄
+ *  @param speed        浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+                            cameraNo:(NSInteger)cameraNo
+                             command:(EZPTZCommand)command
+                              action:(EZPTZAction)action
+                               speed:(NSInteger)speed
+                              result:(void (^)(NSError *error))resultBlock;
+
+/**
+ *  鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param command      鏄剧ず鎺у埗鍛戒护
+ *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+                cameraNo:(NSInteger)cameraNo
+                 command:(EZDisplayCommand)command
+                  result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 浜戝瓨鍌ㄧ浉鍏矨pi
+
+/**
+ *  妫�鏌ュ浗瀹舵槸鍚︽敮鎸佷簯瀛樺偍鏈嶅姟
+ *
+ *  @param completion 鍥炶皟
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)isSupportCloundService:(void (^)(BOOL isSupport, NSError *error))completion;
+
+/**
+ *  鏌ヨ浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getCloundDevicePackageInfo:(NSString *)deviceSerial
+                                           channelNo:(NSInteger)channelNo
+                                          completion:(void (^)(EZDeviceCloudServiceInfo *serviceInfo, NSError *error))completion;
+
+/**
+ *  浜戝瓨鍌ㄥ姛鑳芥殏鍋滄仮澶�
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param enable                   NO-绂佺敤锛孻ES-鍚敤
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setCloundServiceActive:(NSString *)deviceSerial
+                                       channelNo:(NSInteger)channelNo
+                                          enable:(BOOL)enable
+                                      completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏌ヨ鏌愭湀涓湁瑙嗛鏂囦欢鐨勫ぉ(鏃ユ湡)
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param month                     鏌ヨ鏌愭湀鍏锋湁浜戝瓨鍌ㄧ殑鏃ユ湡锛屾牸寮忎负yyyyMM
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDays:(NSString *)deviceSerial
+                                  channelNo:(NSInteger)channelNo
+                                      month:(NSString *)month
+                                 completion:(void (^)(NSArray<NSString *> *dayArray, NSError *error))completion;
+
+/**
+ *  鎸夎澶囬�氶亾鍒犻櫎鎵�鏈変簯瀛樺偍褰曞儚鐗囨
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)deleteAllCloudVideo:(NSString *)deviceSerial
+                                    channelNo:(NSInteger)channelNo
+                                   completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鍒犻櫎浜戝瓨鍌ㄥ綍鍍忕墖娈�
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param videos                   瑙嗛鏁扮粍锛堥檺鍒�30涓互鍐咃級
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)deleteCloudVideoFragment:(NSString *)deviceSerial
+                                         channelNo:(NSInteger)channelNo
+                                            videos:(NSArray *)videos
+                                        completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鎸夊ぉ澧為噺鏌ヨ浜戝瓨鍌ㄥ綍鍍忓垪琛ㄦ帴鍙�(姒傝淇℃伅)
+ *
+ *  @param deviceSerial     璁惧搴忓垪鍙�
+ *  @param channelNo            閫氶亾鍙�
+ *  @param videoType            褰曞儚绫诲瀷videoType
+ *  @param searchDate          鏌ユ壘鏂囦欢鏃ユ湡yyyy-MM-dd
+ *  @param maxCreateTime   鏌ユ壘鏂囦欢鐨勮捣濮嬫椂闂磞yyy-MM-dd HH:mm:ss锛岃淇濊瘉鍜宻earchDate鏄悓涓�澶╋紝鍚﹀垯鎶ラ敊銆傞粯璁や粠 yyyy-MM-dd 00:00:00寮�濮嬶紝闈炲繀濉紝鍙紶nil
+ *  @param completion          鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getIncrCloudVideos:(NSString *)deviceSerial
+                                   channelNo:(NSInteger)channelNo
+                                   videoType:(EZCloudVideoType)videoType
+                                  searchDate:(NSString *)searchDate
+                               maxCreateTime:(NSString *)maxCreateTime
+                                  completion:(void (^)(NSArray *abstractvideos, NSError *error))completion;
+
+/**
+ *  鏍规嵁鏂囦欢id鎵归噺鏌ヨ璇︽儏淇℃伅鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param channelNo        閫氶亾鍙�
+ *  @param videos               褰曞儚姒傝淇℃伅鏁扮粍
+ *  @param completion      鍥炶皟block
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getCloudVideoDetails:(NSString *)deviceSerial
+                                     channelNo:(NSInteger)channelNo
+                                        videos:(NSArray *)videos
+                                    completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param pageIndex    鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ *  @param pageSize     鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ *  @param beginTime    鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ *  @param endTime      鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
+                             pageIndex:(NSInteger)pageIndex
+                              pageSize:(NSInteger)pageSize
+                             beginTime:(NSDate *)beginTime
+                               endTime:(NSDate *)endTime
+                            completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ *  @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ *  鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *  @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ *  @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ *  璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ *  @param status     鍛婅娑堟伅鐘舵��
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+                             alarmStatus:(EZMessageStatus)status
+                              completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
+ *
+ *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+                           completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *
+ *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ *  @param type         娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+                                    messageType:(EZMessageType)type
+                                     completion:(void (^)(NSInteger count, NSError *error))completion;
+
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
+ *
+ *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ *  @param beginTime    寮�濮嬫椂闂�
+ *  @param endTime      缁撴潫鏃堕棿
+ *  @param pageIndex    鍒嗛〉椤电爜
+ *  @param pageSize     鍒嗛〉鍗曢〉鏁伴噺
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+                                    pageIndex:(NSInteger)pageIndex
+                                     pageSize:(NSInteger)pageSize
+                                    beginTime:(NSDate *)beginTime
+                                      endTime:(NSDate *)endTime
+                                   completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
+ *
+ *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ *  @param status     闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+                                  messageStatus:(EZMessageStatus)status
+                                     completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
+ *
+ *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+                                  completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ *  @param message    鐣欒█娑堟伅瀵硅薄
+ *  @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ *  @return operation
+ */
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+                          completion:(void (^)(NSData *data, NSInteger resultCode))completion;
+
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
+
+/**
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
+ */
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+                       completion:(void (^)(id watchServerInfo, NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
+
+/**
+ *  灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *  @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+                               deviceType:(NSString *)deviceType
+                               completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
  *  WiFi閰嶇疆寮�濮嬫帴鍙�
  *
  *  @param ssid         杩炴帴WiFi SSID
@@ -161,140 +785,130 @@
            deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
 
 /**
- *  @since 1.0.0
+ *  WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ *  @param ssid         杩炴帴WiFi SSID
+ *  @param password     杩炴帴WiFi 瀵嗙爜
+ *  @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ *  @param mode         閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ *  @param statusBlock  杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ *  @return YES/NO
+ */
++ (BOOL)startConfigWifi:(NSString *)ssid
+               password:(NSString *)password
+           deviceSerial:(NSString *)deviceSerial
+                   mode:(NSInteger)mode
+           deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ *  @since 3.0.0
  *  Wifi閰嶇疆鍋滄鎺ュ彛
  *
  *  @return YES/NO
  */
 + (BOOL)stopConfigWifi;
 
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
 /**
- *  @since 1.0.0
- *  PTZ 鎺у埗鎺ュ彛
+ * AP閰嶇綉鎺ュ彛
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param command      ptz鎺у埗鍛戒护
- *  @param action       鎺у埗鍚姩/鍋滄
- *  @param speed        閫熷害 (鍙栧�艰寖鍥达細0-7鏁存暟鍊�)
- *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
  */
-+ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
-                   cameraNo:(NSInteger)cameraNo
-                    command:(EZPTZCommand)command
-                     action:(EZPTZAction)action
-                      speed:(NSInteger)speed
-                     result:(void (^)(NSError *error))resultBlock;
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+                         password:(NSString *)password
+                     deviceSerial:(NSString *)deviceSerial
+                       verifyCode:(NSString *)verifyCode
+                           result:(void (^)(BOOL ret))callback;
 
 /**
- *  @since 1.0.0
- *  鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param command      鏄剧ず鎺у埗鍛戒护
- *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
  */
-+ (void)controlVideoFlip:(NSString *)deviceSerial
-                cameraNo:(NSInteger)cameraNo
-                 command:(EZDisplayCommand)command
-                  result:(void (^)(NSError *error))resultBlock;
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+                         password:(NSString *)password
+                     deviceSerial:(NSString *)deviceSerial
+                       verifyCode:(NSString *)verifyCode
+                     deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
 
 /**
- *  @since 1.0.0
- *  鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *
- *  @return EZPlayer瀵硅薄
+ * 鍋滄AP閰嶇綉
  */
-+ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
-                                  cameraNo:(NSInteger)cameraNo;
++ (void)stopAPConfigWifi;
 
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
 
 /**
- *  @since 1.0.0
- *  鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
  *
- *  @param url 鎾斁url
+ * @param completion 鍥炶皟
  *
- *  @return EZPlayer瀵硅薄
+ * @return operation
  */
-+ (EZPlayer *)createPlayerWithUrl:(NSString *)url;
-
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
 
 /**
- *  @since 1.0.0
- *  閲婃斁EZPlayer瀵硅薄
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
  *
- *  @param player EZPlayer瀵硅薄
- *
- *  @return YES/NO
+ * @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL)releasePlayer:(EZPlayer *)player;
-
-#pragma mark - V3.1 鏂板鍔犳帴鍙�
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+                             ssid:(NSString *)ssid
+                         password:(NSString *)password
+                        lbsDomain:(NSString *)lbsDomain
+                completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
 
 /**
- *  @since 3.1.0
- *  鏁版嵁瑙e瘑
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
  *
- *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
- *  @param verifyCode 璁惧楠岃瘉鐮�
- *
- *  @return 瑙e瘑鐨凬SData瀵硅薄
+ * @param handler 鍥炶皟
  */
-+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
-
-
-#pragma mark - V3.2 鏂板鍔犳帴鍙�
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
 
 /**
- *  @since 1.0.0
- *  鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
+ * @param handler 鍥炶皟
  */
-+ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
-                       completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
-
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
 
 /**
- *  @since 1.0.0
- *  閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
  *
- *  @param isEncrypt    鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param verifyCode 璁惧楠岃瘉鐮�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
- *
- *  @return operation
+ * @return 鎴愬姛鎴栧け璐�
  */
-+ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
-                             verifyCode:(NSString *)verifyCode
-                                encrypt:(BOOL)isEncrypt
-                             completion:(void (^)(NSError *error))completion;
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+                                       completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
 
 /**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param deviceName   璁惧鍚嶇О
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
- *
- *  @return operation
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
  */
-+ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
-                  deviceSerial:(NSString *)deviceSerial
-                    completion:(void (^)(NSError *error))completion;
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
 
 /**
- *  @since 1.0.0
  *  鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
  *
  *  @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
@@ -303,353 +917,51 @@
  */
 + (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
 
+#pragma mark - 鍏朵粬Api
+
 /**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
+ *  鑾峰彇鍖哄煙鍒楄〃鎺ュ彛
  *
- *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
- *  @param type         娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
+ *  @param completion 鍥炶皟block锛宎reaList涓殑鍏冪礌涓篍ZAreaInfo瀵硅薄
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
-                           messageType:(EZMessageType)type
-                            completion:(void (^)(NSInteger count, NSError *error))completion;
++ (NSURLSessionDataTask *)getAreaList:(void (^)(NSArray *areaList, NSError *error))completion;
 
 /**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
- *
- *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
- *  @param beginTime    寮�濮嬫椂闂�
- *  @param endTime      缁撴潫鏃堕棿
- *  @param pageIndex    鍒嗛〉椤电爜
- *  @param pageSize     鍒嗛〉鍗曢〉鏁伴噺
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
-                           pageIndex:(NSInteger)pageIndex
-                            pageSize:(NSInteger)pageSize
-                           beginTime:(NSDate *)beginTime
-                             endTime:(NSDate *)endTime
-                          completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
- *
- *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
- *  @param status     闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
- *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
-                         messageStatus:(EZMessageStatus)status
-                            completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
- *
- *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
- *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
-                         completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
-                       completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
-                  storageIndex:(NSInteger)storageIndex
-                    completion:(void (^)(NSError *error))completion;
-/**
- *  @since 1.0.0
- *  灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
- *  @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *) deviceSerial
-                      deviceType:(NSString *) deviceType
-                      completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
-                             completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
-                    completion:(void (^)(NSError *error))completion;
-
-
-/**
- *  @since 1.0.0
- *  鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
- *  @param message    鐣欒█娑堟伅瀵硅薄
- *  @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
- *
- *  @return operation
- */
-+ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
-                          completion:(void (^)(NSData *data, NSInteger resultCode))completion;
-
-/**
- *  @since 1.0.0
- *  鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param channelNo    璁惧閫氶亾鍙�
- */
-+ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
-
-/**
- *  @since 1.0.0
- *  鎵撳紑淇敼瀵嗙爜涓棿椤�
- *
- *  @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
- */
-+ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
-
-/**
- *  @since 1.0.0
- *  璁剧疆鏄惁鎵撳嵃debug鏃ュ織锛岄渶鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
- *
- *  @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
- *
- *  @return YES/NO
- */
-+ (BOOL)setDebugLogEnable:(BOOL)enable;
-
-/**
- *  @since 1.0.0
- *  鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
- *
- *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
- *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
-                      pageSize:(NSInteger)pageSize
-                    completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
- *
- *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
- *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
-                            pageSize:(NSInteger)pageSize
-                          completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param beginTime    鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
- *  @param endTime      鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZCloudRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)searchRecordFileFromCloud:(NSString *)deviceSerial
-                                  cameraNo:(NSInteger)cameraNo
-                                 beginTime:(NSDate *)beginTime
-                                   endTime:(NSDate *)endTime
-                                completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param beginTime    鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
- *  @param endTime      鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
-                                   cameraNo:(NSInteger)cameraNo
-                                  beginTime:(NSDate *)beginTime
-                                    endTime:(NSDate *)endTime
-                                 completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param pageIndex    鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
- *  @param pageSize     鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
- *  @param beginTime    鎼滅储鏃堕棿鑼冨洿寮�濮嬫椂闂达紙鍙互涓虹┖锛宯il浠h〃涓虹┖锛�
- *  @param endTime      鎼滅储鏃堕棿鑼冨洿缁撴潫鏃堕棿锛堝彲浠ヤ负绌猴紝nil浠h〃涓虹┖锛�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZAlarmInfo鐨勫璞℃暟鎹拰鏌ヨ鏃堕棿鑼冨洿鍐呯殑鍛婅涓暟鐨勬�绘暟锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getAlarmList:(NSString *)deviceSerial
-                    pageIndex:(NSInteger)pageIndex
-                     pageSize:(NSInteger)pageSize
-                    beginTime:(NSDate *)beginTime
-                      endTime:(NSDate *)endTime
-                   completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param verifyCode   璁惧楠岃瘉鐮�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
-                verifyCode:(NSString *)verifyCode
-                completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
- *  @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
- *  鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
-                      cameraNo:(NSInteger)cameraNo
-                    completion:(void (^)(NSString *url, NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  璁剧疆璁惧閫氶亾鐨勬竻鏅板害
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param videoLevel   娓呮櫚搴�
- *  @param completion   鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
- *  @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
-                      cameraNo:(NSInteger)cameraNo
-                    videoLevel:(NSInteger)videoLevel
-                    completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 1.0.0
- *  璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
- *
- *  @param defence      甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
-               deviceSerial:(NSString *)deviceSerial
-                 completion:(void (^)(NSError *error))completion;
-
-#pragma mark - V4.3 鏂板鍔犳帴鍙�
-
-/**
- *  @since 4.3.0
- *  鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
-                    completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
-
-/**
- *  @since 4.3.0
  *  鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
  *
  *  @return 缁堢鍞竴璇嗗埆鐮�
  */
-+ (NSString *) getTerminalId;
-
-#pragma mark - V4.4 鏂板鍔犳帴鍙�
++ (NSString *)getTerminalId;
 
 /**
- *  @since 4.4.0
- *  push鍒濆鍖栨帴鍙o紝涓嶉渶瑕乸ush鏈嶅姟鍒欐棤闇�璋冪敤
+ 鏍规嵁搴旂敤绫诲瀷鍒ゆ柇鏄惁瀹夎浜嗗搴旂殑搴旂敤
+ 
+ @param appType 搴旂敤绫诲瀷
+ @return YES:宸插畨瑁咃紝NO:娌℃湁瀹夎鎴栧畨瑁呯殑钀ょ煶APP鐗堟湰杩囦綆
  */
-+ (void) initPushService;
+//+ (BOOL)isEzvizAppInstalledWithType:(EZAppType)appType;
 
-#pragma mark - V4.5 鏂板鍔犳帴鍙�
 
 /**
- 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ 璺宠浆鍒版寚瀹氳悿鐭矨PP杩涜鎺堟潈鐧诲綍
+
+ @param appType 钀ょ煶APP绫诲瀷
+ @return 璺宠浆缁撴灉
  */
-+ (void) clearStreamInfoCache;
+//+ (BOOL)ezvizLoginWithAppType:(EZAppType)appType;
 
+/**
+ 璺宠浆鍒版寚瀹欰PP鐨勬寚瀹氱晫闈�
+ 
+ @param pageType 鐣岄潰绫诲瀷
+ @param appType APP绫诲瀷
+ @return 璺宠浆缁撴灉
+ */
+//+ (BOOL)gotoEzvizAppPage:(EZAppPageType)pageType appType:(EZAppType)appType;
 
-#pragma mark - V4.7 鏂板鎺ュ彛
+#pragma mark - DDNS鐩稿叧
 
 /**
  *  閫氳繃璁惧搴忓垪鍙峰拰璁惧鍩熷悕鑾峰彇璁惧ddns淇℃伅
@@ -661,8 +973,8 @@
  *  @return operation
  */
 + (NSURLSessionDataTask *)getHiddnsDeviceInfo:(NSString *)deviceSerial
-                              domain:(NSString *) domain
-                          completion:(void (^)(EZHiddnsDeviceInfo *ddnsDeviceInfo, NSError *error))completion;
+                                       domain:(NSString *)domain
+                                   completion:(void (^)(EZHiddnsDeviceInfo *ddnsDeviceInfo, NSError *error))completion;
 
 /**
  *  璇ユ帴鍙g敤浜庤缃澶嘾dns鍩熷悕锛屽寘鎷缃垎浜幏寰楃殑璁惧鐨刣dns鍩熷悕
@@ -674,8 +986,8 @@
  *  @return operation
  */
 + (NSURLSessionDataTask *)setHiddnsDomain:(NSString *)deviceSerial
-                          domain:(NSString *) domain
-                      completion:(void (^)(NSError *error))completion;
+                                   domain:(NSString *)domain
+                               completion:(void (^)(NSError *error))completion;
 
 /**
  *  璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓鸿嚜鍔ㄦ槧灏�
@@ -686,7 +998,7 @@
  *  @return operation
  */
 + (NSURLSessionDataTask *)setHiddnsModeAuto:(NSString *)deviceSerial
-                        completion:(void (^)(NSError *error))completion;
+                                 completion:(void (^)(NSError *error))completion;
 
 /**
  *  璁剧疆璁惧鐨凞DNS鏄犲皠鏂瑰紡涓烘墜鍔ㄦ槧灏�
@@ -699,9 +1011,9 @@
  *  @return operation
  */
 + (NSURLSessionDataTask *)setHiddnsModeManual:(NSString *)deviceSerial
-                            httpPort:(NSInteger) httpPort
-                             cmdPort:(NSInteger) cmdPort
-                          completion:(void (^)(NSError *error))completion;
+                                     httpPort:(NSInteger)httpPort
+                                      cmdPort:(NSInteger)cmdPort
+                                   completion:(void (^)(NSError *error))completion;
 
 /**
  *  鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夎澶囩殑DDNS淇℃伅
@@ -712,9 +1024,9 @@
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)getHiddnsDeviceList:(NSInteger) pageIndex
-                            pageSize:(NSInteger) pageSize
-                          completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
++ (NSURLSessionDataTask *)getHiddnsDeviceList:(NSInteger)pageIndex
+                                     pageSize:(NSInteger)pageSize
+                                   completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
 
 /**
  *  鎶婂崟涓澶囩殑DDNS淇℃伅鍒嗕韩缁欏叾浠栬处鎴�
@@ -725,9 +1037,9 @@
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)shareHiddnsDevice:(NSString *) deviceSerial
-                           account:(NSString *) account
-                        completion:(void (^)(NSError *error))completion;
++ (NSURLSessionDataTask *)shareHiddnsDevice:(NSString *)deviceSerial
+                                    account:(NSString *)account
+                                 completion:(void (^)(NSError *error))completion;
 
 /**
  *  鑾峰彇褰撳墠璐﹀彿涓嬬殑鎵�鏈夌殑鍏跺畠璐︽埛鍒嗕韩缁欒嚜宸辩殑璁惧DDNS淇℃伅
@@ -738,173 +1050,10 @@
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)getShareHiddnsDeviceList:(NSInteger) pageIndex
-                                 pageSize:(NSInteger) pageSize
-                                    completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
-
-
-#pragma mark - V4.8.2 鏂板鍔犳帴鍙�
-
-/**
- 鏄惁宸茬粡鐧诲綍
- 
- @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
- */
-+ (BOOL) isLogin;
-
-/**
- 鑾峰彇褰撳墠accessToken
-
- @return accessToken
- */
-+ (NSString *) getAccesstoken;
-
-/**
- 鏍规嵁搴旂敤绫诲瀷鍒ゆ柇鏄惁瀹夎浜嗗搴旂殑搴旂敤
-
- @param appType 搴旂敤绫诲瀷
- @return YES:宸插畨瑁咃紝NO:娌℃湁瀹夎鎴栧畨瑁呯殑钀ょ煶APP鐗堟湰杩囦綆
- */
-+ (BOOL) isEzvizAppInstalledWithType:(EZAppType) appType;
-
-/**
- 璺宠浆鍒版寚瀹氳悿鐭矨PP杩涜鎺堟潈鐧诲綍
- 
- @param appType 钀ょ煶APP绫诲瀷
- @return 璺宠浆缁撴灉
- */
-+ (BOOL) ezvizLoginWithAppType:(EZAppType) appType;
-
-/**
- 璺宠浆鍒版寚瀹欰PP鐨勬寚瀹氱晫闈�
-
- @param pageType 鐣岄潰绫诲瀷
- @param appType APP绫诲瀷
- @return 璺宠浆缁撴灉
- */
-+ (BOOL) gotoEzvizAppPage:(EZAppPageType) pageType appType:(EZAppType) appType;
-
-/**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
- 
- @param url 璺宠浆杩囨潵鐨剈rl
- @param opetions 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
- @param delegate 濮旀墭
- @return 缁撴灉
- */
-+ (BOOL) handleOpenUrl:(NSURL *) url options:(NSDictionary *) opetions delegate:(id<EZOpenSDKDelegate>) delegate;
-
-/**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS8浠ヤ笅,鍖呮嫭iOS8
- 
- @param url 璺宠浆杩囨潵鐨剈rl
- @param delegate 濮旀墭
- @return 缁撴灉
- */
-+ (BOOL) handleOpenUrl:(NSURL *) url delegate:(id<EZOpenSDKDelegate>) delegate;
-
-/**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS8浠ヤ笅,鍖呮嫭iOS8
- 
- @param url 璺宠浆杩囨潵鐨剈rl
- @param sourceApplication 婧怉PP
- @param annotation 娉ㄩ噴
- @param delegate 濮旀墭
- @return 缁撴灉
- */
-+ (BOOL) handleOpenUrl:(NSURL *) url
-     sourceApplication:(NSString *)
-sourceApplication annotation:(id) annotation
-              delegate:(id<EZOpenSDKDelegate>) delegate;
-
-#pragma mark - V4.8.3 鏂板鍔犳帴鍙�
-
-/**
- *  @since 4.8.3
- *  WiFi閰嶇疆寮�濮嬫帴鍙�
- *
- *  @param ssid         杩炴帴WiFi SSID
- *  @param password     杩炴帴WiFi 瀵嗙爜
- *  @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
- *  @param mode         閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
- *  @param statusBlock  杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
- *
- *  @return YES/NO
- */
-+ (BOOL)startConfigWifi:(NSString *) ssid
-               password:(NSString *) password
-           deviceSerial:(NSString *) deviceSerial
-                   mode:(NSInteger) mode
-           deviceStatus:(void (^)(EZWifiConfigStatus status,NSString *deviceSerial))statusBlock;
-
-#pragma mark - V4.8.4
-/**
- AP閰嶇綉鎺ュ彛
- 
- @param ssid WiFi鐨剆sid
- @param password WiFi鐨勫瘑鐮�
- @param deviceSerial 璁惧搴忓垪鍙�
- @param verifyCode 璁惧楠岃瘉鐮�
- @param callback 缁撴灉鍥炶皟
- @return 鎴愬姛鎴栧け璐�
- */
-+ (BOOL)startAPConfigWifiWithSsid:(NSString *) ssid
-                         password:(NSString *) password
-                     deviceSerial:(NSString *) deviceSerial
-                       verifyCode:(NSString *) verifyCode
-                           result:(void (^)(BOOL ret)) callback;
-
-/**
- 鍋滄AP閰嶇綉
- */
-+ (void)stopAPConfigWifi;
-
-#pragma mark - v4.10
-
-/// 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
-/// @param deviceId 璁惧搴忓垪鍙�
-/// @param completion operation
-+ (void)requestGetWatchServerInfo:(NSString *)deviceId
-                       completion:(void (^)(id watchServerInfo, NSError *error))completion;
-
-/// 鏄惁鏀寔鍥芥爣
-/// @param enable YES or NO
-+ (void)enableNationalStandard:(BOOL)enable;
-
-
-#pragma mark - v4.11
-
-/**
-*  @since 4.11.0
-*  璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
-*
-*  @param logCallback 鏃ュ織鍥炶皟
-*/
-+ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
-
-
-#pragma mark - v4.13
-/**
- *  鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
- *  @param beginTime    寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
- *  @param endTime      缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
- *  @param rectype      鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
- *  @param bizType       璁惧褰掑睘涓氬姟鏉ユ簮
- *  @param platFormId  骞冲彴ID
- *  @param completion   鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)searchRecordFile:(NSString *) deviceSerial
-                                  cameraNo:(NSString *) cameraNo
-                                 beginTime:(NSDate *) beginTime
-                                   endTime:(NSDate *) endTime
-                                   recType:(NSInteger) rectype
-                                   bizType:(NSString *)bizType
-                                platFormId:(NSString *)platFormId
-                                completion:(void (^)(id records, NSError *error))completion;
++ (NSURLSessionDataTask *)getShareHiddnsDeviceList:(NSInteger)pageIndex
+                                          pageSize:(NSInteger)pageSize
+                                        completion:(void (^)(NSArray *ddnsDeviceList, NSInteger totalCount, NSError *error))completion;
 
 @end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/EZHCNetDeviceSDK.h b/EZSDK/EZSDK/SDK/include/EZHCNetDeviceSDK.h
index 4573dad..fa3a71f 100644
--- a/EZSDK/EZSDK/SDK/include/EZHCNetDeviceSDK.h
+++ b/EZSDK/EZSDK/SDK/include/EZHCNetDeviceSDK.h
@@ -8,7 +8,7 @@
 
 #import <Foundation/Foundation.h>
 
-@class EZHCNetDeviceInfo,EZSADPDeviceInfo;
+@class EZHCNetDeviceInfo, EZSADPDeviceInfo;
 
 typedef NS_ENUM(int, EZPTZCommandType) {
     EZPTZCommandType_ZOOM_IN = 11,     /* 鐒﹁窛鍙樺ぇ(鍊嶇巼鍙樺ぇ) */
@@ -39,11 +39,10 @@
 
 @interface EZHCNetDeviceSDK : NSObject
 
-
 /**
  鍒濆鍖朣DK
  */
-+ (void) initSDK;
++ (void)initSDK;
 
 /**
  寮�濮嬫悳绱㈠眬鍩熺綉璁惧
@@ -51,19 +50,24 @@
  @param searchCallback 鎼滅储缁撴灉鍥炶皟锛屾瘡鎼滃埌涓�涓澶囬兘浼氬洖璋冧竴娆★紝璁惧淇℃伅EZSADPDeviceInfo
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL) startLocalSearch:(void(^)(EZSADPDeviceInfo *device,NSError *error)) searchCallback;
++ (BOOL)startLocalSearch:(void(^)(EZSADPDeviceInfo *device,NSError *error))searchCallback;
 
 /**
  鍋滄鎼滅储
 
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL) stopLocalSearch;
++ (BOOL)stopLocalSearch;
 
 /**
- 娓呮缁撴灉锛岄噸鏂版悳绱紝鍓嶆彁鏄箣鍓嶅紑鍚繃鎼滅储
+ 娓呴櫎缁撴灉锛岄噸鏂版悳绱紝鍓嶆彁鏄箣鍓嶅紑鍚繃鎼滅储
  */
-+ (void) research;
++ (void)research;
+
+/**
+ 鑾峰彇SADP鐗堟湰鍙�
+ */
++ (int)getSadpVersion;
 
 /**
  婵�娲昏澶囷紝璋冪敤stopLocalSearch鍚庡皢鏃犳硶婵�娲昏澶�
@@ -72,7 +76,7 @@
  @param pwd 婵�娲诲瘑鐮�
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL) activeDeviceWithSerial:(NSString *) serial pwd:(NSString *) pwd;
++ (BOOL)activeDeviceWithSerial:(NSString *)serial pwd:(NSString *)pwd;
 
 /**
  鐧诲綍灞�鍩熺綉璁惧
@@ -83,10 +87,10 @@
  @param port 璁惧绔彛鍙�
  @return 鐧诲綍閿欒鏃惰繑鍥瀗il
  */
-+ (EZHCNetDeviceInfo*) loginDeviceWithUerName:(NSString *) userName
-                                          pwd:(NSString *) pwd
-                                       ipAddr:(NSString *) ipAddr
-                                         port:(NSInteger) port;
++ (EZHCNetDeviceInfo *)loginDeviceWithUerName:(NSString *)userName
+                                          pwd:(NSString *)pwd
+                                       ipAddr:(NSString *)ipAddr
+                                         port:(NSInteger)port;
 
 /**
  鐧诲嚭灞�鍩熺綉璁惧
@@ -94,7 +98,7 @@
  @param userId 鐢ㄦ埛id
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL)logoutDeviceWithUserId:(NSInteger) userId;
++ (BOOL)logoutDeviceWithUserId:(NSInteger)userId;
 
 /**
  灞�鍩熺綉璁惧浜戝彴鎺у埗鎺ュ彛
@@ -105,11 +109,10 @@
  @param action 鍔ㄤ綔绫诲瀷 EZPTZActionType
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL) ptzControlWithUserId:(NSInteger) userId
-                    channelNo:(NSInteger) channelNo
-                      command:(EZPTZCommandType) command
-                       action:(EZPTZActionType) action;
-
++ (BOOL)ptzControlWithUserId:(NSInteger)userId
+                   channelNo:(NSInteger)channelNo
+                     command:(EZPTZCommandType)command
+                      action:(EZPTZActionType)action;
 
 /**
  璁剧疆鍔犲瘑鏂瑰紡
@@ -117,7 +120,7 @@
  @param encryptType 鍔犲瘑鏂瑰紡
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL) setEncryptType:(EZEncryptType) encryptType;
++ (BOOL)setEncryptType:(EZEncryptType)encryptType;
 
 /**
  AP閰嶇綉鎺ュ彛
@@ -129,11 +132,11 @@
  @param callback 缁撴灉鍥炶皟
  @return 鎴愬姛鎴栧け璐�
  */
-+ (BOOL)startAPConfigWifiWithSsid:(NSString *) ssid
-                         password:(NSString *) password
-                     deviceSerial:(NSString *) deviceSerial
-                       verifyCode:(NSString *) verifyCode
-                           result:(void (^)(BOOL ret)) callback;
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+                         password:(NSString *)password
+                     deviceSerial:(NSString *)deviceSerial
+                       verifyCode:(NSString *)verifyCode
+                           result:(void (^)(BOOL ret))callback;
 
 /**
  鍋滄AP閰嶇綉
diff --git a/EZSDK/EZSDK/SDK/include/EZOpenSDK.h b/EZSDK/EZSDK/SDK/include/EZOpenSDK.h
index 323d797..47fc8e3 100644
--- a/EZSDK/EZSDK/SDK/include/EZOpenSDK.h
+++ b/EZSDK/EZSDK/SDK/include/EZOpenSDK.h
@@ -1,13 +1,14 @@
 //
 //  EZOpenSDK.h
-//  EzvizOpenSDK
+//  EZOpenSDK
 //
-//  Created by DeJohn Dong on 15/9/10.
-//  Copyright (c) 2015骞� Ezviz. All rights reserved.
+//  Created by JuneCheng on 2022/7/18.
 //
 
-#import <UIKit/UIKit.h>
+#import <Foundation/Foundation.h>
 #import "EZConstants.h"
+#import "EZConstants_Auth.h"
+#import "EZConstants_WifiConfig.h"
 
 @class EZPlayer;
 @class EZDeviceInfo;
@@ -18,12 +19,15 @@
 @class EZProbeDeviceInfo;
 @class EZDeviceUpgradeStatus;
 @class EZLeaveMessage;
+@class EZWiFiItemInfo, EZAPDevInfo, EZConfigTokenInfo;
 
-/// 姝ょ被涓篍ZOpenSDK鎺ュ彛绫� 鐗瑰埆璇存槑锛�110001锛堝弬鏁伴敊璇級銆�110002锛圓ccessToken杩囨湡锛夈��149999銆�150000锛堟湇鍔$寮傚父锛夋槸鎵�鏈塰ttp鎺ュ彛锛堣繑鍥炲�兼槸NSOperation瀵硅薄鐨勫ぇ閮ㄥ垎鏄痟ttp鎺ュ彛锛夐兘浼氳繑鍥炵殑閫氱敤閿欒鐮侊紝400002涓烘帴鍙e弬鏁伴敊璇殑閫氱敤閿欒鐮�
+NS_ASSUME_NONNULL_BEGIN
+
 @interface EZOpenSDK : NSObject
 
+#pragma mark - Auth璁よ瘉鐩稿叧Api
+
 /**
- *  @since 3.0.0
  *  瀹炰緥EZOpenSDK鎺ュ彛
  *
  *  @param appKey 浼犲叆鐢宠鐨刟ppKey
@@ -46,7 +50,6 @@
                   authUrl:(NSString *)authUrl;
 
 /**
- *  @since 3.0.0
  *  閿�姣丒ZOpenSDK鎺ュ彛
  *
  *  @return YES/NO
@@ -54,23 +57,29 @@
 + (BOOL)destoryLib;
 
 /**
- *  @since 3.0.0
- *  鑾峰彇SDK鐗堟湰鍙锋帴鍙�
+ *  璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
  *
- *  @return 鐗堟湰鍙�
+ *  @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
+ *
+ *  @return YES/NO
  */
-+ (NSString *)getVersion;
++ (BOOL)setDebugLogEnable:(BOOL)enable;
 
 /**
- *  @since 3.0.0
+ *  璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
+ *
+ *  @param logCallback 鏃ュ織鍥炶皟
+ */
++ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
+
+/**
  *  鎵撳紑鎺堟潈鐧诲綍涓棿椤甸潰鎺ュ彛
  *
  *  @param block 鍥炶皟block
- */
+*/
 + (void)openLoginPage:(void (^)(EZAccessToken *accessToken))block;
 
 /**
- *  @since 3.0.0
  *  鎺堟潈鐧诲綍浠ュ悗缁橢ZOpenSDK璁剧疆accessToken鎺ュ彛
  *
  *  @param accessToken 鎺堟潈鐧诲綍鑾峰彇鐨刟ccessToken
@@ -78,113 +87,62 @@
 + (void)setAccessToken:(NSString *)accessToken;
 
 /**
- *  @since 3.0.0
  *  璐︽埛娉ㄩ攢鎺ュ彛
  *
  *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鐧诲嚭鎴愬姛
  */
 + (void)logout:(void (^)(NSError *error))completion;
 
+
 /**
- *  @since 3.0.0
- *  鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
- *
- *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
- *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
- *
- *  @return operation
+ 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
+
+ @param url 璺宠浆杩囨潵鐨剈rl
+ @param options 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
+ @param delegate 濮旀墭
+ @return 缁撴灉
  */
-+ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
-                  completion:(void (^)(NSError *error))completion;
++ (BOOL)handleOpenUrl:(NSURL *)url options:(NSDictionary *)options delegate:(id<EZOpenSDKDelegate>)delegate;
 
 /**
- *  @since 3.0.0
- *  璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *  鑾峰彇SDK鐗堟湰鍙锋帴鍙�
  *
- *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
- *  @param status     鍛婅娑堟伅鐘舵��
- *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
- *
- *  @return operation
+ *  @return 鐗堟湰鍙�
  */
-+ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
-                    alarmStatus:(EZMessageStatus)status
-                     completion:(void (^)(NSError *error))completion;
-
++ (NSString *)getVersion;
 
 /**
- *  @since 3.0.0
- *  鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *  鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
- *  @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
- *
- *  @return operation
+ *  @param channelNo    璁惧閫氶亾鍙�
  */
-+ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
-                   completion:(void (^)(NSError *error))completion;
++ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
 
 /**
- *  @since 3.0.0
- *  WiFi閰嶇疆寮�濮嬫帴鍙�
+ *  鎵撳紑淇敼瀵嗙爜涓棿椤�
  *
- *  @param ssid         杩炴帴WiFi SSID
- *  @param password     杩炴帴WiFi 瀵嗙爜
- *  @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
- *  @param statusBlock  杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
- *
- *  @return YES/NO
+ *  @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
  */
-+ (BOOL)startConfigWifi:(NSString *)ssid
-               password:(NSString *)password
-           deviceSerial:(NSString *)deviceSerial
-           deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
++ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
 
 /**
- *  @since 3.0.0
- *  Wifi閰嶇疆鍋滄鎺ュ彛
- *
- *  @return YES/NO
+ 鏄惁宸茬粡鐧诲綍
+
+ @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
  */
-+ (BOOL)stopConfigWifi;
++ (BOOL)isLogin;
 
 /**
- *  @since 3.0.0
- *  PTZ 鎺у埗鎺ュ彛
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param command      ptz鎺у埗鍛戒护
- *  @param action       鎺у埗鍚姩/鍋滄
- *  @param speed        浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
- *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
- *
- *  @return operation
+ 鑾峰彇褰撳墠accessToken
+
+ @return accessToken
  */
-+ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
-                   cameraNo:(NSInteger)cameraNo
-                    command:(EZPTZCommand)command
-                     action:(EZPTZAction)action
-                      speed:(NSInteger)speed
-                     result:(void (^)(NSError *error))resultBlock;
++ (NSString *)getAccesstoken;
+
+#pragma mark - 鎾斁鍣ㄥ垱寤篈pi
 
 /**
- *  @since 3.0.0
- *  鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param command      鏄剧ず鎺у埗鍛戒护
- *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
- */
-+ (void)controlVideoFlip:(NSString *)deviceSerial
-                cameraNo:(NSInteger)cameraNo
-                 command:(EZDisplayCommand)command
-                  result:(void (^)(NSError *error))resultBlock;
-
-/**
- *  @since 3.0.0
  *  鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
@@ -195,10 +153,31 @@
 + (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
                                   cameraNo:(NSInteger)cameraNo;
 
-+ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial strCameraNo:(NSString *)strCameraNo;
+/**
+ *  鏍规嵁cameraId鏋勯�燛ZPlayer瀵硅薄锛坒or 鍥芥爣锛�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param strCameraNo     閫氶亾鍙�
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+                               strCameraNo:(NSString *)strCameraNo DEPRECATED_MSG_ATTRIBUTE("use createPlayerWithDeviceSerial:cameraNo: instead");
 
 /**
- *  @since 3.0.0
+ *  涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     铏氭嫙閫氶亾
+ *  @param useSubStream   鏄惁浣跨敤瀛愮爜娴�
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (EZPlayer *)createPlayerWithDeviceSerial:(NSString *)deviceSerial
+                                  cameraNo:(NSInteger)cameraNo
+                              useSubStream:(BOOL)useSubStream;
+
+/**
  *  鏍规嵁url鏋勯�燛ZPlayer瀵硅薄 锛堜富瑕佺敤鏉ュ鐞嗚棰戝箍鍦虹殑鎾斁锛�
  *
  *  @param url 鎾斁url锛岀洰鍓嶅彧鏀寔璇ュ崗璁細ysproto://vtm.ys7.com:8554/live?dev=531993276&chn=1&stream=1&cln=1&isp=0&biz=3
@@ -209,7 +188,6 @@
 
 
 /**
- *  @since 3.0.0
  *  閲婃斁EZPlayer瀵硅薄
  *
  *  @param player EZPlayer瀵硅薄
@@ -218,234 +196,9 @@
  */
 + (BOOL)releasePlayer:(EZPlayer *)player;
 
-#pragma mark - V3.1 鏂板鍔犳帴鍙�
+#pragma mark - 鍙栨祦鐩稿叧Api
 
 /**
- *  @since 3.1.0
- *  鏁版嵁瑙e瘑
- *
- *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
- *  @param verifyCode 璁惧楠岃瘉鐮�
- *
- *  @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
- */
-+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
-
-
-#pragma mark - V3.2 鏂板鍔犳帴鍙�
-
-/**
- *  @since 3.2.0
- *  鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
-                       completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
-
-
-/**
- *  @since 4.2.0
- *  閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
- *
- *  @param isEncrypt    鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param verifyCode 璁惧楠岃瘉鐮�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
-                             verifyCode:(NSString *)verifyCode
-                                encrypt:(BOOL)isEncrypt
-                             completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param deviceName   璁惧鍚嶇О
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
-                  deviceSerial:(NSString *)deviceSerial
-                    completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
- *
- *  @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
- *
- *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
- *  @param type         娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
-                           messageType:(EZMessageType)type
-                            completion:(void (^)(NSInteger count, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
- *
- *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
- *  @param beginTime    寮�濮嬫椂闂�
- *  @param endTime      缁撴潫鏃堕棿
- *  @param pageIndex    鍒嗛〉椤电爜
- *  @param pageSize     鍒嗛〉鍗曢〉鏁伴噺
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
-                           pageIndex:(NSInteger)pageIndex
-                            pageSize:(NSInteger)pageSize
-                           beginTime:(NSDate *)beginTime
-                             endTime:(NSDate *)endTime
-                          completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
- *
- *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
- *  @param status     闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
- *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
-                         messageStatus:(EZMessageStatus)status
-                            completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
- *
- *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
- *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
-                         completion:(void (^)(NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
-                       completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
-                  storageIndex:(NSInteger)storageIndex
-                    completion:(void (^)(NSError *error))completion;
-/**
- *  @since 3.2.0
- *  灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
- *  @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *) deviceSerial
-                      deviceType:(NSString *) deviceType
-                      completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
-                             completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
-
-/**
- *  @since 3.2.0
- *  閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
- *
- *  @return operation
- */
-+ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
-                    completion:(void (^)(NSError *error))completion;
-
-
-/**
- *  @since 3.2.0
- *  鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
- *  @param message    鐣欒█娑堟伅瀵硅薄
- *  @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
- *
- *  @return operation
- */
-+ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
-                          completion:(void (^)(NSData *data, NSInteger resultCode))completion;
-
-/**
- *  @since 1.0.0
- *  鎵撳紑浜戝瓨鍌ㄤ腑闂撮〉
- *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param channelNo    璁惧閫氶亾鍙�
- */
-+ (void)openCloudPage:(NSString *)deviceSerial channelNo:(NSInteger)channelNo;
-
-#pragma mark - V3.3 鏂板鍔犳帴鍙�
-
-/**
- *  @since 3.3.0
- *  鎵撳紑淇敼瀵嗙爜涓棿椤�
- *
- *  @param completion 鍥炶皟block resultCode涓�0鏃惰〃绀轰慨鏀瑰瘑鐮佹垚鍔�
- */
-+ (void)openChangePasswordPage:(void (^)(NSInteger resultCode))completion;
-
-#pragma mark - V4.0 鏂板鍔犳帴鍙�
-
-/**
- *  @since 4.0.0
  *  璁剧疆p2p鍔熻兘鏄惁寮�鍚帴鍙o紝榛樿涓嶅紑鍚痯2p锛岀敤鎴疯嚜宸遍�夋嫨鏄惁寮�鍚�
  *
  *  @param enable p2p鏄惁寮�鍚�
@@ -453,47 +206,47 @@
 + (void)enableP2P:(BOOL)enable;
 
 /**
- *  @since 4.0.0
- *  璁剧疆鏄惁鎵撳嵃debug鏃ュ織,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
- *
- *  @param enable 鏄惁鎵撳嵃鏃ュ織锛岄粯璁ゅ叧闂�
- *
- *  @return YES/NO
+ *  娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
  */
-+ (BOOL)setDebugLogEnable:(BOOL)enable;
-
-#pragma mark - V4.2 鏂板鍔犳帴鍙�
++ (void)clearStreamInfoCache;
 
 /**
- *  @since 4.2.0
- *  鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
- *
- *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
- *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
+ *  鏄惁鏀寔鍥芥爣
+ *  @param enable YES or NO
  */
-+ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
-                               pageSize:(NSInteger)pageSize
-                             completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
++ (void)enableNationalStandard:(BOOL)enable;
 
 /**
- *  @since 4.2.0
- *  鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *  鑾峰彇鎵�鏈夌殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堝寘鎷鍦ㄨ繘琛岄鎿嶄綔鐨勪互鍙婇鎿嶄綔瀹屾垚鐨勶級
  *
- *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
- *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
- *
- *  @return operation
+ *  @return 璁惧搴忓垪鍙锋暟缁�
  */
-+ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
-                                     pageSize:(NSInteger)pageSize
-                                   completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
++ (NSArray<NSString *> *)getAllProcessedPreconnectSerials;
 
 /**
- *  @since 4.2.0
+ *  鑾峰彇鎵�鏈夋鍦ㄦ帓闃熺殑p2p棰勮繛鎺ヨ澶囧簭鍒楀彿锛堟寚杩樻病鏈夎繘琛岄鎿嶄綔鐨勶級
+ *
+ *  @return 璁惧搴忓垪鍙锋暟缁�
+ */
++ (NSArray<NSString *> *)getAllToDoPreconnectSerials;
+
+/**
+ *  瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ搷浣�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)startP2PPreconnect:(NSString *)deviceSerial;
+
+/**
+ *  瀵规煇涓�璁惧杩涜p2p棰勮繛鎺ユ竻闄ゆ搷浣�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ */
++ (void)clearP2PPreconnect:(NSString *)deviceSerial;
+
+#pragma mark - 褰曞儚鏌ヨApi
+
+/**
  *  鏌ヨ浜戝瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
@@ -511,7 +264,6 @@
                                          completion:(void (^)(NSArray *couldRecords, NSError *error))completion;
 
 /**
- *  @since 4.2.0
  *  鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙�
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
@@ -529,7 +281,277 @@
                                           completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
 
 /**
- *  @since 4.2.0
+ *  鏌ヨ杩滅▼SD鍗″瓨鍌ㄥ綍鍍忎俊鎭垪琛ㄦ帴鍙o紝鍚屼竴涓綍鍍忓彲浠ュ悓鏃舵槸瀹氭椂褰曞儚鍜屼簨浠跺綍鍍�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param beginTime    鏌ヨ鏃堕棿鑼冨洿寮�濮嬫椂闂�
+ *  @param endTime      鏌ヨ鏃堕棿鑼冨洿缁撴潫鏃堕棿
+ *  @param videoRecordType      褰曞儚绫诲瀷
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceRecordFile鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFileFromDevice:(NSString *)deviceSerial
+                                            cameraNo:(NSInteger)cameraNo
+                                           beginTime:(NSDate *)beginTime
+                                             endTime:(NSDate *)endTime
+                                     videoRecordType:(EZVideoRecordType)videoRecordType
+                                          completion:(void (^)(NSArray *deviceRecords, NSError *error))completion;
+
+/**
+ *  鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
+ *  @param beginTime    寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
+ *  @param endTime      缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
+ *  @param rectype      鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
+ *  @param bizType       璁惧褰掑睘涓氬姟鏉ユ簮
+ *  @param platFormId  骞冲彴ID
+ *  @param completion   鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)searchRecordFile:(NSString *)deviceSerial
+                                  cameraNo:(NSString *)cameraNo
+                                 beginTime:(NSDate *)beginTime
+                                   endTime:(NSDate *)endTime
+                                   recType:(NSInteger)rectype
+                                   bizType:(NSString *)bizType
+                                platFormId:(NSString *)platFormId
+                                completion:(void (^)(id records, NSError *error))completion;
+
+#pragma mark - 璁惧鐩稿叧Api
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param verifyCode   璁惧楠岃瘉鐮�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
+                         verifyCode:(NSString *)verifyCode
+                         completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鑾峰彇鐢ㄦ埛鎵�鏈夌殑璁惧鍒楄〃
+ *
+ *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceList:(NSInteger)pageIndex
+                               pageSize:(NSInteger)pageSize
+                             completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鑾峰彇鍒嗕韩缁欑敤鎴风殑璁惧鍒楄〃鎺ュ彛
+ *
+ *  @param pageIndex  鍒嗛〉褰撳墠椤电爜锛堜粠0寮�濮嬶級
+ *  @param pageSize   鍒嗛〉姣忛〉鏁伴噺锛堝缓璁�20浠ュ唴锛�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞℃暟缁勫拰璁惧鎬绘暟锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getSharedDeviceList:(NSInteger)pageIndex
+                                     pageSize:(NSInteger)pageSize
+                                   completion:(void (^)(NSArray *deviceList, NSInteger totalCount, NSError *error))completion;
+
+/**
+ *  鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
+                             completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ *  鑾峰彇璁惧鐨勭増鏈俊鎭帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceVersion鐨勫璞′俊鎭紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceVersion:(NSString *)deviceSerial
+                                completion:(void (^)(EZDeviceVersion *version, NSError *error))completion;
+
+/**
+ *  閫氳繃璁惧楠岃瘉鐮佸紑鍏宠棰戝浘鐗囧姞瀵嗘帴鍙�
+ *
+ *  @param isEncrypt    鏄惁鍔犲瘑锛屽彧鏈塏O(鍏抽棴)鐨勬椂鍊欓渶瑕佽澶囬獙璇佺爜鐨勭浉鍏冲弬鏁�(vaildateCode)
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceEncryptStatus:(NSString *)deviceSerial
+                                      verifyCode:(NSString *)verifyCode
+                                         encrypt:(BOOL)isEncrypt
+                                      completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙蜂慨鏀硅澶囧悕绉版帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param deviceName   璁惧鍚嶇О
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀轰慨鏀规垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDeviceName:(NSString *)deviceName
+                           deviceSerial:(NSString *)deviceSerial
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙峰垹闄ゅ綋鍓嶈处鍙风殑璁惧鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
+ *  @see 璇ユ帴鍙d笌缁堢缁戝畾鍔熻兘鐩稿叧锛屼細閬囧埌鍒犻櫎鏃舵姤106002鐨勯敊璇紝璇峰叧闂粓绔粦瀹氫互鍚庡啀璇�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)deleteDevice:(NSString *)deviceSerial
+                            completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧瓨鍌ㄤ粙璐ㄧ姸鎬�(濡傛槸鍚﹀垵濮嬪寲锛屾牸寮忓寲杩涘害绛�)
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZStorageInfo鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getStorageStatus:(NSString *)deviceSerial
+                                completion:(void (^)(NSArray *storageStatus, NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙峰拰鍒嗗尯缂栧彿鏍煎紡鍖栧垎鍖猴紙SD鍗★級
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param storageIndex 鏌ヨ杩斿洖鐨勫垎鍖哄彿锛�0琛ㄧず鍏ㄩ儴鏍煎紡鍖栵紝鍙兘浼氭湁鍑犲潡纭洏鐨勬儏鍐�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)formatStorage:(NSString *)deviceSerial
+                           storageIndex:(NSInteger)storageIndex
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囧崌绾ф椂鐨勮繘搴︾姸鎬�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZDeviceUpgradeStatus瀵硅薄锛岄敊璇椂杩斿洖閿欒鐮�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)getDeviceUpgradeStatus:(NSString *)deviceSerial
+                                      completion:(void (^)(EZDeviceUpgradeStatus *status, NSError *error))completion;
+
+/**
+ *  閫氳繃璁惧搴忓垪鍙峰璁惧杩涜鍗囩骇鎿嶄綔锛屽墠鎻愭槸璇ヨ澶囨湁鏇存柊杞欢鐨勬彁绀�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず鎿嶄綔鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)upgradeDevice:(NSString *)deviceSerial
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
+ *  @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
+ *  鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
+                               cameraNo:(NSInteger)cameraNo
+                             completion:(void (^)(NSString *url, NSError *error))completion;
+
+/**
+ *  璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param videoLevel   閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
+ *  @param completion   鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
+ *  @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
+                               cameraNo:(NSInteger)cameraNo
+                             videoLevel:(EZVideoLevelType)videoLevel
+                             completion:(void (^)(NSError *error))completion;
+
+/**
+ *  璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *
+ *  @param defence      甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
+                        deviceSerial:(NSString *)deviceSerial
+                          completion:(void (^)(NSError *error))completion;
+
+#pragma mark - 浜戝彴鎺у埗Api
+
+/**
+ *  PTZ 鎺у埗鎺ュ彛
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param command      ptz鎺у埗鍛戒护
+ *  @param action       鎺у埗鍚姩/鍋滄
+ *  @param speed        浜戝彴閫熷害锛�0-鎱紝1-閫備腑锛�2-蹇�
+ *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ *
+ *  @return operation
+ */
++ (NSURLSessionDataTask *)controlPTZ:(NSString *)deviceSerial
+                            cameraNo:(NSInteger)cameraNo
+                             command:(EZPTZCommand)command
+                              action:(EZPTZAction)action
+                               speed:(NSInteger)speed
+                              result:(void (^)(NSError *error))resultBlock;
+
+/**
+ *  鎽勫儚澶存樉绀烘帶鍒舵帴鍙�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     閫氶亾鍙�
+ *  @param command      鏄剧ず鎺у埗鍛戒护
+ *  @param resultBlock  鍥炶皟block锛屽綋error涓虹┖鏃惰〃绀烘搷浣滄垚鍔�
+ */
++ (void)controlVideoFlip:(NSString *)deviceSerial
+                cameraNo:(NSInteger)cameraNo
+                 command:(EZDisplayCommand)command
+                  result:(void (^)(NSError *error))resultBlock;
+
+#pragma mark - 鍛婅鐩稿叧Api
+
+/**
  *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栧憡璀︿俊鎭垪琛紝璁惧搴忓垪鍙蜂负nil鏃舵煡璇㈡暣涓处鎴蜂笅鐨勫憡璀︿俊鎭垪琛�
  *
  *  @param deviceSerial 璁惧搴忓垪鍙�
@@ -549,183 +571,216 @@
                             completion:(void (^)(NSArray *alarmList, NSInteger totalCount, NSError *error))completion;
 
 /**
- *  @since 4.2.0
- *  鏍规嵁璁惧搴忓垪鍙峰拰璁惧楠岃瘉鐮佹坊鍔犺澶囨帴鍙�
+ *  鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param verifyCode   璁惧楠岃瘉鐮�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖鏃惰〃绀烘坊鍔犳垚鍔�
+ *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *
+ *  @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
+
+/**
+ *  鍛婅鍥剧墖瑙e瘑鏂规硶锛岃澶囧姞瀵�
+ *
+ *  @param data       闇�瑕佽В瀵嗙殑鏁版嵁
+ *  @param verifyCode 璁惧楠岃瘉鐮�
+ *  @param type 1:璁惧鍔犲瘑锛�2锛氬钩鍙板姞瀵�
+ *
+ *  @return 瑙e瘑鐨凬SData瀵硅薄锛屽鏋滆繑鍥炵殑鏁版嵁鏄┖鐨勶紝璇锋鏌ュ瘑鐮佹槸鍚︽纭垨鑰呬紶鍏ョ殑鏁版嵁鏄惁姝g‘銆�
+ */
++ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
+
+/**
+ *  璁剧疆鍛婅淇℃伅涓哄凡璇绘帴鍙�
+ *
+ *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓猧d,鍚﹀垯浼氭姤閿�
+ *  @param status     鍛婅娑堟伅鐘舵��
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀鸿缃垚鍔�
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)addDevice:(NSString *)deviceSerial
-                verifyCode:(NSString *)verifyCode
-                completion:(void (^)(NSError *error))completion;
++ (NSURLSessionDataTask *)setAlarmStatus:(NSArray *)alarmIds
+                             alarmStatus:(EZMessageStatus)status
+                              completion:(void (^)(NSError *error))completion;
 
 /**
- *  @since 4.2.0
- *  鑾峰彇鎶撳彇鎽勫儚澶村浘鐗囩殑url鎺ュ彛
+ *  鏍规嵁alarmId鍒犻櫎鍛婅淇℃伅鎺ュ彛
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖url鍦板潃淇℃伅锛岄敊璇椂杩斿洖閿欒鐮�
- *  @see 璇ユ帴鍙f瘮杈冭�楁椂锛屼笉寤鸿杩涜鎵归噺璁惧鎶撳浘锛孲DK鍐呴儴鍙敮鎸�6涓猦ttp璇锋眰骞跺彂锛岃鎺ュ彛浼氭寔缁崰鐢╤ttp璇锋眰璧勬簮锛屽鏋滈亣鍒癶ttp璇锋眰寤舵椂宸ㄥぇ闂锛屼紭鍏堣�冭檻鎶撳浘鎺ュ彛骞跺彂閫犳垚鐨勯棶棰�,
- *  鎶撳浘灏嗗湪鏈嶅姟鍣ㄧ淇濈暀2涓皬鏃�
+ *  @param alarmIds   鍛婅淇℃伅Id鏁扮粍(鍙互鍙湁涓�涓狪d)锛屾渶澶氫负10涓狪d锛屽惁鍒欎細鎶ラ敊
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖鏃惰〃绀哄垹闄ゆ垚鍔�
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)captureCamera:(NSString *)deviceSerial
-                      cameraNo:(NSInteger)cameraNo
-                    completion:(void (^)(NSString *url, NSError *error))completion;
++ (NSURLSessionDataTask *)deleteAlarm:(NSArray *)alarmIds
+                           completion:(void (^)(NSError *error))completion;
 
 /**
- *  @since 4.2.0
- *  璁剧疆璁惧閫氶亾鐨勬竻鏅板害
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栨湭璇绘秷鎭暟锛岃澶囧簭鍒楀彿涓虹┖鏃惰幏鍙栨墍鏈夎澶囩殑鏈娑堟伅鏁�
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙�
- *  @param videoLevel   閫氶亾娓呮櫚搴︼紝0-娴佺晠锛�1-鍧囪 锛�2-楂樻竻锛�3-瓒呮竻
- *  @param completion   鍥炶皟block锛屾棤error琛ㄧず璁剧疆鎴愬姛
- *  @see 濡傛灉鏄鍦ㄦ挱鏀炬椂璋冪敤璇ユ帴鍙o紝璁剧疆娓呮櫚搴︽垚鍔熶互鍚庡繀椤昏EZPlayer璋冪敤stopRealPlay鍐嶈皟鐢╯tartRealPlay閲嶆柊鍙栨祦鎵嶆垚瀹屾垚鐢婚潰娓呮櫚搴︾殑鍒囨崲銆�
+ *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙凤紝涓虹┖鏃惰繑鍥炶处鎴蜂笅鎵�鏈夎澶囩殑鏈娑堟伅鏁�
+ *  @param type         娑堟伅绫诲瀷锛欵ZMessageTypeAlarm 鍛婅娑堟伅锛�1锛夛紝EZMessageTypeLeave 鐣欒█娑堟伅锛�2锛�
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖鏈鏁伴噺锛岄敊璇椂杩斿洖閿欒鐮�
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)setVideoLevel:(NSString *)deviceSerial
-                      cameraNo:(NSInteger)cameraNo
-                    videoLevel:(EZVideoLevelType)videoLevel
-                    completion:(void (^)(NSError *error))completion;
++ (NSURLSessionDataTask *)getUnreadMessageCount:(NSString *)deviceSerial
+                                    messageType:(EZMessageType)type
+                                     completion:(void (^)(NSInteger count, NSError *error))completion;
 
+#pragma mark - 璇煶鐣欒█娑堟伅鏁版嵁Api
 
 /**
- *  @since 4.2.0
- *  璁惧璁剧疆甯冮槻鐘舵�侊紝鍏煎A1鍜孖PC璁惧鐨勫竷闃�
+ *  鏍规嵁璁惧搴忓垪鍙疯幏鍙栬澶囩殑鐣欒█娑堟伅鍒楄〃
  *
- *  @param defence      甯冮槻鐘舵��, IPC甯冮槻鐘舵�佸彧鏈�0鍜�1锛孉1鏈�0:鐫$湢 8:鍦ㄥ 16:澶栧嚭
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion   鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
+ *  @param deviceSerial 闇�瑕佽幏鍙栫殑璁惧搴忓垪鍙�
+ *  @param beginTime    寮�濮嬫椂闂�
+ *  @param endTime      缁撴潫鏃堕棿
+ *  @param pageIndex    鍒嗛〉椤电爜
+ *  @param pageSize     鍒嗛〉鍗曢〉鏁伴噺
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZLeaveMessage鐨勫璞℃暟缁勶紝閿欒鏃惰繑鍥為敊璇爜
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)setDefence:(EZDefenceStatus)defence
-               deviceSerial:(NSString *)deviceSerial
-                 completion:(void (^)(NSError *error))completion;
-
-#pragma mark - V4.3 鏂板鍔犳帴鍙�
++ (NSURLSessionDataTask *)getLeaveMessageList:(NSString *)deviceSerial
+                                    pageIndex:(NSInteger)pageIndex
+                                     pageSize:(NSInteger)pageSize
+                                    beginTime:(NSDate *)beginTime
+                                      endTime:(NSDate *)endTime
+                                   completion:(void (^)(NSArray *leaveMessageList, NSInteger totalCount, NSError *error))completion;
 
 /**
- *  @since 4.3.0
- *  鏍规嵁搴忓垪鍙疯幏鍙栬澶囦俊鎭�
+ *  鏍规嵁leaveId璁剧疆鐣欒█娑堟伅鐘舵��
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZDeviceInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
+ *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ *  @param status     闇�瑕佽缃殑鐣欒█鐘舵�侊紝鐩墠鍙敮鎸� EZMessageStatusRead(宸茶)
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず璁剧疆鎴愬姛
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)getDeviceInfo:(NSString *)deviceSerial
-                    completion:(void (^)(EZDeviceInfo *deviceInfo, NSError *error))completion;
++ (NSURLSessionDataTask *)setLeaveMessageStatus:(NSArray *)leaveIds
+                                  messageStatus:(EZMessageStatus)status
+                                     completion:(void (^)(NSError *error))completion;
 
 /**
- *  @since 4.3.0
- *  鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *  鏍规嵁leaveId鍒犻櫎鐣欒█娑堟伅
  *
- *  @return 缁堢鍞竴璇嗗埆鐮�
+ *  @param leaveIds   鐣欒█娑堟伅Id鏁扮粍(鏈�澶ф暟閲忎负10锛屽厑璁稿彧鏈�1涓�)
+ *  @param completion 鍥炶皟block锛宔rror涓虹┖琛ㄧず鍒犻櫎鎴愬姛
+ *
+ *  @return operation
  */
-+ (NSString *) getTerminalId;
-
-#pragma mark - V4.4 鏂板鍔犳帴鍙�
++ (NSURLSessionDataTask *)deleteLeaveMessage:(NSArray *)leaveIds
+                                  completion:(void (^)(NSError *error))completion;
 
 /**
- *  @since 4.4.0
- *  push鍒濆鍖栨帴鍙o紝涓嶉渶瑕乸ush鏈嶅姟鍒欐棤闇�璋冪敤
+ *  鏍规嵁EZLeaveMessage瀵硅薄淇℃伅鑾峰彇璇煶鐣欒█娑堟伅鏁版嵁鎺ュ彛
+ *  @param message    鐣欒█娑堟伅瀵硅薄
+ *  @param completion 鍥炶皟block 锛坮esultCode = 1 琛ㄧず璇煶涓嬭浇鎴愬姛锛�-1琛ㄧず涓嬭浇澶辫触锛�
+ *
+ *  @return operation
  */
-+ (void) initPushService;
++ (NSOperation *)getLeaveMessageData:(EZLeaveMessage *)message
+                          completion:(void (^)(NSData *data, NSInteger resultCode))completion;
 
-#pragma mark - V4.5 鏂板鍔犳帴鍙�
+#pragma mark - VideoTalk瑙嗛閫氳瘽鐩稿叧Api
 
 /**
- 娓呴櫎鍙栨祦鏃剁殑缂撳瓨鏁版嵁
+ * 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
+ * @param deviceId 璁惧搴忓垪鍙�
+ * @param completion operation
  */
-+ (void) clearStreamInfoCache;
-
-#pragma mark - V4.8.2 鏂板鍔犳帴鍙�
++ (void)requestGetWatchServerInfo:(NSString *)deviceId
+                       completion:(void (^)(id watchServerInfo, NSError *error))completion;
 
 /**
- 鏄惁宸茬粡鐧诲綍
-
- @return YES锛氬凡缁忕櫥褰曪紱NO锛氭湭鐧诲綍
+ * 鍒涘缓浼氳淇℃伅
+ * @param password 鑷畾涔夊瘑鐮�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param limit 闄愬埗鏈�澶т汉鏁� 鏈�澶�100
+ * @param completion operation
  */
-+ (BOOL) isLogin;
++ (void)requestCallingMeetingInfo:(NSString *)password
+                         customId:(NSInteger)customId
+                            limit:(NSInteger)limit
+                       completion:(void (^)(int32_t roomId, NSString *vtmAddress, NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
 
 /**
- 鑾峰彇褰撳墠accessToken
-
- @return accessToken
+ * 鍔犲叆鏂硅幏鍙栦細璁俊鎭�
+ * @param roomId  鎴块棿鍙�
+ * @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+ * @param completion operation
  */
-+ (NSString *) getAccesstoken;
++ (void)requestCalledMeetingInfo:(NSString *)roomId
+                        customId:(NSInteger)customId
+                      completion:(void (^)(int32_t roomId, NSString *vtmAddress,NSString *clientid, NSInteger customId, NSString *controlServerAddress, NSError *error))completion;
 
 /**
- 鏍规嵁搴旂敤绫诲瀷鍒ゆ柇鏄惁瀹夎浜嗗搴旂殑搴旂敤
- 
- @param appType 搴旂敤绫诲瀷
- @return YES:宸插畨瑁咃紝NO:娌℃湁瀹夎鎴栧畨瑁呯殑钀ょ煶APP鐗堟湰杩囦綆
+ *  閭�璇疯澶囪繘鍏ユ埧闂�
+ *  @param roomId                                鎴块棿鍙�
+ *  @param deviceSerial                   璁惧搴忓垪鍙�
+ *  @param channelNo                         閫氶亾鍙�
+ *  @param streamType                       涓诲瓙鐮佹祦 1-涓荤爜娴侊紝2-瀛愮爜娴侊紝mode涓�2鏃跺彲涓嶄紶
+ *  @param mode                                    鍔犲叆妯″紡 1-鍙屽悜闊宠棰戞ā寮忥紙榛樿锛夛紝2-瀵硅妯″紡
+ *  @param maxActiveSeconds         鍏ヤ細鏈�闀挎椂闂达紙绉掞級
+ *  @param completion                       鍥炶皟block
+ *
+ *  @return operation
  */
-+ (BOOL) isEzvizAppInstalledWithType:(EZAppType) appType;
-
++ (NSURLSessionDataTask *)inviteDeviceEnterMeeting:(NSString *)roomId
+                                      deviceSerial:(NSString *)deviceSerial
+                                         channelNo:(NSInteger)channelNo
+                                        streamType:(NSInteger)streamType
+                                              mode:(NSInteger)mode
+                                  maxActiveSeconds:(NSInteger)maxActiveSeconds
+                                        completion:(void (^)(NSError *error))completion;
 
 /**
- 璺宠浆鍒版寚瀹氳悿鐭矨PP杩涜鎺堟潈鐧诲綍
-
- @param appType 钀ょ煶APP绫诲瀷
- @return 璺宠浆缁撴灉
+ *  寮哄埗璁惧閫�鍑烘埧闂�
+ *  @param roomId                                鎴块棿鍙�
+ *  @param deviceSerial                   璁惧搴忓垪鍙�
+ *  @param channelNo                         閫氶亾鍙�
+ *  @param completion                       鍥炶皟block
+ *
+ *  @return operation
  */
-+ (BOOL) ezvizLoginWithAppType:(EZAppType) appType;
++ (NSURLSessionDataTask *)kickoutDeviceMoveOutRoom:(NSString *)roomId
+                                      deviceSerial:(NSString *)deviceSerial
+                                         channelNo:(NSInteger)channelNo
+                                        completion:(void (^)(NSError *error))completion;
+
+#pragma mark - WiFi閰嶇綉鐩稿叧Api
 
 /**
- 璺宠浆鍒版寚瀹欰PP鐨勬寚瀹氱晫闈�
- 
- @param pageType 鐣岄潰绫诲瀷
- @param appType APP绫诲瀷
- @return 璺宠浆缁撴灉
+ *  灏濊瘯鏌ヨ璁惧淇℃伅锛岃澶嘩ifi閰嶇疆鍓嶆煡璇竴娆¤澶囩殑淇℃伅
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param deviceType 璁惧鍨嬪彿锛屾棤娉曡幏鍙栧埌璁惧鍨嬪彿鍒欏彲浼爊il
+ *  @param completion   鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *  @see 鍏ㄦ柊鐨勮澶囨槸娌℃湁娉ㄥ唽鍒板钩鍙扮殑锛屾墍浠ヤ細鍑虹幇璁惧涓嶅瓨鍦ㄧ殑鎯呭喌锛岃澶噖ifi閰嶇疆鎴愬姛浠ュ悗浼氫笂鎶ユ暟鎹埌钀ょ煶浜戝钩鍙帮紝浠ュ悗姣忔鏌ヨ灏变笉浼氬嚭鐜拌澶囦笉瀛樺湪鐨勬儏鍐典簡銆�
+ *
+ *  @return operation
  */
-+ (BOOL) gotoEzvizAppPage:(EZAppPageType) pageType appType:(EZAppType) appType;
++ (NSURLSessionDataTask *)probeDeviceInfo:(NSString *)deviceSerial
+                               deviceType:(NSString *)deviceType
+                               completion:(void (^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
 
 /**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS9浠ヤ笂锛屽寘鎷琲OS9
-
- @param url 璺宠浆杩囨潵鐨剈rl
- @param opetions 鍙傛暟锛岄粯璁や负绌猴紝鐩墠鏈繘琛屽鐞嗭紝棰勭暀
- @param delegate 濮旀墭
- @return 缁撴灉
+ *  WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ *  @param ssid         杩炴帴WiFi SSID
+ *  @param password     杩炴帴WiFi 瀵嗙爜
+ *  @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�
+ *  @param statusBlock  杩斿洖杩炴帴璁惧鐨刉iFi閰嶇疆鐘舵��
+ *
+ *  @return YES/NO
  */
-+ (BOOL) handleOpenUrl:(NSURL *) url options:(NSDictionary *) opetions delegate:(id<EZOpenSDKDelegate>) delegate;
++ (BOOL)startConfigWifi:(NSString *)ssid
+               password:(NSString *)password
+           deviceSerial:(NSString *)deviceSerial
+           deviceStatus:(void (^)(EZWifiConfigStatus status))statusBlock;
 
 /**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS8浠ヤ笅,鍖呮嫭iOS8
-
- @param url 璺宠浆杩囨潵鐨剈rl
- @param delegate 濮旀墭
- @return 缁撴灉
- */
-+ (BOOL) handleOpenUrl:(NSURL *) url delegate:(id<EZOpenSDKDelegate>) delegate;
-
-/**
- 澶栭儴璺宠浆澶勭悊鏂规硶锛岄�傜敤浜巌OS8浠ヤ笅,鍖呮嫭iOS8
-
- @param url 璺宠浆杩囨潵鐨剈rl
- @param sourceApplication 婧怉PP
- @param annotation 娉ㄩ噴
- @param delegate 濮旀墭
- @return 缁撴灉
- */
-+ (BOOL) handleOpenUrl:(NSURL *) url
-     sourceApplication:(NSString *) sourceApplication
-            annotation:(id) annotation
-              delegate:(id<EZOpenSDKDelegate>) delegate;
-
-#pragma mark - V4.8.3 鏂板鍔犳帴鍙�
-
-/**
- *  @since 4.8.3
  *  WiFi閰嶇疆寮�濮嬫帴鍙�
  *
  *  @param ssid         杩炴帴WiFi SSID
@@ -736,94 +791,156 @@
  *
  *  @return YES/NO
  */
-+ (BOOL)startConfigWifi:(NSString *) ssid
-               password:(NSString *) password
-           deviceSerial:(NSString *) deviceSerial
-                   mode:(NSInteger) mode
-           deviceStatus:(void (^)(EZWifiConfigStatus status,NSString *deviceSerial))statusBlock;
-    
-#pragma mark - V4.8.4
++ (BOOL)startConfigWifi:(NSString *)ssid
+               password:(NSString *)password
+           deviceSerial:(NSString *)deviceSerial
+                   mode:(NSInteger)mode
+           deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
 /**
- AP閰嶇綉鎺ュ彛
- 
- @param ssid WiFi鐨剆sid
- @param password WiFi鐨勫瘑鐮�
- @param deviceSerial 璁惧搴忓垪鍙�
- @param verifyCode 璁惧楠岃瘉鐮�
- @param callback 缁撴灉鍥炶皟
- @return 鎴愬姛鎴栧け璐�
+ *  WiFi閰嶇疆寮�濮嬫帴鍙�
+ *
+ *  @param ssid         杩炴帴WiFi SSID
+ *  @param password     杩炴帴WiFi 瀵嗙爜
+ *  @param deviceSerial 杩炴帴WiFi鐨勮澶囩殑璁惧搴忓垪鍙�,鎵归噺閰嶇疆鏃跺~nil
+ *  @param mode         閰嶇綉鐨勬柟寮忥紝EZWiFiConfigMode涓垪涓剧殑妯″紡杩涜浠绘剰缁勫悎,渚嬪:EZWiFiConfigSmart|EZWiFiConfigWave
+ *  @param apiUrl    鎸囧畾鍘诲摢涓钩鍙版煡璇�
+ *  @param statusBlock  杩斿洖璁惧搴忓垪鍙蜂互鍙婂綋鍓嶈繛鎺ョ姸鎬�
+ *
+ *  @return YES/NO
  */
-+ (BOOL)startAPConfigWifiWithSsid:(NSString *) ssid
-                         password:(NSString *) password
-                     deviceSerial:(NSString *) deviceSerial
-                       verifyCode:(NSString *) verifyCode
-                           result:(void (^)(BOOL ret)) callback;
-    
++ (BOOL)startConfigWifi:(NSString *)ssid
+               password:(NSString *)password
+           deviceSerial:(NSString *)deviceSerial
+                   mode:(NSInteger)mode
+                 apiUrl:(NSString *)apiUrl
+           deviceStatus:(void (^)(EZWifiConfigStatus status,NSString *deviceSerial))statusBlock;
+
 /**
- 鍋滄AP閰嶇綉
+ *  @since 3.0.0
+ *  Wifi閰嶇疆鍋滄鎺ュ彛
+ *
+ *  @return YES/NO
+ */
++ (BOOL)stopConfigWifi;
+
+#pragma mark - AP閰嶇綉鐩稿叧Api
+
+/**
+ * AP閰嶇綉鎺ュ彛
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param callback 缁撴灉鍥炶皟锛屾敞鎰忥細杩斿洖YES浠呬粎浠h〃鎴愬姛灏哤iFi淇℃伅鍙戦�佺粰璁惧锛屼笉浠h〃璁惧閰嶇綉鎴愬姛
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+                         password:(NSString *)password
+                     deviceSerial:(NSString *)deviceSerial
+                       verifyCode:(NSString *)verifyCode
+                           result:(void (^)(BOOL ret))callback;
+
+/**
+ * AP閰嶇綉鎺ュ彛锛堟帹鑽愶紝v5.0鏂板锛屽皝瑁呬簡璁惧鐘舵�佽疆璇㈡楠わ級
+ *
+ * @param ssid WiFi鐨剆sid
+ * @param password WiFi鐨勫瘑鐮�
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param verifyCode 璁惧楠岃瘉鐮�
+ * @param statusBlock 缁撴灉鍥炶皟锛岃繑鍥為厤缃戣繃绋嬩腑鐨勫悇绉嶇姸鎬�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startAPConfigWifiWithSsid:(NSString *)ssid
+                         password:(NSString *)password
+                     deviceSerial:(NSString *)deviceSerial
+                       verifyCode:(NSString *)verifyCode
+                     deviceStatus:(void (^)(EZWifiConfigStatus status, NSString *deviceSerial))statusBlock;
+
+/**
+ * 鍋滄AP閰嶇綉
  */
 + (void)stopAPConfigWifi;
 
-
-#pragma mark - v4.10
-
-/// 鑾峰彇鎵嬭〃鏈嶅姟鐩稿叧淇℃伅
-/// @param deviceId 璁惧搴忓垪鍙�
-/// @param completion operation
-+ (void)requestGetWatchServerInfo:(NSString *)deviceId
-                       completion:(void (^)(id watchServerInfo, NSError *error))completion;
-
-
-/// 鏄惁鏀寔鍥芥爣
-/// @param enable YES or NO
-+ (void)enableNationalStandard:(BOOL)enable;
-
-
-#pragma mark - v4.11
+#pragma mark - 鎺ヨЕ寮忛厤缃� New AP Config
 
 /**
-*  @since 4.11.0
-*  璁剧疆debug鏃ュ織鍥炶皟,闇�鍦ㄥ垵濮嬪寲sdk涔嬪墠璋冪敤
-*
-*  @param logCallback 鏃ュ織鍥炶皟
-*/
-+ (void)setDebugLogCallBack:(void(^)(NSString *logStr))logCallback;
-
-
-#pragma mark - v4.13
-/**
- *  鑾峰彇鎸囧畾鏃堕棿鍐呯殑鎵�鏈夊綍鍍忔枃浠�
+ * 鑾峰彇鎺ヨЕ寮廇P閰嶇綉token
  *
- *  @param deviceSerial 璁惧搴忓垪鍙�
- *  @param cameraNo     閫氶亾鍙凤紝浼犲叆<=0鐨勫�煎垯涓洪粯璁ゅ��
- *  @param beginTime    寮�濮嬫椂闂达紝浼犲叆nil鍒欎负褰撳ぉ00:00:00
- *  @param endTime      缁撴潫鏃堕棿锛屼紶鍏il鍒欎负褰撳ぉ23:59:59
- *  @param rectype      鍥炴斁婧愶紝0-绯荤粺鑷姩閫夋嫨锛�1-浜戝瓨鍌紝2-鏈湴褰曞儚銆傞潪蹇呴�夛紝榛樿涓�0锛屼紶鍏ヨ礋鍊煎垯涓洪粯璁ゅ��
- *  @param bizType       璁惧褰掑睘涓氬姟鏉ユ簮
- *  @param platFormId  骞冲彴ID
- *  @param completion   鍥炶皟block records:EzvizRecordFileInfo鐨勬暟缁�
+ * @param completion 鍥炶皟
+ *
+ * @return operation
+ */
++ (NSURLSessionDataTask *)getNewApConfigToken:(void(^)(EZConfigTokenInfo *tokenInfo, NSError *error))completion;
+
+/**
+ * 寮�濮婲ewAP閰嶇綉锛堥渶杩炴帴璁惧鐑偣锛�
+ * @param token 閰嶇綉token
+ * @param ssid WiFi ssid
+ * @param password WiFi 瀵嗙爜
+ * @param lbsDomain lbs 鍩熷悕
+ * @param handler 鍥炶皟
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (BOOL)startNewApConfigWithToken:(NSString *)token
+                             ssid:(NSString *)ssid
+                         password:(NSString *)password
+                        lbsDomain:(NSString *)lbsDomain
+                completionHandler:(void(^)(EZNewAPConfigStatus status, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧鐘舵�侊紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceInfo:(void(^)(EZAPDevInfo *devInfo, NSError *error))handler;
+
+/**
+ * 鑾峰彇璁惧褰撳墠鍛ㄨ竟WiFi鍒楄〃锛屼笂闄�20涓紙闇�杩炴帴璁惧鐑偣锛�
+ *
+ * @param handler 鍥炶皟
+ */
++ (void)getAccessDeviceWifiList:(void(^)(NSArray<EZWiFiItemInfo*> *wifiList, NSError *error))handler;
+
+/**
+ * 鏌ヨ璁惧缁戝畾鐘舵��
+ * @param deviceSerial 璁惧搴忓垪鍙�
+ * @param completion 鍥炶皟block锛屾甯告椂杩斿洖EZProbeDeviceInfo瀵硅薄锛岄敊璇爜杩斿洖閿欒鐮�
+ *
+ * @return 鎴愬姛鎴栧け璐�
+ */
++ (NSURLSessionDataTask *)queryPlatformBindStatus:(NSString *)deviceSerial
+                                       completion:(void(^)(EZProbeDeviceInfo *deviceInfo, NSError *error))completion;
+
+/**
+ * 璁剧疆閰嶇綉璁惧缃戝叧鍦板潃 鍙��
+ * @param devRouteDomain 璁惧缃戝叧鍦板潃
+ */
++ (void)setDevRouteDomain:(NSString *)devRouteDomain;
+
+#pragma mark - 鐢ㄦ埛鐩稿叧Api
+
+/**
+ *  鑾峰彇鐢ㄦ埛鍩烘湰淇℃伅鐨勬帴鍙�
+ *
+ *  @param completion 鍥炶皟block锛� 姝e父鏃惰繑鍥濫ZUserInfo鐨勫璞★紝閿欒鏃惰繑鍥為敊璇爜
  *
  *  @return operation
  */
-+ (NSURLSessionDataTask *)searchRecordFile:(NSString *) deviceSerial
-                                  cameraNo:(NSString *) cameraNo
-                                 beginTime:(NSDate *) beginTime
-                                   endTime:(NSDate *) endTime
-                                   recType:(NSInteger) rectype
-                                   bizType:(NSString *)bizType
-                                platFormId:(NSString *)platFormId
-                                completion:(void (^)(id records, NSError *error))completion;
++ (NSURLSessionDataTask *)getUserInfo:(void (^)(EZUserInfo *userInfo, NSError *error))completion;
 
-#pragma mark - v4.16 澶氭柟闊宠棰�
-/// 鍒涘缓浼氳淇℃伅
-/// @param password 鑷畾涔夊瘑鐮�
-/// @param completion operation
-+ (void)requestCallingMeetingInfo:(NSString *)password
-                       completion:(void (^)(int32_t roomId, NSString *vtmAddress, NSError *error))completion;
+#pragma mark - 鍏朵粬Api
 
-/// 鍔犲叆鏂硅幏鍙栦細璁俊鎭�
-/// @param roomId  鎴块棿鍙�
-/// @param completion operation
-+ (void)requestCalledMeetingInfo:(NSString *)roomId
-                      completion:(void (^)(int32_t roomId, NSString *vtmAddress, NSError *error))completion;
+/**
+ *  鑾峰彇缁堢锛堟墜鏈虹瓑锛夊敮涓�璇嗗埆鐮�
+ *
+ *  @return 缁堢鍞竴璇嗗埆鐮�
+ */
++ (NSString *)getTerminalId;
+
 @end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/EZPlayer.h b/EZSDK/EZSDK/SDK/include/EZPlayer.h
index a1dd6b7..baea2e2 100644
--- a/EZSDK/EZSDK/SDK/include/EZPlayer.h
+++ b/EZSDK/EZSDK/SDK/include/EZPlayer.h
@@ -12,6 +12,8 @@
 @class EZCloudRecordFile;
 @class EZPlayer;
 @class EZPlayerExParamInfo;
+@class EZDevicePtzAngleInfo;
+@class EZPMPlayPrivateTokenInfo;
 
 /**
  *  棰勮娓呮櫚搴�
@@ -95,6 +97,34 @@
  */
 - (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
 
+/**
+ * 璁惧浜戝彴瑙掑害鏁版嵁鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param info 绉佹湁鏁版嵁
+ */
+- (void)player:(EZPlayer *)player didReceivedDevicePtzAngleInfo:(EZDevicePtzAngleInfo *)info;
+
+/**
+ * 鎾斁杩囩▼涓� 鍥炶皟瑙g爜鏁版嵁
+ * 閲嶈锛氳鍥炶皟浼氭瘮杈冮绻�(涓�绉掕嫢骞叉)锛屽悓鏃剁洿鎺ョ敱鎾斁搴撶嚎绋嬪洖璋冧笂鏉ワ紝璇峰嬁鍦ㄦ柟娉曚腑鍋氳�楁椂鎿嶄綔
+ * 閲嶈锛氬洖璋冪殑鏁版嵁鐨勫唴瀛樻槸鐢辨挱鏀惧簱鍐呴儴鍒嗛厤骞剁鐞嗙殑锛屽湪浣跨敤鏃讹紝璇峰悓姝ュ鐞嗗洖璋冪殑data锛涘闇�寮傛澶勭悊锛岃鎷疯礉璇ユ暟鎹�
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param data 鎾斁搴撹В鐮佸嚭鐨勬暟鎹�
+ * @param width 瑙嗛瀹藉害
+ * @param height 瑙嗛楂樺害
+ */
+- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
+
+/**
+ * 鍙栨祦鏁版嵁涓幏鍙栧紑闂╰oken鍥炶皟
+ *
+ * @param player 鎾斁鍣ㄥ璞�
+ * @param tokenInfo token瀵硅薄
+ */
+- (void)player:(EZPlayer *)player playPrivateTokenInfo:(EZPMPlayPrivateTokenInfo *)tokenInfo;
+
 @end
 
 /// 姝ょ被涓鸿悿鐭虫挱鏀惧櫒绫�
@@ -104,7 +134,7 @@
 @property (nonatomic, weak) id<EZPlayerDelegate> delegate;
 
 /// 鏄惁璁╂挱鏀惧櫒澶勭悊杩涘叆鍚庡彴,YES:鑷姩澶勭悊;NO:涓嶅鐞�,榛樿涓篩ES
-@property (nonatomic) BOOL backgroundModeByPlayer;
+@property (nonatomic, assign) BOOL backgroundModeByPlayer;
 
 /**
  *  鏍规嵁璁惧搴忓垪鍙峰拰閫氶亾鍙峰垱寤篍ZPlayer瀵硅薄
@@ -135,7 +165,19 @@
  @param streamType 鐮佹祦绫诲瀷 1:涓荤爜娴� 2:瀛愮爜娴�
  @return EZPlayer瀵硅薄
  */
-+ (instancetype)createPlayerWithUserId:(NSInteger) userId cameraNo:(NSInteger) cameraNo streamType:(NSInteger) streamType;
++ (instancetype)createPlayerWithUserId:(NSInteger)userId cameraNo:(NSInteger)cameraNo streamType:(NSInteger)streamType;
+
+/**
+ *  @since 4.19.2
+ *  涓�涓〉闈㈠瓨鍦ㄥ涓棰戜娇鐢ㄦ渶灏忕殑鐮佹祦锛屾病鏈夊瓙鐮佹祦鐨勮瘽杩樻槸浣跨敤涓荤爜娴�
+ *
+ *  @param deviceSerial 璁惧搴忓垪鍙�
+ *  @param cameraNo     铏氭嫙閫氶亾
+ *  @param useSubStream   鏄惁浣跨敤瀛愮爜娴�
+ *
+ *  @return EZPlayer瀵硅薄
+ */
++ (instancetype)createPlayerWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo useSubStream:(BOOL)useSubStream;
 
 /**
  *  閿�姣丒ZPlayer
@@ -149,21 +191,21 @@
  *
  *  @param HDPriority 鏄惁纭В浼樺厛
  */
--(void)setHDPriority:(BOOL)HDPriority;
+- (void)setHDPriority:(BOOL)HDPriority;
 
 /**
  鑾峰彇褰撳墠鐨勮蒋纭В鎯呭喌锛屽湪鐮佹祦姝e父鎾斁鍚庤皟鐢�
  
  @return 1锛氳蒋瑙� 2锛氱‖瑙� 0锛氬嚭閿�
  */
-- (int) getHDPriorityStatus;
+- (int)getHDPriorityStatus;
 
 /**
  *  璁剧疆璁惧褰掑睘涓氬姟鏉ユ簮锛岄渶瑕佸湪棰勮鍥炴斁鍓嶈皟鐢�  鍥芥爣璁惧浣跨敤
  *
  *  @param bizType 绫诲瀷       鍥芥爣涓� bizType='GB28181'
  */
--(void)setBizType:(NSString *)bizType;
+- (void)setBizType:(NSString *)bizType;
 
 /**
  *  骞冲彴id 鍥芥爣璁惧浣跨敤
@@ -178,6 +220,13 @@
  *  @param playerView 鎾斁鍣╲iew
  */
 - (void)setPlayerView:(UIView *)playerView;
+
+/**
+ *  鏄惁闈欓煶鎾斁锛宻tartRealPlay涔嬪墠璋冪敤
+ *
+ *  @param isSilencePlay 鏄惁闈欓煶鎾斁
+ */
+- (void)setSilencePlay:(BOOL)isSilencePlay;
 
 /**
  *  寮�濮嬫挱鏀撅紝寮傛鎺ュ彛锛岃繑鍥炲�煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
@@ -219,7 +268,7 @@
  
  @return 鎾斁搴撶殑port,鍙兘涓�-1锛堟棤鏁堝�硷級
  */
-- (int) getInnerPlayerPort;
+- (int)getInnerPlayerPort;
 
 /**
  鑾峰彇褰撳墠宸叉挱鏀剧殑鎬绘祦閲忥紝鍗曚綅瀛楄妭
@@ -231,7 +280,7 @@
  
  @return 娴侀噺鍊�
  */
-- (NSInteger) getStreamFlow;
+- (NSInteger)getStreamFlow;
 
 /**
  *  寮�濮婽TS瀵硅锛屽紓姝ユ帴鍙o紝杩斿洖鍊煎彧鏄〃绀烘搷浣滄垚鍔燂紝涓嶄唬琛ㄦ挱鏀炬垚鍔�
@@ -347,14 +396,14 @@
 
  @return 灏忎簬0涓烘棤鏁堝�硷紝澶т簬绛変簬0涓烘湁鏁堝��
  */
-- (int) getPlayPort;
+- (int)getPlayPort;
 
 /**
  鑾峰彇褰撳墠鍙栨祦鏂瑰紡锛�
 
- @return 
+ @return 褰撳墠鍙栨祦绫诲瀷
  */
-- (int) getStreamFetchType;
+- (int)getStreamFetchType;
 
 /**
 sd鍗″強浜戝瓨鍌ㄥ�嶉�熷洖鏀炬帴鍙�
@@ -371,18 +420,27 @@
 @param mode 鍥炴斁鏃剁殑鎶藉抚鎺у埗锛屽綋鍓嶄粎浜戝瓨鍌ㄦ敮鎸併��0锛� 4鍊嶉�熷叏甯э紝8鍊嶉�熶互涓婃娊甯�   1锛氭娊甯�   2锛氬叏甯�  锛堝璁惧鍥炴斁褰撳墠涓嶆敮鎸侊紝浼犲叆0鍗冲彲锛�
 @return YES/NO
  */
-- (BOOL) setPlaybackRate:(EZPlaybackRate) rate mode:(NSUInteger)mode;
+- (BOOL)setPlaybackRate:(EZPlaybackRate) rate mode:(NSUInteger)mode;
 
 /**
  璁剧疆鍏ㄥ弻宸ュ璁叉椂鐨勬ā寮�,瀵硅鎴愬姛鍚庤皟鐢�
  
  @param routeToSpeaker YES:浣跨敤鎵0鍣� NO:浣跨敤鍚瓛
  */
-- (void) changeTalkingRouteMode:(BOOL) routeToSpeaker;
+- (void)changeTalkingRouteMode:(BOOL)routeToSpeaker;
 
 /// //鎵╁睍鍙傛暟 UIKit涓撶敤
 /// @param exParamInfo EZPlayerExParamInfo
-- (void) setExParamInfo:(EZPlayerExParamInfo *) exParamInfo;
+- (void)setExParamInfo:(EZPlayerExParamInfo *)exParamInfo;
+
+/**
+ * 璁剧疆鎵撳紑鎾斁搴撶殑鏅鸿兘鍒嗘瀽锛屽綋鍓嶆俯鎰熺浉鏈虹殑妗嗘浣跨敤浜嗚鏅鸿兘鍒嗘瀽鏁版嵁锛岄瑙堟垚鍔熷悗璋冪敤锛屽湪鎾斁杩囩▼涓殢鏃跺紑鍏�
+ *
+ * @param enable YES锛氬紑  NO锛氬叧
+ *
+ * @return 杩斿洖鐘舵��
+ */
+- (BOOL)setIntelAnalysis:(BOOL)enable;
 
 @end
 
diff --git a/EZSDK/EZSDK/SDK/include/EZStreamPlayer.h b/EZSDK/EZSDK/SDK/include/EZStreamPlayer.h
index d07d6ba..408ba05 100644
--- a/EZSDK/EZSDK/SDK/include/EZStreamPlayer.h
+++ b/EZSDK/EZSDK/SDK/include/EZStreamPlayer.h
@@ -43,7 +43,7 @@
  *  鎾斁鍣ㄦ秷鎭洖璋�
  *
  *  @param player      鎾斁鍣ㄥ璞�
- *  @param messageCode 鎾斁鍣ㄦ秷鎭爜
+ *  @param msgType 鎾斁鍣ㄦ秷鎭爜
  */
 - (void)streamPlayer:(EZStreamPlayer *)player didReceivedMessage:(EZStreamPlayerMsgType)msgType;
 
@@ -51,7 +51,9 @@
  *  鐮佹祦鍥炶皟
  *
  *  @param player     鎾斁鍣ㄥ璞�
- *  @param dataq       鐮佹祦鏁版嵁
+ *  @param dataType  鏁版嵁绫诲瀷
+ *  @param data        鐮佹祦鏁版嵁
+ *  @param dataLength  闀垮害
  */
 - (void)streamPlayer:(EZStreamPlayer *)player didReceivedData:(EZStreamDataType)dataType data:(int8_t *)data length:(int)dataLength;
 
@@ -109,7 +111,7 @@
 
 /// 璁剧疆璁惧楠岃瘉鐮侊紝鎾斁鍓嶈缃�
 /// @param verifyCode 璁惧楠岃瘉鐮�
-- (void) setVerifyCode:(NSString *)verifyCode;
+- (void)setVerifyCode:(NSString *)verifyCode;
 
 @end
 
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZAPDevInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZAPDevInfo.h
new file mode 100644
index 0000000..d1b5e38
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZAPDevInfo.h
@@ -0,0 +1,23 @@
+//
+//  EZAPDevInfo.h
+//  EZWiFiConfigSDK
+//
+//  Created by yuqian on 2020/7/28.
+//  Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZAPDevInfo : NSObject
+
+@property (nonatomic, copy) NSString *apVersion;//鐗堟湰锛屽綋鍓峚p鐗堟湰1.0
+@property (nonatomic, copy) NSString *devSubserial;//璁惧搴忓垪鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *devType;//璁惧鍨嬪彿锛屾渶澶�64
+@property (nonatomic, copy) NSString *devFirmwareversion;//璁惧鍥轰欢鐗堟湰鍙凤紝鏈�澶�64
+@property (nonatomic, copy) NSString *macAddr;//璁惧mac鍦板潃
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZAlarmInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZAlarmInfo.h
index a8d783a..9e763ef 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZAlarmInfo.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZAlarmInfo.h
@@ -26,7 +26,19 @@
 /// 鍛婅绫诲瀷
 @property (nonatomic) NSInteger alarmType;
 /// 鏄惁鍔犲瘑
-@property (nonatomic) BOOL isEncrypt;
+//@property (nonatomic) BOOL isEncrypt;
+
+
+/// 鍛婅鍥剧墖鍔犲瘑淇℃伅 crypt 0-涓嶇‘瀹� 1-璁惧鍔犲瘑 2-骞冲彴鍔犲瘑
+/// 濡傛灉鏄�2锛岃〃鏄庢槸骞冲彴鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄤ笅闈㈢殑checksum浣滀负瑙e瘑绉橀挜瑙e瘑鍥剧墖
+/// 濡傛灉鏄�1锛岃〃鏄庢槸璁惧鍔犲瘑鐨勫浘鐗囷紝璇蜂娇鐢ㄨ澶囩殑楠岃瘉鐮佷綔涓鸿В瀵嗙閽ヨВ瀵嗗浘鐗�
+/// 濡傛灉鏄�0锛岃〃鏄庢湭鐭ョ殑鍔犲瘑淇℃伅锛岃閫氳繃涓婇潰鎶ヨ鍥剧墖URL锛坅larmPicUrl锛変腑鐨� isEncrypted 瀛楁锛屽垽鏂浘鐗囨槸 0锛氭湭鍔犲瘑 1锛氳澶囧姞瀵�
+/// 鎶ヨ鍥剧墖鐨刄RL绀轰緥锛�
+/// https://whpic.ys7.com:8009/HIK_1447836214_458BEBDAE4AB6a6f_525400286893421023815?isEncrypted=1&isCloudStored=0
+/// https://www.ys7.com:9090/api/cloud?method=download&fid=5ed92258-8e0f-11e5-8000-c19249a52dcf&deviceSerialNo=504242549&isEncrypted=0&isCloudStored=1
+@property (nonatomic) NSInteger crypt;
+/// 鍛婅鍥剧墖骞冲彴鍔犲瘑鏃剁殑瀵嗛挜
+@property (nonatomic, copy) NSString *checksum;
 /// 鏄惁宸茶
 @property (nonatomic) BOOL isRead;
 /// 瀛樺偍绫诲瀷锛�0-鏃犲瓨鍌紝1-钀ょ煶锛�2-鐧惧害锛�4-sd鍗″瓨鍌紝5-钀ょ煶鍜宻d鍗★紝6-鐧惧害鍜宻d鍗�
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZCameraInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZCameraInfo.h
index c1e9264..9054b1e 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZCameraInfo.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZCameraInfo.h
@@ -25,7 +25,7 @@
 @property (nonatomic) NSInteger videoLevel;
 //鏉冮檺
 @property (nonatomic) NSInteger permission;
-/// 閫氶亾鏀寔鐨勬竻鏅板害淇℃伅鍒楄〃锛孍ZVideoQualityInfo瀵硅薄鍒楄〃
+/// 閫氶亾鏀寔鐨勬竻鏅板害淇℃伅鍒楄〃锛孍ZVideoQualityInfo瀵硅薄鍒楄〃銆�(/api/device/list 杩斿洖鐨�"videoQualityInfos" 鏈夎锛屼互/api/device/detail 鎺ュ彛杩斿洖涓哄噯)
 @property (nonatomic, strong) NSArray *videoQualityInfos;
 
 /// 璁惧鏄惁寮�鍚姞瀵�
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZCloudRecordFile.h b/EZSDK/EZSDK/SDK/include/modules/EZCloudRecordFile.h
index 66fcf30..f8c693f 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZCloudRecordFile.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZCloudRecordFile.h
@@ -27,6 +27,8 @@
 @property (nonatomic, copy) NSString *downloadPath;
 /// 浜戝瓨鍌ㄥ浘鐗囧姞瀵嗗瘑鐮侊紝濡傛灉鏄痆NSNull null]鎴栬�卬il鎸囬拡鍒欏浘鐗囦笉鍔犲瘑
 @property (nonatomic, copy) NSString *encryption;
+/// 鏂囦欢澶у皬
+@property (nonatomic, assign) NSUInteger fileSize;
 
 @property (nonatomic, assign) int32_t istorageVersion; //浜戝瓨鍌ㄧ被鍒�:1 鍗曟枃浠跺瓨鍌ㄦā寮忥紱2 杩炵画瀛樺偍妯″紡锛�3 寰呭畾
 @property (nonatomic, assign) int32_t videoType;//浜戝瓨鍌ㄥ綍鍍忕被鍨嬶紝榛樿涓�0锛岃〃绀轰笉灞炰簬浜戝瓨鍌ㄥ綍鍍�
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZConfigTokenInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZConfigTokenInfo.h
new file mode 100644
index 0000000..9b9a949
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZConfigTokenInfo.h
@@ -0,0 +1,21 @@
+//
+//  EZConfigTokenInfo.h
+//  EZWiFiConfigSDK
+//
+//  Created by yuqian on 2020/7/30.
+//  Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZConfigTokenInfo : NSObject
+
+@property (nonatomic, copy) NSString *userId;
+@property (nonatomic, copy) NSString *token;
+@property (nonatomic, copy) NSString *lbsDomain;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZDeviceCloudServiceInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZDeviceCloudServiceInfo.h
new file mode 100644
index 0000000..fffd93e
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZDeviceCloudServiceInfo.h
@@ -0,0 +1,65 @@
+//
+//  EZDeviceCloudServiceInfo.h
+//  EzvizOpenSDK
+//
+//  Created by JuneCheng on 2022/1/4.
+//  Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+@class EZCloudServicePackageInfo;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 浜戝瓨鍌ㄨ澶囬�氶亾濂楅淇℃伅
+@interface EZDeviceCloudServiceInfo : NSObject
+
+@property (nonatomic, copy) NSString *ownerId;///< 璁惧鎵�灞炵敤鎴风敤鎴峰悕
+@property (nonatomic, copy) NSString *serial;///< 璁惧搴忓垪鍙�
+@property (nonatomic, assign) NSInteger channelNo;///< 閫氶亾鍙�
+@property (nonatomic, copy) NSString *devicePicUrl;///< 璁惧鍥剧墖url
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶╋紝2-鍛紝3-鏈堬紝4-骞�
+@property (nonatomic, copy) NSString *expireTime;///< 浜戝瓨鍌ㄦ湇鍔¤繃鏈熸椂闂�
+@property (nonatomic, copy) NSString *expireDate;///< 鍒版湡鏃堕棿锛� yyyy骞碝M鏈坉d鏃� 鏍煎紡
+@property (nonatomic, copy) NSString *devModel;///< 璁惧鍨嬪彿
+@property (nonatomic, copy) NSString *devName;///< 璁惧鍚嶇О
+@property (nonatomic, assign) NSInteger onlineStatus;///< 璁惧鍦ㄧ嚎鐘舵��
+@property (nonatomic, assign) NSInteger status;///< 浜戝瓨鍌ㄧ姸鎬� -2涓嶆敮鎸� -1鏈紑鍚� 0鏆傚仠 1寮�鍚� 2杩囨湡 4鎸囧畾鐢熸晥浜戝瓨鍌ㄥ緟鐢熸晥鐘舵��
+@property (nonatomic, assign) NSInteger expireDay;///< 褰撳墠璺濈杩囨湡鐨勬湁鏁堝ぉ鏁�
+@property (nonatomic, assign) NSInteger validDay;///< 鏈嶅姟鍙娇鐢ㄧ殑澶╂暟
+@property (nonatomic, copy) NSString *createTime;///< 鍒涘缓鏃堕棿
+@property (nonatomic, assign) BOOL designateDevice;///< 鏄惁鏄寚瀹氳澶�
+@property (nonatomic, assign) BOOL subscribe;///< 鏄惁鐢卞綋鍓嶈闃呭紑閫�
+@property (nonatomic, assign) BOOL supportSubscribe;///< 鏄惁鏀寔璁㈤槄浜戝瓨鍌�
+@property (nonatomic, assign) BOOL supportCard;///< 鏄惁鏀寔鐐瑰崱
+@property (nonatomic, assign) NSInteger openTryCloudShield;///< 鏄惁灞忚斀浜戝瓨鍌ㄨ瘯鐢� 1涓哄睆钄斤紝鍏朵粬涓烘湭灞忚斀
+@property (nonatomic, strong) NSArray<EZCloudServicePackageInfo *> *serviceList;///<
+
+@end
+
+
+@interface EZCloudServicePackageInfo : NSObject
+
+@property (nonatomic, assign) long serviceId;///<
+@property (nonatomic, assign) NSInteger productPayType;///< 浜у搧浠樿垂绫诲瀷锛�1浠樿垂 2 璇曠敤 3鍏嶈垂
+@property (nonatomic, assign) NSInteger storageTimeUnit;///< 瀛樺偍鏃堕暱鍗曚綅锛�1-澶� 2-鍛� 3-鏈� 4-骞� 5-灏忔椂
+@property (nonatomic, copy) NSString *expireTime;///< 杩囨湡鏃堕棿
+@property (nonatomic, assign) NSInteger forceBinding;///< 寮哄埗缁戝畾鐘舵�� 1-寮哄埗缁戝畾 2-鍙浆绉�
+@property (nonatomic, assign) NSInteger effectImmediately;///< 鏈嶅姟鏄惁绔嬪嵆鐢熸晥 1-绔嬪嵆鐢熸晥 2-寤惰繜鐢熸晥 3-鎸囧畾鏃ユ湡鐢熸晥
+@property (nonatomic, assign) NSInteger canFamilyDeviceNum;///< 鍙姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) long familyServiceId;///< 瀹跺涵濂楅鏈嶅姟ID
+@property (nonatomic, assign) NSInteger serviceTime;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀�
+@property (nonatomic, assign) NSInteger addFamilyDeviceNum;///< 宸插姞鍏ュ椁愯澶囨暟
+@property (nonatomic, assign) NSInteger productCode;///< 浜у搧缂栧彿
+@property (nonatomic, assign) NSInteger buyNum;///< 璐拱鏁伴噺
+@property (nonatomic, copy) NSString *businessOrderNo;///< 璁㈠崟鍙凤細褰撳墠寮�閫氭湇鍔′笌璁㈠崟鍏宠仈
+@property (nonatomic, assign) NSInteger serviceTimeUnit;///< 浜戝瓨鍌ㄤ娇鐢ㄦ椂闀垮崟浣嶏細1-澶� 2-鍛� 3-鏈� 4-骞�
+@property (nonatomic, assign) NSInteger storageTime;///< 瀛樺偍鏃堕暱
+@property (nonatomic, assign) NSInteger serviceType;///< 濂楅绫诲瀷锛�2銆佸搴椁愶紝 1 or null涓烘櫘閫氬椁�
+@property (nonatomic, copy) NSString *effectTime;///< 鐢熸晥鏃堕棿
+@property (nonatomic, assign) NSInteger status;///< 鐘舵�侊細1 寰呬娇鐢� 2浣跨敤涓� 3宸蹭娇鐢�
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZDeviceInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZDeviceInfo.h
index 60a8460..da60bb4 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZDeviceInfo.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZDeviceInfo.h
@@ -31,11 +31,13 @@
 @property (nonatomic, copy) NSString *deviceType;
 /// 璁惧鐗堟湰鍙�
 @property (nonatomic, copy) NSString *deviceVersion;
+/// 璁惧鍗忚鐗堟湰鍙风被鍨�  0:闈炲浗鏍� 6:鍥芥爣
+@property (nonatomic) NSInteger devProtoEnum;
 /// 璁惧鏄惁寮�鍚姞瀵�
 @property (nonatomic) BOOL isEncrypt;
 /// 璁惧鐘舵�侊紝1-鍦ㄧ嚎锛�2-涓嶅湪绾�
 @property (nonatomic) NSInteger status;
-/// 鏄惁鏀寔瀵硅 0-涓嶆敮鎸佸璁诧紝1-鏀寔鍏ㄥ弻宸ュ璁诧紝3-鏀寔鍗婂弻宸ュ璁�
+/// 鏄惁鏀寔瀵硅 0-涓嶆敮鎸佸璁诧紝1-鏀寔鍏ㄥ弻宸ュ璁诧紝3-鏀寔鍗婂弻宸ュ璁诧紝4-鍚屾椂鏀寔鍏ㄥ弻宸ュ拰鍗婂弻宸�
 @property (nonatomic) NSInteger isSupportTalk;
 /// 鏄惁鏀寔浜戝彴鎺у埗
 @property (nonatomic) BOOL isSupportPTZ;
@@ -47,6 +49,8 @@
 @property (nonatomic) BOOL isSupportMirrorCenter;
 /// 鏄惁鏀寔澹版尝閰嶇綉
 @property (nonatomic) BOOL isSupportSoundWave;
+/// 鏄惁鏀寔鍊嶆暟鍥炴斁
+@property (nonatomic) BOOL isSupportPlaybackRate;
 /// 璁惧澶х被
 @property (nonatomic,copy) NSString *category;
 /// 娣诲姞鏃堕棿
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZDevicePtzAngleInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZDevicePtzAngleInfo.h
new file mode 100644
index 0000000..4437921
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZDevicePtzAngleInfo.h
@@ -0,0 +1,47 @@
+//
+//  EZDevicePtzAngleInfo.h
+//  EzvizOpenSDK
+//
+//  Created by JuneCheng on 2022/4/27.
+//  Copyright 漏 2022 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZDevicePtzAngleInfo : NSObject
+
+/** 姘村钩鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger horizontalStartAngle;
+
+/** 姘村钩鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger horizontalEndAngle;
+
+/** 姘村钩鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger horizontalCurrentAngle;
+
+/** 鍨傜洿鏂瑰悜璧风偣瑙掑害 */
+@property (readonly) NSInteger verticalStartAngle;
+
+/** 鍨傜洿鏂瑰悜缁堢偣瑙掑害 */
+@property (readonly) NSInteger verticalEndAngle;
+
+/** 鍨傜洿鏂瑰悜褰撳墠瑙掑害 */
+@property (readonly) NSInteger verticalCurrentAngle;
+
+/** 鏂瑰悜 */
+@property (readonly) NSInteger orientation;
+
+/** 鐗堟湰鍙� */
+@property (readonly) NSInteger ptzCfgVersion;
+
+/** 鍒濆鍖� */
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+- (float)horCurAngPercent;
+- (float)verCurAngPercent;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZDeviceRecordFile.h b/EZSDK/EZSDK/SDK/include/modules/EZDeviceRecordFile.h
index 5e0eca5..b7a2867 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZDeviceRecordFile.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZDeviceRecordFile.h
@@ -15,9 +15,12 @@
 @property (nonatomic, strong) NSDate *startTime;
 /// 璁惧褰曞儚鏂囦欢鐨勭粨鏉熸椂闂�
 @property (nonatomic, strong) NSDate *stopTime;
-
+/// 鏂囦欢绫诲瀷 -2:UNKNOW -1:ALLEVENT 0:ALARM 1:TIMING 2:IO 3:CMR 4:event 5:all
 @property (nonatomic, assign) int type;
 @property (nonatomic, copy) NSString *channelType;
 
 
+@property (nonatomic, assign) int seq;
+@property (nonatomic, strong) NSData *imageData;///< 
+
 @end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZMediaSessionVideoParam.h b/EZSDK/EZSDK/SDK/include/modules/EZMediaSessionVideoParam.h
deleted file mode 100644
index 317a8a0..0000000
--- a/EZSDK/EZSDK/SDK/include/modules/EZMediaSessionVideoParam.h
+++ /dev/null
@@ -1,18 +0,0 @@
-//
-//  EZMediaSessionVideoParam.h
-//  EZBAVClient
-//
-//  Created by kanhaiping on 2018/7/13.
-//  Copyright 漏 2018骞� hikvision. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-@interface EZMediaSessionVideoParam : NSObject
-@property (nonatomic, strong, readonly) NSString *resolutionPreset;
-@property (nonatomic, assign) NSInteger pixelWidth;
-@property (nonatomic, assign) NSInteger pixelHeigth;
-@property (nonatomic, assign) NSInteger videoOrientation;//浼犲叆 AVCaptureVideoOrientation锛岄粯璁ょ珫灞�
-@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;//I甯ч棿闅旓紝鍗曚綅绉�
-//@property (nonatomic, assign) BOOL isCrop;
-@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZPMPlayPrivateTokenInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZPMPlayPrivateTokenInfo.h
new file mode 100644
index 0000000..7d69b75
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZPMPlayPrivateTokenInfo.h
@@ -0,0 +1,22 @@
+//
+//  EZPMPlayPrivateTokenInfo.h
+//  EZPlay
+//
+//  Created by JuneCheng on 2022/11/24.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZPMPlayPrivateTokenInfo : NSObject
+
+@property (nonatomic, assign) BOOL enable;///<
+@property (nonatomic, copy) NSString *token;///<
+
+
+- (instancetype)initWithType:(NSInteger)type data:(NSData *)data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZProbeDeviceInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZProbeDeviceInfo.h
index 7ebe5c3..18e7369 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZProbeDeviceInfo.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZProbeDeviceInfo.h
@@ -1,6 +1,6 @@
 //
 //  EZProbeDeviceInfo.h
-//  EzvizOpenSDK
+//  EZWiFiConfigSDK
 //
 //  Created by DeJohn Dong on 15/12/11.
 //  Copyright 漏 2015骞� Ezviz. All rights reserved.
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZRecordCoverFetcherManager.h b/EZSDK/EZSDK/SDK/include/modules/EZRecordCoverFetcherManager.h
new file mode 100644
index 0000000..8c9e365
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZRecordCoverFetcherManager.h
@@ -0,0 +1,69 @@
+//
+//  EZRecordCoverFetcherManager.h
+//  EZPlay
+//
+//  Created by JuneCheng on 2022/12/19.
+//
+
+#import <Foundation/Foundation.h>
+@class EZDeviceRecordFile;
+
+// Fetcher鍒濆鍖栦唬鐞�
+@protocol RecordCoverFetcherDelegate<NSObject>
+
+@optional
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栨垚鍔熷洖璋�
+ */
+- (void)onFetcherInitSuccess;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧櫒鍒濆鍖栧け璐ュ洖璋�
+ */
+- (void)onFetcherInitFailed;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈡垚鍔熷洖璋�
+ */
+- (void)onGetCoverSuccess:(int)seq data:(NSData *_Nonnull)data;
+
+/**
+ * SD鍗″綍鍍忓皝闈㈡彁鍙栧皝闈㈠け璐ュ洖璋�
+ */
+- (void)onGetCoverFailed:(int)errorCode;
+
+@end
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZRecordCoverFetcherManager : NSObject
+
+
+@property (nonatomic, weak) id <RecordCoverFetcherDelegate> fetcherDelegate;
+
++ (instancetype)sharedInstance;
+
+/**
+ * 涓庤澶囧缓绔嬮摼鎺�
+ *
+ * @param   deviceSerial 璁惧搴忓垪鍙�
+ * @param   cameraNo 璁惧閫氶亾鍙�
+ */
+- (void)initFetcherWithDeviceSerial:(NSString *)deviceSerial cameraNo:(NSInteger)cameraNo;
+
+
+/**
+ * 鏂紑涓庤澶囩殑閾炬帴
+ */
+- (void)stopFetcher;
+
+
+/**
+ * 璺熻澶囪姹係D鍗″綍鍍忓皝闈�
+ */
+- (void)requestRecordCover:(NSArray<EZDeviceRecordFile *> *)recordFiles;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZRecordDownloadTask.h b/EZSDK/EZSDK/SDK/include/modules/EZRecordDownloadTask.h
index b38f72d..ba50a2a 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZRecordDownloadTask.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZRecordDownloadTask.h
@@ -36,7 +36,7 @@
 /**
  鏈湴瀛樻斁璺緞
  */
-@property (nonatomic,strong) NSString *saveFilePath;
+@property (nonatomic, strong) NSString *saveFilePath;
 
 /**
  缁撴潫鍥炶皟
@@ -47,6 +47,11 @@
  澶辫触鍥炶皟
  */
 @property (nonatomic, copy) void(^failed)(NSError *error);
+
+/**
+ 宸蹭笅杞芥枃浠跺ぇ灏忓洖璋�
+ */
+@property (nonatomic, copy) void(^downloading)(NSUInteger downloadSize);
 
 /**
  寮�濮嬩笅杞�
@@ -66,8 +71,16 @@
  @param finshed 缁撴潫鍥炶皟
  @param failed 澶辫触鍥炶皟
  */
-- (void) setDownloadCallBackWithFinshed:(void(^)(EZRecordDownloaderStatus statusCode))finshed
-                                 failed:(void(^)(NSError *error))failed;
+- (void)setDownloadCallBackWithFinshed:(void(^)(EZRecordDownloaderStatus statusCode))finshed
+                                failed:(void(^)(NSError *error))failed;
+
+/**
+ 璁剧疆涓嬭浇杩涘害鍥炶皟
+ 
+ @param downloading 涓嬭浇鏂囦欢澶у皬鍥炶皟
+ */
+- (void)setDownloadCallBackWithDownloadSize:(void(^)(NSUInteger downloadSize))downloading;
+
 @end
 
 NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZSADPDeviceInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZSADPDeviceInfo.h
index 1c64f81..7abbece 100644
--- a/EZSDK/EZSDK/SDK/include/modules/EZSADPDeviceInfo.h
+++ b/EZSDK/EZSDK/SDK/include/modules/EZSADPDeviceInfo.h
@@ -37,6 +37,4 @@
 ///鏄惁鏄悿鐭宠澶�
 @property (nonatomic,assign) BOOL isEzvizDevice;
 
-
-
 @end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZBAVParam.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZBAVParam.h
new file mode 100644
index 0000000..b3d1e94
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZBAVParam.h
@@ -0,0 +1,196 @@
+//
+//  EZBAVParam.h
+//  EZBAVClient
+//
+//  Created by kanhaiping on 2018/6/27.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+
+/*
+ typedef struct SBavDevInfo
+ {
+     YS_INT8            m_szDevSerial[STREAM_DEV_SERIAL_LEN + 1];                //蹇呭~    璁惧搴忓垪鍙�
+     YS_UINT32        m_sChannel;                                                //蹇呭~    閫氶亾鍙�
+     YS_INT16        m_sDevStreamType;                                        //蹇呭~    璁惧涓诲瓙鐮佺被鍨�
+     YS_INT8            m_szAuthToken[STREAM_TOKEN_LEN + 1];                    //蹇呭~    璁よ瘉token
+ }SBavDevInfo;
+ */
+
+@interface EZBAVDevInfo : NSObject
+@property (nonatomic, strong) NSString *serial; /**< 蹇呭~    璁惧搴忓垪鍙� */
+@property (nonatomic, assign) int32_t m_iChannel;//蹇呭~    閫氶亾鍙�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//蹇呭~    璁惧涓诲瓙鐮佺被鍨�
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~    璁よ瘉token */
+@end
+/*
+ typedef struct
+ {
+     YS_UINT32        m_iRoomId;                                                //蹇呭~    闇�瑕佸姞鍏ユ埧闂村彿
+     YS_UINT32        m_uClientId;                                            //蹇呭~    鍔犲叆鏂筩lientId
+     YS_INT8            m_szCustomId[CUSTOMID_LEN + 1];                            //閫夋嫨    鍔犲叆鏂硅嚜瀹氫箟Id
+     YS_INT8            m_szPassword[STREAM_TOKEN_LEN + 1];                        //蹇呭~    鎴块棿瀵嗙爜
+     YS_UINT8        m_iCltType;                                                //蹇呭~    瀹㈡埛绔被鍨�
+     YS_UINT16        m_iStsPort;                                                //蹇呭~    杞彂鏈嶅姟绔彛
+     YS_INT8            m_szStsAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1];            //蹇呭~    杞彂鏈嶅姟鍦板潃
+     YS_UINT16        m_iVcPort;                                                //蹇呭~    浼氭帶鏈嶅姟绔彛
+     YS_INT8            m_szVcAddr[CLIENT_STREAM_SVR_ADDR_LEN + 1];                //蹇呭~    浼氭帶鏈嶅姟鍦板潃
+     YS_INT8            m_szFilePath[FLIEPATH + 1];                                //閫夋嫨  鍐欐枃浠剁殑璺緞
+     YS_INT8            m_szExtensionParas[CLIENT_STREAM_EXTENSION_LEN + 1];    //閫夋嫨    鎵╁睍瀛楁淇℃伅
+ }EZConferenceParam;
+ */
+@interface EZRTCJoinParam : NSObject
+@property (nonatomic, assign) int32_t m_iRoomId; /**<蹇呭~    闇�瑕佸姞鍏ユ埧闂村彿 */
+@property (nonatomic, assign) int32_t m_uClientId; /**< 蹇呭~    鍔犲叆鏂筩lientId */
+@property (nonatomic, strong) NSString *m_szCustomId;  /**< 閫夋嫨    鍔犲叆鏂硅嚜瀹氫箟Id */
+@property (nonatomic, strong) NSString *m_szPassword;  /**< 閫夋嫨     鎴块棿瀵嗙爜 */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~    瀹㈡埛绔被鍨� */
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~    瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~    瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~    杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~    杞彂鏈嶅姟绔彛 */
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨    鎵╁睍瀛楁淇℃伅 */
+
+@end
+
+
+@interface EZBAVParam : NSObject
+
+@property (nonatomic, assign) int32_t m_iCltRole; /**< 蹇呭~    0 鍙戣捣 1 鎺ュ彈 鍙戣捣绔~鍐�0 鎺ュ彈绔~鍐�1 鎷掔粷涓�2 */
+@property (nonatomic, assign) int32_t m_iStreamType;/**< 蹇呴��    0 闊宠棰� 1 瀵硅 2 浼氳*/
+//@property (nonatomic, assign) int32_t m_szIsNpq;/**< 閫夋嫨  0 涓嶈蛋NPQ锛岃蛋TCP 1 鏄疦PQ锛岃蛋UDP */
+@property (nonatomic, assign) int32_t m_iCltType; /**< 蹇呭~    瀹㈡埛绔被鍨� */
+
+@property (nonatomic, strong) NSString *m_szVcAddr;//蹇呭~    瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟鍦板潃
+@property (nonatomic, assign) int32_t m_iVcPort;//蹇呭~    瑙嗛浼氳蹇呭~ 浼氭帶鏈嶅姟绔痥鍙�
+@property (nonatomic, strong) NSString *m_szStsAddr; /**< 蹇呭~    杞彂鏈嶅姟鍦板潃 */
+@property (nonatomic, assign) int32_t m_iStsPort; /**< 蹇呭~    杞彂鏈嶅姟绔彛 */
+
+@property (nonatomic, assign) int32_t m_iRoomId; /**< 閫夋嫨    闇�瑕佸姞鍏ユ埧闂村彿锛屽彧鏈夋帴鍙楃闇�瑕佸~鍐� */
+@property (nonatomic, assign) int32_t m_iClientId; //閫夊~  鍙戣捣or鍔犲叆鑰呯殑id
+@property (nonatomic, strong) NSString *m_szSelfId;  /**< 蹇呭~  鏍囪瘑Id */
+@property (nonatomic, assign) int32_t m_iReason; /**< 閫夋嫨  鍘熷洜 鎷掓帴鎺ュ惉101 鏃犱汉鎺ュ惉102 */
+
+//@property (nonatomic, assign) int32_t m_iMaxBitrate;/**< 蹇呭~    鐮佺巼鍙樺寲鑼冨洿鐨勬渶澶у�� */
+//
+//@property (nonatomic, assign) int32_t m_iMinBitrate;/**< 蹇呭~    鐮佺巼鍙樺寲鑼冨洿鐨勬渶灏忓�� */
+
+//@property (nonatomic, assign) int32_t m_iType;/**< 閫夋嫨  鍙傝�傿AV_QOS_TYPE */
+//
+//@property (nonatomic, assign) int32_t m_iVideo;/**< 閫夋嫨  鏄惁寮�鍚棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+//
+//@property (nonatomic, assign) int32_t m_iAudio;/**< 閫夋嫨  鏄惁寮�鍚煶棰慟os 1 寮�鍚� 0 涓嶅紑鍚� */
+
+@property (nonatomic, assign) int32_t m_iAuthType; /**< 蹇呭~    璁よ瘉鏂瑰紡 */
+@property (nonatomic, strong) NSString *m_szAuthToken; /**< 蹇呭~    璁よ瘉token */
+
+
+
+@property (nonatomic, assign) int32_t m_iOtherCltType; /**< 閫夋嫨    鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, strong) NSString *m_szOterId; /**< 閫夋嫨    鍙湁瀵圭鏄墜琛ㄧ闇�濉啓 */
+@property (nonatomic, assign) int32_t m_iChannel;//閫夊~  涓夋柟闊宠棰戞椂锛孖PC璁惧闇�瑕佸~鍐�
+@property (nonatomic, assign) int32_t m_iDevStreamType;//閫夊~  璁惧涓诲瓙鐮佹祦
+
+@property (nonatomic, strong) NSString *m_szExtensionParas; /**< 閫夋嫨    鎵╁睍瀛楁淇℃伅 */
+
+
+@end
+
+
+
+/// 涓庝細鑰呬俊鎭�
+@interface EZRTCParticipantsInfo : NSObject
+@property (nonatomic, assign) uint32_t m_uRoomId;
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, strong) NSString *m_szUserName;
+@property (nonatomic, assign) uint8_t m_iCltType; //鐢ㄤ互鍖哄垎鏄惁鏄澶� 111:璁惧 
+@property (nonatomic, assign) int8_t audioState;// 澹伴煶鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t videoState;// 瑙嗛鍚敤鐘舵�� 0-鍏抽棴 1-涓绘祦 5-涓诲瓙娴�
+@property (nonatomic, assign) int8_t shareState;// 灞忓箷鍏变韩鍚敤鐘舵�� 0-鍏抽棴 1-鍚敤
+@property (nonatomic, assign) int8_t upNetState;//缃戠粶鐘舵��
+@property (nonatomic, assign) int8_t downNetState;//缃戠粶鐘舵��
+
+@end
+
+
+@interface EZRTCParticipantVolume : NSObject
+@property (nonatomic, assign) uint32_t m_uClientId;
+@property (nonatomic, strong) NSString *m_sCustomId;
+@property (nonatomic, assign) uint8_t m_sVolume;    //闊抽噺寮哄害0-10 10涓烘渶寮� 0涓烘渶寮�
+@end
+
+
+@interface EZRTCStatistic : NSObject
+@property (nonatomic, assign) int32_t type;//0锛氬瓙琛� 1锛氫富琛�
+@property (nonatomic, strong) NSDictionary *statisticInfo;
+@end
+
+///鏈湴鐨勯煶瑙嗛缁熻
+@interface EZRTCLocalStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoSentBitrate; //瑙嗛浼犺緭鐮佺巼(涓婅)
+@property (nonatomic, assign) uint32_t videoSentFrameRate; //甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate; //瑙嗛涓㈠寘鐜�
+@property (nonatomic, assign) uint16_t videoStreamType; //娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioSentBitrate;//闊抽浼犺緭鐮佺巼
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//闊抽涓㈠寘鐜�
+@end
+
+///杩滅鐨勯煶瑙嗛缁熻
+@interface  EZRTCRemoteStatistics : NSObject
+///瑙嗛鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t videoClientId; //杩滅瑙嗛clientId
+@property (nonatomic, assign) uint32_t videoReceivedBitrate;//杩滅瑙嗛浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint32_t videoReceivedFrameRate;//杩滅甯х巼澶у皬
+@property (nonatomic, assign) uint16_t videoPacketLossRate;//杩滅瑙嗛涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t videoTotalFrozenTime;//杩滅瑙嗛鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t videoFrozenRate; //杩滅瑙嗛鍗¢】姣�
+@property (nonatomic, assign) uint16_t streamType; //杩滅娴佺被鍨�
+///闊抽鎸囨爣鍙傛暟
+@property (nonatomic, assign) uint32_t audioClientId; //杩滅闊抽clientId
+@property (nonatomic, assign) uint32_t audioReceivedBitrate;//杩滅闊抽浼犺緭鐮佺巼锛堜笅琛岋級
+@property (nonatomic, assign) uint16_t audioPacketLossRate;//杩滅闊抽涓㈠寘鐜�(涓嬭)
+@property (nonatomic, assign) uint16_t audioTotalFrozenTime;//杩滅闊抽鎬荤殑鍗¢】鏃堕暱
+@property (nonatomic, assign) uint16_t audioFrozenRate; //杩滅闊抽鍗¢】姣�
+
+@end
+
+@interface EZRTCVideoSize : NSObject
+
+@property (nonatomic, assign) int width;//瀹�
+@property (nonatomic, assign) int height;//楂�
+
+@end
+
+extern int32_t const EZBAVMessageRoomCreated;
+extern int32_t const EZBAVMessagePeerEnteredRoom;
+extern int32_t const EZBAVMessagePeerLeaveRoom;
+extern int32_t const EZBAVMessageStartInputData;
+//extern int32_t const EZBAVMessageOtherDisconnect;
+extern int32_t const EZBAVMessageTransferData;
+//extern int32_t const EZBAVMessageClientInfo;//鍏朵粬涓庝細瀹㈡埛绔俊鎭�
+extern int32_t const EZBAVMessageClientVolume;//鍏朵粬涓庝細瀹㈡埛绔煶閲�
+extern int32_t const EZBAVMessageClientAudioAvailable;
+extern int32_t const EZBAVMessageClientVideoAvailable;
+extern int32_t const EZBAVMessageNetworkQuality;
+extern int32_t const EZBAVMessageClientShareAvailable;
+extern int32_t const EZBAVMessageJoinRoomOK;
+extern int32_t const EZBAVMessageForcedQuit;
+extern int32_t const EZBAVMessageStatistic;
+
+extern int32_t const EZBAVForcedQuitReasonRepeatJoin;//宸插湪鍏朵粬鍦版柟鍔犲叆鎴块棿
+extern int32_t const EZBAVForcedQuitReasonMovedOut;//琚鐞嗗憳绉诲嚭鎴块棿
+extern int32_t const EZBAVForcedQuitReasonRoomDissolved;//鎴块棿瑙f暎
+
+extern int32_t const  EZBAVMessageLocalVideoStats;//缁熻鏈湴瑙嗛瀹炴椂鏁版嵁
+extern int32_t const  EZBAVMessageLocalAudioStats;//缁熻鏈湴闊抽瀹炴椂鏁版嵁
+extern int32_t const  EZBAVMessageRemoteVideoStats;//缁熻杩滅瑙嗛瀹炴椂鏁版嵁
+extern int32_t const  EZBAVMessageRemoteAudioStats;//缁熻杩滅闊抽瀹炴椂鏁版嵁
+
+
+
+typedef void(^EZAudioOpenResultBlock)(NSInteger ret);
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZConferenceClient.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZConferenceClient.h
new file mode 100644
index 0000000..43d478e
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZConferenceClient.h
@@ -0,0 +1,238 @@
+//
+//  EZBAVClient.h
+//  EZBAVClient
+//
+//  Created by kanhaiping on 2018/6/26.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+
+
+@class EZConferenceClient;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZConferenceClientDelegate<NSObject>
+
+
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZConferenceClient *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+    濡傛灉鏄疎ZBAVMessagePeerEnteredRoom锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId銆乵_szUserName瀛楁鏈夋晥
+    濡傛灉鏄疎ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId瀛楁鏈夋晥
+    濡傛灉鏄疎ZBAVMessageClientVolume娑堟伅锛宮sg鏄疎ZBAVParticipantVolume瀵硅薄
+    濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+    濡傛灉娑堟伅鏄疎ZBAVMessageClientAudioAvailable锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宎udioState瀛楁鏈夋晥
+    濡傛灉娑堟伅鏄疎ZBAVMessageClientVideoAvailable 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜寁ideoState瀛楁鏈夋晥
+    濡傛灉娑堟伅鏄疎ZBAVMessageNetworkQuality 锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄锛屼絾鏄彧鏈塵_uClientId鍜宯etState瀛楁鏈夋晥
+    濡傛灉娑堟伅鏄疎ZBAVMessageJoinRoomOK 锛宮sg鏄痭il
+    濡傛灉娑堟伅鏄疎ZBAVMessageForcedQuit 锛宮sg鏄疦SNumber锛屾瘮濡侤(EZBAVForcedQuitReasonMovedOut)
+    濡傛灉娑堟伅鏄疎ZBAVMessageStatistic锛宮sg鏄疎ZRTCStatistic
+ 
+ */
+- (void)bavClient:(EZConferenceClient *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+@optional
+
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZConferenceClient *)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】
+ 
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTime:(int32_t)delayTime ofRemoteClient:(int)clientID;
+
+/**
+ 鎾斁鍗¢】缁熻
+ 
+ @param client client
+ @param delayTimeStat 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZConferenceClient *)client playDelayTimeStatistics:(double)delayTimeStat ofRemoteClient:(int)clientID;
+
+/**
+ 鏈湴瑙嗛鏁版嵁鍥炶皟
+ 
+ @param localVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width    瀹藉害
+ @param height  楂樺害
+ */
+- (void)onLocalVideoStats:(EZRTCLocalStatistics *)localVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 鏈湴闊抽鏁版嵁鍥炶皟
+ 
+ @param localAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onLocalAudioStats:(EZRTCLocalStatistics *)localAudioStatistics;
+
+/**
+ 杩滅瑙嗛鏁版嵁鍥炶皟
+ 
+ @param remoteVideoStatistics 瑙嗛鐩稿叧鍙傛暟
+ @param width    瀹藉害
+ @param height  楂樺害
+ */
+- (void)onRemoteVideoStats:(EZRTCRemoteStatistics *)remoteVideoStatistics width:(int)width height:(int)height;
+
+/**
+ 杩滅闊抽鏁版嵁鍥炶皟
+ 
+ @param remoteAudioStatistics 闊抽鐩稿叧鍙傛暟
+ */
+- (void)onRemoteAudioStats:(EZRTCRemoteStatistics *)remoteAudioStatistics;
+
+
+@end
+
+@interface EZConferenceClient : NSObject
+
+@property (nonatomic, weak) id<EZConferenceClientDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+@property (nonatomic, assign, readonly) int32_t clientID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param param 鍙傛暟
+- (NSInteger)enterRoom:(EZRTCJoinParam *)param;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(nullable EZVideoTalkView *)localWin;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+/// @param encodeParam 缂栫爜鍙傛暟锛屽彲浠ヤ紶鍏il
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+                 withResultBlock:(EZScreenShareResultBlock)resultBlock
+                   andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+
+/// 閭�璇疯澶囧姞鍏ヤ細璁�
+/// @param dev 璁惧淇℃伅
+- (int32_t)inviteDev:(EZBAVDevInfo *_Nonnull)dev;
+
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+- (EZRTCStatistic *_Nullable)getStatistic;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 寮�鍏充細璁腑鏌愪釜涓庝細鑰呯殑澹伴煶锛岄粯璁ゅ紑
+/// @param open YES:寮�锛孨O:鍏�
+- (int32_t)soundCtrl:(BOOL)open forClient:(int32_t)clientID;
+
+
+
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path  forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCCameraParam.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCCameraParam.h
new file mode 100644
index 0000000..503a5b8
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCCameraParam.h
@@ -0,0 +1,38 @@
+//
+//  EZMediaSessionVideoParam.h
+//  EZBAVClient
+//
+//  Created by kanhaiping on 2018/7/13.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <AVFoundation/AVFoundation.h>
+
+@interface EZRTCCameraParam : NSObject
+
+
+/// 鎽勫儚澶撮噰闆嗛噰闆嗙敾闈㈢殑榛樿璁剧疆锛屾瘮濡侫VCaptureSessionPreset1280x720锛岃浼犲叆AVCaptureSessionPreset640x480 浠ヤ笂鐨勫垎杈ㄧ巼
+//@property (nonatomic, strong) AVCaptureSessionPreset resolutionPreset;
+
+/// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勫
+//@property (nonatomic, assign) NSInteger pixelWidth;
+//
+///// 鏈�缁堣緭鍑虹殑鐢婚潰鐨勯珮
+//@property (nonatomic, assign) NSInteger pixelHeigth;
+
+/// 浼犲叆 AVCaptureVideoOrientation锛岄粯璁ょ珫灞�
+@property (nonatomic, assign) AVCaptureVideoOrientation videoOrientation;
+
+
+/// 鏄惁鏄悗缃憚鍍忓ご锛岄粯璁O
+@property (nonatomic, assign) BOOL isBackCameraSeleced;
+
+///// I甯ч棿闅� 榛樿4绉�
+//@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;
+//
+///// 甯х巼
+//@property (nonatomic, assign) NSInteger fps;
+
++ (AVCaptureSessionPreset)resolutionPresetForWidth:(NSInteger)width andHeigth:(NSInteger)heigth andOri:(AVCaptureVideoOrientation)ori;
+@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h
new file mode 100644
index 0000000..7c1a1bb
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCMediaSessionDefines.h
@@ -0,0 +1,107 @@
+//
+//  EZMediaSessionDefines.h
+//  H264 Encode and Decode
+//
+//  Created by kanhaiping on 2018/6/22.
+//  Copyright 漏 2018骞� AJB. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#define EZMediaSessionEncodeResolutionRatioHigh  1  //鍒嗚鲸鐜� 1锛�480*480 0锛�320*320
+#define EZMediaSessionDstVideoFPS (15)
+#define EZMediaSessionDstVideoMaxKeyFrameInterval (300)//鍗曚綅绉�
+
+#define EZMediaSessionSmallStreamWidth (320)
+#define EZMediaSessionSmallStreamHeight (320)
+
+#define EZMediaSessionDefaultStreamWidth (480)
+#define EZMediaSessionDefaultStreamHeight (480)
+
+#define EZMediaSessionDstVideoAverageBitRate480x480 (4 * 128 * 1024)//鍗曚綅 bps  //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits480x480 (6 * 128 * 1024)//鍗曚綅 bps  //maxBPS
+#define EZMediaSessionDstVideoAverageBitRate320x320 (4 * 128 * 1024 * 5 / 8)//鍗曚綅 bps  //averageBPS
+#define EZMediaSessionDstVideoDataRateLimits320x320 (6 * 128 * 1024 * 5 / 8)//鍗曚綅 bps  //maxBPS
+
+
+typedef NS_OPTIONS(NSUInteger, EZMediaCaptureSessionType) {
+    EZMediaSessionCaptureNone = 1 << 0,
+    EZMediaSessionCaptureVideoType = 1 << 1,
+    EZMediaSessionCaptureAudioType = 1 << 2,
+    EZMediaSessionCaptureThumbnailType = 1 << 3,
+    EZMediaSessionCaptureShareScreenType = 1 << 4,
+
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaSessionErrorBase) {
+    EZMediaSessionErrorUnknowError = 9000,
+    EZMediaSessionErrorNotReadyToSendData,
+    EZMediaSessionErrorCallSeqError,
+    EZMediaSessionErrorDuplicated,
+    EZMediaSessionErrorBaseAudioCapture = 10000,
+    EZMediaSessionErrorBaseVideoCapture = 20000,
+    EZMediaSessionErrorBaseAudioEncode = 30000,
+    EZMediaSessionErrorBaseVideoEncode = 40000,
+    EZMediaSessionErrorBaseStreamClient = 50000,
+    EZMediaSessionErrorBasePlayer = 60000,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioRecorderError) {
+    EZAudioRecorderErrorUnknown = EZMediaSessionErrorBaseAudioCapture,
+    EZAudioRecorderErrorInitError = 10100,
+    EZAudioRecorderErrorUnableToCreateSample,
+    EZAudioRecorderErrorStateError,
+    EZAudioRecorderErrorAuthorizeFailed = 10152,
+    EZAudioRecorderErrorStopError = 10200,
+};
+
+typedef NS_ENUM(NSUInteger, EZMediaCaptureError) {
+    EZMediaCaptureErrorUnknown = EZMediaSessionErrorBaseVideoCapture,
+    EZMediaCaptureErrorInitError = 20100,
+    EZMediaCaptureErrorAuthorizeFailed = 20153,
+    EZMediaCaptureErrorSwitchCameraError = 20200,
+    EZMediaCaptureErrorCroppedError = 20300,
+    EZMediaCaptureErrorRenderError = 20400,
+    EZMediaCaptureErrorScreenStartError = 20500,
+    EZMediaCaptureErrorScreenStopError,
+    EZMediaCaptureErrorScreenRecordError,
+    EZMediaCaptureErrorUnsupport,
+};
+
+typedef NS_ENUM(NSUInteger, EZAudioEncoderError) {
+    EZAudioEncoderErrorUnknown = EZMediaSessionErrorBaseAudioEncode,
+    EZAudioEncoderErrorFailToInitConverter = 30100,
+    EZAudioEncoderErrorFailToGetDataBuffer,
+    EZAudioEncoderErrorFailToEncodeBuffer,
+};
+
+typedef NS_ENUM(NSUInteger, EZVideoH264EncoderError) {
+    EZVideoH264EncoderErrorUnknown = EZMediaSessionErrorBaseVideoEncode,
+    EZVideoH264EncoderErrorInitFailed = 40100,
+    EZVideoH264EncoderErrorInvalidSample,
+    EZVideoH264EncoderErrorSampleNotReady,
+    EZVideoH264EncoderErrorNotRunning,
+    EZVideoH264EncoderErrorSetMaxBPSFailed,
+    EZVideoH264EncoderErrorSetAverageBPSFailed,
+    EZVideoH264EncoderErrorParamError,
+    EZVideoH264EncoderErrorEncodeFailed = 40200,
+};
+
+typedef NS_ENUM(NSUInteger, EZBAVStreamClientError) {
+    EZBAVStreamClientErrorUnknow = EZMediaSessionErrorBaseStreamClient,
+    EZBAVStreamClientErrorAudioEnableNotAllowed = EZMediaSessionErrorBaseStreamClient + 9000,
+    EZBAVStreamClientErrorShareEnableNotAllowed,
+
+};
+
+
+typedef NS_ENUM(NSUInteger, EZRTCAudioEncodeType) {
+    EZRTCAudioEncodeType_AAC,
+    EZRTCAudioEncodeType_Opus,
+};
+
+
+@interface EZRTCMediaSessionDefines : NSObject
+@end
+
+typedef void(^EZScreenShareResultBlock)(NSInteger ret);
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h
new file mode 100644
index 0000000..f1d9a21
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCSampleHandleManager.h
@@ -0,0 +1,31 @@
+//
+//  FIAgoraSocketManager.h
+//  FIAgoraVideo
+//
+//  Created by flagadmin on 2020/5/7.
+//  Copyright 漏 2020 flagadmin. All rights reserved.
+//
+
+#import <ReplayKit/ReplayKit.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef enum : NSUInteger {
+    EZSampleHandleManagerStateUnconnected,
+    EZSampleHandleManagerStateConnecting,
+    EZSampleHandleManagerStateConnected,
+    EZSampleHandleManagerStateStopped,
+} EZSampleHandleManagerState;
+
+
+@interface EZRTCSampleHandleManager : NSObject
++ (EZRTCSampleHandleManager *)sharedManager;
+@property (nonatomic, assign, readonly) EZSampleHandleManagerState state;
+- (void)setup;
+- (void)finish;
+- (void)sendVideoBuffer:(CMSampleBufferRef)sampleBuffer;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h
new file mode 100644
index 0000000..b420fba
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZRTCVideoEncodeParam.h
@@ -0,0 +1,30 @@
+//
+//  EZMediaSessionEncodeParam.h
+//  EZMediaSession
+//
+//  Created by kanhaiping on 2018/8/24.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class EZRTCCameraParam;
+
+@interface EZRTCVideoEncodeParam : NSObject
+
+//濡傛灉缂栫爜鐨勭洰鏍囧楂樹负0锛屽垯缂栫爜杈撳嚭涓鸿緭鍏ョ殑鍘熷瀹介珮
+@property (nonatomic, assign) NSInteger pixelWidth;
+@property (nonatomic, assign) NSInteger pixelHeigth;
+@property (nonatomic, assign) NSInteger fps;
+@property (nonatomic, assign) NSInteger averageBPS;
+@property (nonatomic, assign, readonly) NSInteger maxBPS;
+@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;//I甯ч棿闅旓紝鍗曚綅绉�
+
+//+ (EZRTCVideoEncodeParam *)encodeParamFromVideoParam:(EZRTCCameraParam *)videoParam;
++ (EZRTCVideoEncodeParam *)defaultEncodeParam;
++ (EZRTCVideoEncodeParam *)deviceWatchParam;
++ (EZRTCVideoEncodeParam *)deviceBabyRobotParam;
++ (EZRTCVideoEncodeParam *)encodeParamForScreenShare;
++ (EZRTCVideoEncodeParam *)encodeParamForGlobalScreenShare;
+
+@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalk.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalk.h
new file mode 100644
index 0000000..98fda05
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalk.h
@@ -0,0 +1,179 @@
+//
+//  EZBAVClient.h
+//  EZBAVClient
+//
+//  Created by kanhaiping on 2018/6/26.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+#import "EZBAVParam.h"
+#import "EZRTCMediaSessionDefines.h"
+#import "EZVideoTalkView.h"
+
+@class EZVideoTalk;
+@class EZRTCCameraParam;
+@class EZRTCVideoEncodeParam;
+
+@protocol EZVideoTalkDelegate<NSObject>
+
+@required
+/// 閿欒鍥炶皟
+/// @param client client
+/// @param errorCode 鍑洪敊鐨勯敊璇爜
+- (void)bavClient:(EZVideoTalk *)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 闄勫姞淇℃伅锛�
+    濡傛灉鏄疎ZBAVMessagePeerEnteredRoom銆丒ZBAVMessagePeerLeaveRoom娑堟伅锛宮sg鏄疎ZRTCParticipantsInfo瀵硅薄
+    濡傛灉娑堟伅鏄� EZBAVMessageTransferData msg鏄� msg鏄瓧绗︿覆 @"瀹為檯鐨勯�忎紶娑堟伅"
+ */
+- (void)bavClient:(EZVideoTalk *)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+
+@optional
+///**
+// 鍥炶皟娑堟伅 bavclient log鍥炶皟
+//
+// @param client client
+// @param msg 閫忎紶娑堟伅
+// */
+//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
+
+/**
+ 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
+
+ @param client client
+ @param width 鐢婚潰瀹藉害
+ @param height 鐢婚潰楂樺害
+ */
+- (void)bavClient:(EZVideoTalk *)client didDisplayWidth:(int32_t)width height:(int32_t)height;
+
+/**
+ 鎾斁鍗¢】
+ 
+ @param client client
+ @param delayTime 鍗¢】鏃堕棿
+ */
+- (void)bavClient:(EZVideoTalk *)client playDelayTime:(int32_t)delayTime;
+
+///**
+// 鎾斁鍗¢】缁熻
+//
+// @param client client
+// @param delayTimeStat 鍗¢】鏃堕棿
+// */
+//- (void)bavClient:(EZVideoTalk *)client playDelayTimeStatistics:(double)delayTimeStat;
+
+@end
+
+
+
+/// 鍙屽悜闊宠棰戦�氳瘽绫�
+/// 1.涓诲姩鍛煎彨
+/// A.鍙戣捣
+/// - init
+/// - enableCapture
+/// - start:param  role=0 reason=0 roomid=0
+/// B.閫氳瘽缁撴潫 璋冪敤 stop
+/// C.绛夊緟瀵规柟杩囩▼涓寕鏂� 璋冪敤stop
+/// 2.琚姩鏀跺埌鍛煎彨
+/// - init
+/// - enableCapture
+/// 灞曠ず鎺ュ惉鐣岄潰
+/// A.濡傛灉鎺ュ惉 璋冪敤 start锛歱aram role=1 reason=0 roomid=鏀跺埌鐨剅oomid 鎺ュ惉瀹岄�氳瘽涓寕鏂皟鐢╯top
+/// B.濡傛灉涓诲姩鎷掓帴 璋冪敤 start锛歱aram role=2 reason=101 roomid=鏀跺埌鐨剅oomid 鎷掓帴瀹屾垚鍚庣珛椹皟鐢╯top
+/// C.濡傛灉鏃犱汉鎺ュ惉 璋冪敤 start锛歱aram role=2 reason=102 roomid=鏀跺埌鐨剅oomid 瀹屾垚鍚庣珛椹皟鐢╯top
+@interface EZVideoTalk : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkDelegate> delegate;
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+///  鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+#pragma 闄勫姞鎺ュ彛
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+/// 寮傛鑾峰彇鏈湴鎶撳浘
+/// @param block 鎶撳浘鎴愬姛鍥炶皟锛屽け璐mage涓簄il
+//- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
+
+/// 鑾峰彇杩滅鎶撳浘
+/// @param quality 鍘嬬缉璐ㄩ噺 0 ~ 100
+//- (UIImage *)remoteScreenShotWithQuality:(int)quality;
+
+/// 鏈湴褰曞埗
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startLocalVideoRecordWithPath:(NSString *)path;
+
+/// 鍋滄鏈湴褰曞埗
+//- (BOOL)stopLocalVideoRecord;
+
+/// 寮�濮嬭繙绔綍鍒� mp4
+/// @param path 鍐欏叆鐨勬矙鐩掕矾寰�
+//- (BOOL)startRemoteVideoRecordWithPath:(NSString *)path  forClient:(int32_t)clientID;
+
+
+/// 鍋滄杩滅褰曞埗
+//- (BOOL)stopRemoteVideoRecordForClient:(int32_t)clientID;
+
+
+/// 鍙戦�侀�忎紶娑堟伅鎺ュ彛锛屽悓姝ユ帴鍙o紝鍙兘鑰楁椂
+/// @param msg 娑堟伅鍐呭锛屾瘮濡俲son鏁版嵁
+- (int)sendTransferMsg:(NSString *)msg;
+
+@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h
new file mode 100644
index 0000000..5517624
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h
@@ -0,0 +1,63 @@
+//
+//  EZVideoTalkGlobal.h
+//  EZVideoTalk
+//
+//  Created by yuqian on 2018/9/12.
+//  Copyright 漏 2018骞� hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EZRTCMediaSessionDefines.h"
+
+@class EZRTCVideoEncodeParam;
+@class EZRTCCameraParam;
+
+@interface EZVideoTalkGlobal : NSObject
+
+/**
+ 鏃ュ織璁剧疆
+ 
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+
+
+/// 璁剧疆閲囬泦鐨勬憚鍍忓ご鍙傛暟锛屾瘮濡傞噰鐢ㄥ墠缃繕鏄悗缃紝鍦ㄥ彂璧蜂换浣曡棰戞搷浣滃墠璋冪敤鐢熸晥
+/// @param cameraParam 鎽勫儚澶村弬鏁�
++ (void)setCameraParam:(EZRTCCameraParam *)cameraParam;
+
+
+/// 璁剧疆閲囬泦鐨勮棰戠殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
+/// 璁剧疆閲囬泦鐨勮緟娴佺殑缂栫爜鍙傛暟锛屾瘮濡傞噰闆嗘渶缁堣緭鍑虹殑鍒嗚鲸鐜囥�佺爜鐜囩瓑
+/// @param encodeParam 缂栫爜鍙傛暟
++ (void)setSmallVideoEncodeParam:(EZRTCVideoEncodeParam *)encodeParam;
+
+
++ (EZRTCAudioEncodeType)audioEncodeType;
+
+/// 璁剧疆缂栫爜绫诲瀷锛屽湪瑙嗛閫氳瘽鍙戣捣鍓嶈缃湁鏁�
++ (void)setAudioEncodeType:(EZRTCAudioEncodeType)type;
+
+@end
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h
new file mode 100644
index 0000000..353e0c0
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h
@@ -0,0 +1,268 @@
+//
+//  EZVideoTalkSDK.h
+//  EZOpenSDK
+//
+//  Created by yuqian on 2020/3/14.
+//  Copyright 漏 2020 Hikvision. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "EZRTCMediaSessionDefines.h"
+#import "EZBAVParam.h"
+
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@class EZVideoTalkSDK, EZMediaSessionVideoParam, EZVideoTalkView, EZBAVParam, EZConferenceParam;
+
+@protocol EZVideoTalkSDKDelegate<NSObject>
+
+- (void)videoTalk:(id)client didReceivedError:(int32_t)errorCode;
+
+/**
+ 鍥炶皟娑堟伅
+
+ @param client client
+ @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
+ @param msg 閫忎紶娑堟伅锛�
+    濡傛灉鏄疎ZVideoTalkMessagePeerEnteredRoom鍜孍ZVideoTalkMessagePeerLeaveRoom娑堟伅锛宮sg鏄瘂@"clientID":@(9527),@"clientName":@"寮犱笁"}
+        濡傛灉娑堟伅鏄� EZVideoTalkMessageTransferData msg鏄� msg鏄瘂@"content":@"瀹為檯鐨勯�忎紶娑堟伅"}
+ */
+- (void)videoTalk:(id)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
+
+/// 鐢婚潰鏄剧ず鍥炶皟
+/// @param client client
+/// @param width 鐢婚潰鐨勫 鍍忕礌鍗曚綅
+/// @param height 鐢婚潰鐨勯珮 鍍忕礌鍗曚綅
+/// @param userID 鐢ㄦ埛id
+- (void)videoTalk:(id)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(NSString *)userID;
+
+@end
+
+@interface EZVideoTalkSDK : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+- (instancetype)init;
+
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalWindow:(EZVideoTalkView *)localWin;
+
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableVideoCapture:(BOOL)enable;
+
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+- (NSInteger)enableAudioCatpure:(BOOL)enable;
+
+
+/// 鏄惁寮�鍚睆骞曞叡浜�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableScreenShare:(BOOL)enable withName:(NSString *)name;
+
+
+/// 鍙戣捣鍙屽悜闊宠棰戝璁诧紝鑰楁椂鎺ュ彛锛屾垚鍔熻繑鍥� noErr锛屽け璐ヨ繑鍥為敊璇爜
+/// @param param EZBAVParam
+- (int32_t)startWithParam:(EZBAVParam *)param;
+
+/// 璁剧疆杩滅▼绐楀彛锛�.濡傛灉璁剧疆闈炵┖瀵硅薄view锛屽繀椤诲湪涓荤嚎绋嬭皟鐢紙濡傛灉鏄缃垚nil锛屽彲浠ヤ笉鍦ㄤ富绾跨▼璋冪敤锛�
+/// @param window 鎾斁绐楀彛
+- (int32_t)setRemoteWindow:(UIView *)window;
+
+///  鍋滄鍙屽悜闊宠棰戝璁诧紝鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
+- (int32_t)stop;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+
+/// 寮�鍏宠繙绋嬪0闊筹紝榛樿寮�
+/// @param open 寮�鍚�
+- (int32_t)enableRemoteSound:(BOOL)open;
+
+#pragma mark - 鏃ュ織璋冭瘯
+/**
+ 鏃ュ織璁剧疆
+ 
+ @param enable 鏄惁鎵撳嵃鏃ュ織
+ @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
+ */
++ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
+
+/**
+ 鎵撳紑瀵圭鐮佹祦鎶撳彇
+
+ @param enble 鏄惁鎵撳紑
+ */
++(void)setDebugVideoLog:(BOOL)enble;
+
+/**
+ 鑾峰彇sdk鐗堟湰淇℃伅
+
+ @return 鐗堟湰鍙�
+ */
++ (NSString*)getVersion;
+
+@end
+
+
+@interface EZRTCClient : NSObject
+
+@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
+
+/// 鍔犲叆鐨勬埧闂村彿
+@property (nonatomic, assign, readonly) int32_t roomID;
+
+/**
+ 瀵硅鏃讹紝寮哄埗閲囩敤鎵0鍣ㄦ挱鏀惧0闊筹紝榛樿涓篩ES
+ */
+@property (nonatomic, assign) BOOL forceToSpeaker;
+
+
+/// 鍒濆鍖栬棰戦�氳瘽SDK瀵硅薄
+- (instancetype)init;
+
+
+/// 鍔犲叆浼氳锛堟柊鎺ュ彛锛�
+/// @param roomId 鎴块棿鍙�
+/// @param password 瀵嗙爜
+/// @param userID 鐢ㄦ埛鑷畾涔塈D
+- (void)enterRoom:(int32_t)roomId
+     withPassword:(NSString *)password
+       withUserID:(NSString *)userID
+       withAppId:(NSString *)appId;
+
+
+/// 閫�鍑轰細璁�
+- (NSInteger)exitRoom;
+
+
+/// 瑙f暎浼氳锛岃В鏁e悗锛屽叾浠栦笌浼氳�呬細鏀跺埌浼氳琚В鏁f秷鎭�
+- (void)dissolveRoom;
+
+/// 鏈湴鎽勫儚澶村紑鍚�/鍏抽棴鎺ュ彛.
+/// @param enable 鏄惁寮�鍚憚鍍忓ご
+- (NSInteger)enableLocalVideo:(BOOL)enable;
+
+/// 璁剧疆鏈湴鐨勯瑙堢獥鍙�
+/// @param localWin 绐楀彛window
+- (void)setLocalView:(EZVideoTalkView *)localWin;
+
+/// 鏄惁寮�鍚緟娴侊紝杈呮祦鍒嗚鲸鐜囨洿浣庛�佺爜鐜囨洿灏�
+/// @param enable 鏄惁寮�鍚�
+- (NSInteger)enableLocalSmallVideo:(BOOL)enable;
+
+/// 鏈湴楹﹀厠椋庡紑鍚�/鍏抽棴鎺ュ彛
+/// @param enable 鏄惁寮�鍚害鍏嬮
+/// @param block 涓荤嚎绋嬪洖璋冪粨鏋�
+- (void)enableLocalAudio:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
+
+/// 寮�鍚睆骞曞叡浜�
+/// @param name 鍏变韩鍚嶇О
+/// @param resultBlock 灞忓箷鍏变韩缁撴灉鍥炶皟
+/// @param didFinishBlock 灞忓箷鍏变韩缁撴潫鍥炶皟锛屽湪姝e父鐨勫睆骞曞叡浜粨鏉熺粨鏉熷悗鍥炶皟
+- (void)startScreenShareWithName:(NSString *)name
+                 withResultBlock:(EZScreenShareResultBlock)resultBlock
+                   andEndedBlock:(dispatch_block_t)didFinishBlock;
+
+
+/// 缁撴潫灞忓箷鍏变韩
+- (void)stopScreenShare;
+
+
+/// 璁剧疆杩滅▼绐楀彛锛�1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�2.蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param window 鎾斁绐楀彛
+/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
+/// @param streamType 1瑙嗛 2闊抽 4灏忔祦
+- (int32_t)setRemoteView:(nullable UIView *)window ofUser:(NSString *)userID withStream:(NSInteger)streamType;
+
+/// 璁剧疆瑙傜湅灞忓箷鍏变韩鐨勭獥鍙�,蹇呴』鍦ㄤ富绾跨▼璋冪敤
+/// @param view 绐楀彛
+- (int32_t)setScreenShareView:(UIView *_Nullable)view;
+
+/// 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
+/// @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
+- (int32_t)switchCamera:(BOOL)backCameraSelected;
+
+#pragma mark - 褰曞埗鐩稿叧鎺ュ彛
+/// 寮�濮嬫埧闂磋棰戜細璁綍鍒�
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param recUsers 闇�瑕佸綍鍒剁殑鎴块棿鍙備笌鑰卛d
+/// @param projectId 浜戝瓨鍌ㄩ」鐩甀D
+/// @param fileId 浜戝瓨鍌ㄦ枃浠跺悕
+/// @param completion operation
++ (void)requestStartRecordRoomId:(NSString *)roomId
+                        customId:(NSInteger)customId
+                        recUsers:(NSArray *)recUsers
+                       projectId:(NSString *)projectId
+                          fileId:(NSString *)fileId
+                      completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鍋滄鎴块棿瑙嗛浼氳褰曞埗
+/// @param roomId 鎴块棿鍙�
+/// @param customId 寮�鍙戣�呰嚜瀹氫箟鐢ㄦ埛ID
+/// @param completion operation
++ (void)requestStopRecordRoomId:(NSString *)roomId
+                       customId:(NSInteger)customId
+                     completion:(void (^)(bool success, NSError *error))completion;
+
+/// 鑾峰彇鏂囦欢涓嬭浇鍦板潃
+/// @param projectId 椤圭洰ID
+/// @param fileId 鏂囦欢ID
+/// @param completion operation
++ (void)requestGetRecordFileProjectId:(NSString *)projectId
+                               fileId:(NSString *)fileId
+                           completion:(void (^)(id responseObject, NSError *error))completion;
+
+
+/// 鏂板缓椤圭洰鎺ュ彛
+/// @param projectId 椤圭洰ID
+/// @param projectName 椤圭洰鍚嶇О
+/// @param expireDays 椤圭洰瀛樺偍瀵硅薄杩囨湡澶╂暟 榛樿姘镐笉杩囨湡
+/// @param completion operation
++ (void)requestCreateProjectId:(NSString *)projectId
+                   projectName:(NSString *)projectName
+                    expireDays:(NSInteger )expireDays
+                    completion:(void (^)(bool success, NSError *error))completion;
+
+
+
+#pragma mark - 4.16.3 鏂扮殑浼氭帶鎺ュ彛
+/// 棰勮浼氳鎺ュ彛
+/// @param customId 涓绘寔浜虹敤鎴穒d锛堝紑鍙戣�呰嚜瀹氫箟鐨勭敤鎴穒d锛�
+/// @param password 鎴块棿瀵嗙爜锛堣嫢涓嶄紶鎴栦负绌哄垯璁や负鎴块棿鍏紑銆佹棤瀵嗙爜锛�
+/// @param limit 鎴块棿浜烘暟闄愬埗锛�<100锛屼笉浼犲垯榛樿100锛�
+/// @param beginTime 姣鏃堕棿鎴筹紝浼氳棰勮寮�濮嬫椂闂达紙>=褰撳墠鏃堕棿锛�
+/// @param endTime 姣鏃堕棿鎴筹紝浼氳棰勮缁撴潫鏃堕棿锛�>beginTime涓�<涓冨ぉ鍚庣殑鏃堕棿鎴筹級
+/// @param completion completion
++ (NSURLSessionDataTask *)orderMeetingWithCustomId:(NSString *)customId
+                                          password:(NSString *)password
+                                             limit:(NSInteger)limit
+                                         beginTime:(long)beginTime
+                                           endTime:(long)endTime
+                                        completion:(void (^)(int32_t roomId, NSInteger limit, NSError *error))completion;
+
+
+
+@end
+
+
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h
new file mode 100644
index 0000000..c3347aa
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h
@@ -0,0 +1,17 @@
+//
+//  EZVideoTalkSDKDefines.h
+//  EzvizOpenSDK
+//
+//  Created by Harper Kan on 2021/7/5.
+//  Copyright 漏 2021 Hikvision. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZVideoTalkSDKDefines : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkView.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkView.h
similarity index 100%
rename from EZSDK/EZSDK/SDK/include/modules/EZVideoTalkView.h
rename to EZSDK/EZSDK/SDK/include/modules/EZVideoTalk/EZVideoTalkView.h
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkParam.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkParam.h
deleted file mode 100644
index 27ce0db..0000000
--- a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkParam.h
+++ /dev/null
@@ -1,38 +0,0 @@
-//
-//  EZVideoTalkParam.h
-//  EZOpenSDK
-//
-//  Created by yuqian on 2020/3/14.
-//  Copyright 漏 2020 Hikvision. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface EZVideoTalkParam : NSObject
- 
-@property (nonatomic, assign) int32_t iCltRole; /**< 蹇呭~    0 鍙戣捣 1 鎺ュ彈 鍙戣捣绔~鍐�0 鎺ュ彈绔~鍐�1 鎷掔粷涓�2 */
-@property (nonatomic, assign) int32_t iStreamType;/**< 蹇呴��    0 闊宠棰� 1 瀵硅 2 浼氳*/
-@property (nonatomic, assign) int32_t iOtherCltType; /**< 閫夋嫨    */
-@property (nonatomic, assign) int32_t iCltType; /**< 蹇呭~    瀹㈡埛绔被鍨� */
-@property (nonatomic, strong) NSString *szStsAddr; /**< 蹇呭~    鏈嶅姟鍦板潃 */
-@property (nonatomic, assign) int32_t iStsPort; /**< 蹇呭~    鏈嶅姟绔彛 */
-@property (nonatomic, assign) int32_t iRoomId; /**< 閫夋嫨    闇�瑕佸姞鍏ユ埧闂村彿锛屽彧鏈夋帴鍙楃闇�瑕佸~鍐� */
-@property (nonatomic, assign) int32_t iReason; /**< 閫夋嫨  鍘熷洜 鎷掓帴鎺ュ惉101 鏃犱汉鎺ュ惉102 */
-
-@property (nonatomic, strong) NSString *szSelfId;  /**< 蹇呭~  鏍囪瘑Id */
-@property (nonatomic, strong) NSString *szOterId; /**< 閫夋嫨    鎵嬭〃搴忓垪鍙� */
-@property (nonatomic, assign) int32_t iAuthType;  /**< 閫夋嫨    璁よ瘉绫诲瀷 */
-@property (nonatomic, strong) NSString *szAuthToken; /**< 蹇呭~    璁よ瘉token */
-
-@property (nonatomic, strong) NSString *szExtensionParas; /**< 閫夋嫨    鎵╁睍瀛楁淇℃伅 */
-@property (nonatomic, assign) int32_t iChannel;//閫夊~  涓夋柟闊宠棰戞椂锛孖PC璁惧闇�瑕佸~鍐�
-@property (nonatomic, assign) int32_t iDevStreamType;//閫夊~  璁惧涓诲瓙鐮佹祦
-
-@property (nonatomic, assign) BOOL isMultiPartyCall; //鏄惁鏄鏂归�氳瘽
-@property (nonatomic, assign) BOOL isCallingWithDevice; //鏄惁鏄甫鏈夎澶囩殑涓诲彨鏂癸紙澶氭柟閫氳瘽锛�
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkSDK.h b/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkSDK.h
deleted file mode 100644
index 170a928..0000000
--- a/EZSDK/EZSDK/SDK/include/modules/EZVideoTalkSDK.h
+++ /dev/null
@@ -1,151 +0,0 @@
-//
-//  EZVideoTalkSDK.h
-//  EZOpenSDK
-//
-//  Created by yuqian on 2020/3/14.
-//  Copyright 漏 2020 Hikvision. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef enum : NSUInteger {
-    EZVideoTalkMessageUnkown,
-    EZVideoTalkMessageRoomCreated,      //鍒涘缓鎴块棿鎴愬姛
-    EZVideoTalkMessagePeerEnteredRoom,  //鐩墠鏈娇鐢紝鐢ㄤ簬澶氭柟
-    EZVideoTalkMessagePeerLeaveRoom,    //鐩墠鏈娇鐢紝鐢ㄤ簬澶氭柟
-    EZVideoTalkMessageStartInputData,   //閾炬帴寤虹珛鎴愬姛锛屽紑濮嬫帹娴�
-    EZVideoTalkMessageTransferData,     //閫忎紶娑堟伅
-} EZVideoTalkMessageType;
-
-
-typedef NS_OPTIONS(NSUInteger, EZVideoTalkCaptureType) {
-    EZVideoTalkCaptureNone = 1 << 0,
-    EZVideoTalkCaptureVideo = 1 << 1,
-    EZVideoTalkCaptureAudio = 1 << 2,
-};
-
-
-@class EZVideoTalkSDK, EZVideoTalkParam, EZMediaSessionVideoParam, EZVideoTalkView;
-
-@protocol EZVideoTalkSDKDelegate<NSObject>
-
-- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedError:(int32_t)errorCode;
-
-/**
- 鍥炶皟娑堟伅
-
- @param client client
- @param messageCode 娑堟伅鐮� 鍙傝EZBAVMessage
- @param msg 閫忎紶娑堟伅锛�
-    濡傛灉鏄疎ZVideoTalkMessagePeerEnteredRoom鍜孍ZVideoTalkMessagePeerLeaveRoom娑堟伅锛宮sg鏄瘂@"clientID":@(9527),@"clientName":@"寮犱笁"}
-        濡傛灉娑堟伅鏄� EZVideoTalkMessageTransferData msg鏄� msg鏄瘂@"content":@"瀹為檯鐨勯�忎紶娑堟伅"}
- */
-- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedMessage:(EZVideoTalkMessageType)messageCode msg:(NSDictionary *)msg;
-
-
-// 鍥炶皟娑堟伅 bavclient log鍥炶皟
-//
-// @param client client
-// @param msg 閫忎紶娑堟伅
-// */
-//- (void)bavClient:(EZVideoTalk *)client didReceivedBavClientLogMsg:(NSString*)msg;
-
-/**
- 鏄剧ず鍥炶皟锛岄娆$敾闈㈠嚭鏉ヤ互鍙婂悗缁敾闈㈠昂瀵稿彂鐢熷彉鍖栨椂鍥炶皟
-
- @param client client
- @param width 鐢婚潰瀹藉害
- @param height 鐢婚潰楂樺害
- */
-- (void)videoTalk:(EZVideoTalkSDK *)client didDisplayWidth:(int32_t)width height:(int32_t)height ofRemoteClient:(int)clientID;
-
-
-@end
-
-@interface EZVideoTalkSDK : NSObject
-
-@property (nonatomic, assign, readonly) int32_t roomID;
-@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
-
-#pragma mark - SDK
-/**
-SDK鍒濆鍖�
-
- @param param 蹇呭~ 閰嶇疆鍙傛暟
- @param localWin 鏈湴绐楀彛
- 
- @return 杩斿洖鍊�
- */
-- (instancetype)initWithParam:(EZMediaSessionVideoParam *)param
-                  localWindow:(EZVideoTalkView *)localWin;
-
-/// 璁剧疆杩滅▼绐楀彛
-/// 1.蹇呴』鍦ㄦ嬁鍒拌繙绔鎴风鍔犲叆鐨勬秷鎭悗璁剧疆锛�
-/// 2.蹇呴』鍦ㄤ富绾跨▼璋冪敤锛�
-/// 3.缁撴潫鍚庨渶瑕佸皢window鍙负nil锛�
-/// @param remoteWin  杩滅绐楀彛
-/// @param clientID 鍔犲叆鐨勫鎴风鐨処D
-- (int32_t)setRemoteWindow:(UIView * _Nullable)remoteWin ofClient:(int32_t)clientID;
-
-/**
- 寮�濮嬪弻鍚戦煶瑙嗛瀵硅锛岃�楁椂鎺ュ彛锛岄粯璁� EZVideoTalkCaptureVideo | EZVideoTalkCaptureAudio 鍚屾椂寮�鍚�
- */
-- (void)startWithBAVParam:(EZVideoTalkParam *)param;
-
-/**
- 寮�濮嬪弻鍚戦煶瑙嗛瀵硅锛岃�楁椂鎺ュ彛
- @param param 蹇呭~ 閰嶇疆鍙傛暟
- @param type 閲囬泦绫诲瀷
- */
-- (void)startWithBAVParam:(EZVideoTalkParam *)param type:(EZVideoTalkCaptureType)type;
-
-/**
- 鍋滄鍙屽悜闊宠棰戝璁�
- */
-- (void)stop;
-
-/// 鏈湴閲囬泦鐨勯煶棰戞垨鑰呮槸瑙嗛閰嶇疆锛屽彲浠ュ湪闊宠棰戦�氳瘽杩囩▼涓垏鎹�
-/// @param type EZMediaCaptureSessionType
-- (int32_t)configCaptureType:(EZVideoTalkCaptureType)type;
-
-/// 寮�鍚0闊筹紝鎺ユ敹鍒癊ZVideoTalkMessageStartInputData娑堟伅鍚庤皟鐢�
-/// @param open 寮�鍏崇姸鎬�
-/// @param clientId clientId
-- (int32_t) openSound:(BOOL)open forClient:(int32_t)clientId;
-
-/**
- 鍒囨崲瀵硅鏃朵娇鐢ㄧ殑鎽勫儚澶达紝榛樿閲囩敤鍓嶇疆 鍚屾鎺ュ彛
-
- @param backCameraSelected YES:閫夋嫨鍚庣疆锛孨O:閫夋嫨鍓嶇疆
- @return 鎴愬姛杩斿洖 noErr锛屽け璐ヨ繑鍥為敊璇爜
- */
-- (int32_t)switchCamera:(BOOL)backCameraSelected;
-
-#pragma mark - 鏃ュ織璋冭瘯
-/**
- 鏃ュ織璁剧疆
- 
- @param enable 鏄惁鎵撳嵃鏃ュ織
- @param logCallback 鏃ュ織鍥炶皟锛屼笂灞傝嚜瀹氫箟澶勭悊
- */
-+ (void)setDebugLogEnable:(BOOL)enable withLogCallback:(void(^)(NSString *logStr))logCallback;
-
-/**
- 鎵撳紑瀵圭鐮佹祦鎶撳彇
-
- @param enble 鏄惁鎵撳紑
- */
-+(void)setDebugVideoLog:(BOOL)enble;
-
-/**
- 鑾峰彇sdk鐗堟湰淇℃伅
-
- @return 鐗堟湰鍙�
- */
-+ (NSString*)getVersion;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/EZWiFiItemInfo.h b/EZSDK/EZSDK/SDK/include/modules/EZWiFiItemInfo.h
new file mode 100644
index 0000000..3ea2418
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/EZWiFiItemInfo.h
@@ -0,0 +1,21 @@
+//
+//  EZWiFiItemInfo.h
+//  EZWiFiConfigSDK
+//
+//  Created by yuqian on 2020/7/28.
+//  Copyright 漏 2020 com.ezviz. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface EZWiFiItemInfo : NSObject
+
+@property (nonatomic, copy) NSString *ssid;             /*蹇呭~,SSID,string*/
+@property (nonatomic, assign) NSInteger signalStrength;   /*蹇呭~,淇″彿寮哄害,"-100-0",int锛屾暟鍊艰秺澶т俊鍙疯秺寮�*/
+@property (nonatomic, copy) NSString *securityMode;     /*鍙��,瀹夊叏妯″紡: "open,WEP,WPA-personal,WPA2-personal,WPA-WPA2-personal,WPA2-enterprise",string*/
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/EZSDK/EZSDK/SDK/include/modules/Sadp.h b/EZSDK/EZSDK/SDK/include/modules/Sadp.h
new file mode 100644
index 0000000..a6ec76d
--- /dev/null
+++ b/EZSDK/EZSDK/SDK/include/modules/Sadp.h
@@ -0,0 +1,557 @@
+#ifndef _SADP_H_
+#define _SADP_H_
+
+
+#if defined _WIN32 || defined _WIN64
+#define CSADP_API  extern "C" __declspec(dllimport)
+#elif defined __linux__ || defined __APPLE__
+#define CSADP_API  extern "C"
+#endif
+
+#if defined _WIN32 || defined _WIN64
+#define CALLBACK __stdcall
+#elif defined __linux__ || defined __APPLE__
+#define CALLBACK  
+#endif
+
+#define     BOOL int
+
+//消息操作的类型
+#define SADP_ADD          1         //增加一设备
+#define SADP_UPDATE       2         //更新设备
+#define SADP_DEC          3         //设备下线
+#define SADP_RESTART      4         //设备重新启动
+#define SADP_UPDATEFAIL   5         //设备更新失败
+
+//外部命令码
+#define SADP_GET_DEVICE_CODE                1   //获取设备码,对应结构体SADP_SAFE_CODE
+#define SADP_GET_ENCRYPT_STRING             2   //获取加密串,对应结构体SADP_ENCRYPT_STRING
+#define SADP_GET_DEVICE_TYPE_UNLOCK_CODE    3   //获取设备类型解禁码,对应的结构体SADP_TYPE_UNLOCK_CODE
+#define SADP_SET_DEVICE_CUSTOM_TYPE         4   //设置设备自定义型号,对应的结构体SADP_CUSTOM_DEVICE_TYPE
+#define SADP_GET_GUID                       5   //获取GUID
+#define SADP_GET_SECURITY_QUESTION          6   //获取安全问题
+#define SADP_SET_SECURITY_QUESTION          7   //设置安全问题
+#define SADP_SET_HCPLATFORM_STATUS          8   //设置HCPLATFORM状态
+#define SADP_SET_VERIFICATION_CODE          9   //设置验证码(验证码用于萤石接入、预览、控制的唯一密码)
+#define SADP_GET_BIND_LIST                  12  //获取绑定设备列表
+#define SADP_SET_BIND_LIST                  13  //设置绑定设备列表
+#define SADP_RESTORE_INACTIVE               14  //恢复未激活
+#define SADP_SET_WIFI_REGION                15  //设置wifi区域
+#define SADP_SET_CHANNEL_DEFAULT_PASSWORD   16  //设置通道默认密码
+#define SADP_GET_SELF_CHECK                 17  //获取设备自检状态
+#define SADP_DISK_LOCATE                    18  //坏盘定位
+#define SADP_EHOME_ENABLE                   19  //EHome使能
+#define SADP_SET_USER_MAILBOX               20  //设置用户邮箱
+#define SADP_GET_QR_CODES                   21  //获取二维码数据
+#define SADP_GET_PASSWORD_RESET_TYPE        27  //获取重置密码方式参数
+
+
+
+#define SADP_MAX_VERIFICATION_CODE_LEN  12   //最大验证码长度
+#define MAX_PASS_LEN                    16   //设备最大密码长度
+#define MAX_QUESTION_LIST_LEN           32   //最多问题列表个数
+#define SADP_MAX_BIND_NUM               32   //最大绑定设备个数
+#define MAX_CPU_LEN                     32   //CPU长度
+#define MAX_MEMORY_LEN                  32   //内存长度
+#define MAX_USERNAME_LEN                32   //用户名最大长度
+#define SADP_MAX_SERIALNO_LEN           64   //最大设备序列号长度
+#define MAX_DEVICE_CODE                 128  //设备返回码长度,暂定最大128
+#define MAX_MAILBOX_LEN                 128  //邮箱长度,暂定最大128
+#define MAX_GUID_LEN                    128  //GUID长度
+#define MAX_EXCHANGE_CODE               256  //交换码长度
+#define MAX_ENCRYPT_CODE                256  //设备返回码加密后长度
+#define MAX_UNLOCK_CODE_KEY             256  //解禁密钥
+#define MAX_QR_CODES                    256  //二维码数据长度,暂定最大256
+#define MAX_ANSWER_LEN                  256  //最大答案长度
+#define MAX_UNLOCK_CODE_RANDOM_LEN      256  //解禁码随机串
+#define MAX_FILE_PATH_LEN               260  //文件最大路径长度
+
+
+
+
+// 错误码
+#define SADP_ERROR_BASE                 2000
+#define SADP_NOERROR                    0                     // 没有错误
+#define SADP_ALLOC_RESOURCE_ERROR       (SADP_ERROR_BASE+1)   // 资源分配错误
+#define SADP_NOT_START_ERROR            (SADP_ERROR_BASE+2)   // SADP未启动
+#define SADP_NO_ADAPTER_ERROR           (SADP_ERROR_BASE+3)   // 无网卡
+#define SADP_GET_ADAPTER_FAIL_ERROR     (SADP_ERROR_BASE+4)   // 获取网卡信息失败
+#define SADP_PARAMETER_ERROR            (SADP_ERROR_BASE+5)   // 参数错误
+#define SADP_OPEN_ADAPTER_FAIL_ERROR    (SADP_ERROR_BASE+6)   // 打开网卡失败
+#define SADP_SEND_PACKET_FAIL_ERROR     (SADP_ERROR_BASE+7)   // 发送数据失败
+#define SADP_SYSTEM_CALL_ERROR          (SADP_ERROR_BASE+8)   // 系统接口调用失败
+#define SADP_DEVICE_DENY                (SADP_ERROR_BASE+9)   // 设备拒绝处理
+#define SADP_NPF_INSTALL_ERROR          (SADP_ERROR_BASE+10)  // 安装NPF服务失败
+#define SADP_TIMEOUT                    (SADP_ERROR_BASE+11)  // 设备超时
+#define SADP_CREATE_SOCKET_ERROR        (SADP_ERROR_BASE+12)  // 创建socket失败
+#define SADP_BIND_SOCKET_ERROR          (SADP_ERROR_BASE+13)  // 绑定socket失败
+#define SADP_JOIN_MULTI_CAST_ERROR      (SADP_ERROR_BASE+14)  // 加入多播组失败
+#define SADP_NETWORK_SEND_ERROR         (SADP_ERROR_BASE+15)  // 发送出错
+#define SADP_NETWORK_RECV_ERROR         (SADP_ERROR_BASE+16)  // 接收出错
+#define SADP_XML_PARSE_ERROR            (SADP_ERROR_BASE+17)  // 多播XML解析出错
+#define SADP_LOCKED                     (SADP_ERROR_BASE+18)  // 设备锁定
+#define SADP_NOT_ACTIVATED              (SADP_ERROR_BASE+19)  // 设备未激活
+#define SADP_RISK_PASSWORD              (SADP_ERROR_BASE+20)  // 风险高的密码
+#define SADP_HAS_ACTIVATED              (SADP_ERROR_BASE+21)  // 设备已激活
+#define SADP_EMPTY_ENCRYPT_STRING       (SADP_ERROR_BASE+22)  // 加密串为空
+#define SADP_EXPORT_FILE_OVERDUE        (SADP_ERROR_BASE+23)  // 导出文件超期
+#define SADP_PASSWORD_ERROR             (SADP_ERROR_BASE+24)  // 密码错误
+#define SADP_LONG_SECURITY_ANSWER       (SADP_ERROR_BASE+25)  // 安全问题答案太长
+#define SADP_INVALID_GUID               (SADP_ERROR_BASE+26)  // 无效的GUID
+#define SADP_ANSWER_ERROR               (SADP_ERROR_BASE+27)  // 答案错误
+#define SADP_QUESTION_NUM_ERR           (SADP_ERROR_BASE+28)  // 安全问题个数配置错误
+#define SADP_LOAD_WPCAP_FAIL            (SADP_ERROR_BASE+30)  // 加载Wpcap失败
+#define SADP_ILLEGAL_VERIFICATION_CODE  (SADP_ERROR_BASE+33)  // 非法验证码
+#define SADP_BIND_ERROR_DEV             (SADP_ERROR_BASE+34)  // 绑定错误的设备
+#define SADP_EXTED_MAX_BIND_NUM         (SADP_ERROR_BASE+35)  // 超过最大绑定个数
+#define SADP_MAILBOX_NOT_EXIST          (SADP_ERROR_BASE+36)  // 邮箱不存在
+#define SADP_MAILBOX_NOT_SET            (SADP_ERROR_BASE+38)  // [add] <2019/01/08> by yangzheng 邮箱重置密码未设置邮箱
+#define SADP_INVALID_RESET_CODE         (SADP_ERROR_BASE+39)    // 重置密码  重置口令错误
+
+
+//SADP设备过滤规则类型
+//按位表示,为1表示过滤,0表示不过滤;
+//bit 1:是否过滤萤石;bit 2:是否过滤OEM;
+#define SADP_DISPLAY_ALL           0            //显示所有设备
+#define SADP_FILTER_EZVIZ          0x01         //过滤萤石设备
+#define SADP_FILTER_OEM            0x02         //过滤OEM设备
+#define SADP_FILTER_EZVIZ_OEM      0x03         //同时过滤萤石和OEM设备
+#define SADP_ONLY_DISPLAY_OEM      0xfffffffd   //仅显示OEM设备,对应结构体SADP_DISPLAY_OEM_CFG
+#define SADP_ONLY_DISPLAY_EZVIZ    0xfffffffe   //仅显示萤石设备
+// 结构体
+
+typedef struct tagSADP_DEVICE_INFO
+{
+    char            szSeries[12];          //设备系列(保留)
+    char            szSerialNO[48];        //设备序列号
+    char            szMAC[20];             //设备物理地址
+    char            szIPv4Address[16];     //设备IPv4地址
+    char            szIPv4SubnetMask[16];  //设备IPv4子网掩码
+    unsigned int    dwDeviceType;          //设备类型,具体数值代表的设备型号
+    unsigned int    dwPort;                //设备网络SDK服务端口号(默认8000)
+    unsigned int    dwNumberOfEncoders;    //设备编码器个数,即设备编码通道个数。对于解码器,其值设为0
+    unsigned int    dwNumberOfHardDisk;    //设备硬盘数目
+    char            szDeviceSoftwareVersion[48];  //设备软件版本号
+    char            szDSPVersion[48];      //设备DSP版本号
+    char            szBootTime[48];        //开机时间
+    int             iResult;               
+                    //信息类型: 1.设备上线  2.设备更新  3.设备下线  4.设备重启  5.设备更新失败
+                    //SADP_ADD        1   新设备上线,之前在SADP库列表中未出现的设备
+                    //SADP_UPDATE     2   在线的设备的网络参数或者某些状态改变
+                    //SADP_DEC        3   设备下线,设备自动发送下线消息或120秒内检测不到设备
+                    //SADP_RESTART    4   之前SADP库列表中出现过之后下线的设备再次上线
+                    //SADP_UPDATEFAIL 5   设备更新失败
+    char            szDevDesc[24];         //设备类型描述 与dwDeviceType对应
+    char            szOEMinfo[24];         //OEM产商信息
+    char            szIPv4Gateway[16];     //IPv4网关
+    char            szIPv6Address[46];     //IPv6地址
+    char            szIPv6Gateway[46];     //IPv6网关
+    unsigned char   byIPv6MaskLen;         //IPv6子网前缀长度
+    unsigned char   bySupport;           
+                    //按位表示,对应为为1表示支持
+                    //0x01:是否支持Ipv6
+                    //0x02:是否支持修改Ipv6参数
+                    //0x04:是否支持Dhcp	
+                    //0x08:是否支持udp多播 
+                    //0x10:是否含加密节点
+                    //0x20:是否支持恢复密码
+                    //0x40:是否支持重置密码
+                    //0x80:是否支持同步IPC密码
+    unsigned char   byDhcpEnabled;         //Dhcp状态, 0 不启用 1 启用
+    unsigned char   byDeviceAbility;       //设备能力
+                                           //0:设备不支持“‘设备类型描述’ 'OEM厂商' 'IPv4网关' ‘IPv6地址’ 'IPv6网关' ‘IPv6子网前缀’‘DHCP’”  
+                                           //1:支持上诉功能
+    unsigned short  wHttpPort;             //Http 端口
+    unsigned short  wDigitalChannelNum;    //数字通道数
+    char            szCmsIPv4[16];         //CMS注册服务器IPv4地址
+    unsigned short  wCmsPort;              //CMS注册服务器监听端口
+    unsigned char   byOEMCode;             //0-基线设备 1-OEM设备
+    unsigned char   byActivated;           //设备是否激活;0-激活,1-未激活(老的设备都是已激活状态)
+    char            szBaseDesc[24];        //基线短型号,不随定制而修改的型号,用于萤石平台进行型号对比
+    unsigned char   bySupport1; 
+                    //按位表示,  1表示支持,0表示不支持
+                    //0x01:是否支持重置密码方式2 
+                    //0x02;是否支持设备锁定功能
+                    //0x04:是否支持导入GUID重置密码
+                    //0x08:是否支持安全问题重置密码
+                    //0x10:是否支持OEM更换Logo
+                    //0x20:是否支持绑定操作
+                    //0x40:是否支持恢复未激活
+                    //0x80:是否支持wifi信号增强模式
+    unsigned char   byHCPlatform;          //是否支持HCPlatform 0-保留, 1-支持, 2-不支持   
+    unsigned char   byEnableHCPlatform;    //是否启用HCPlatform  0-保留, 1-启用, 2-不启用
+    unsigned char   byEZVIZCode;           //0-基线设备, 1-萤石设备
+    unsigned int    dwDetailOEMCode;       //详细OEMCode信息:oemcode由客户序号(可变位,从1开始,1~429496)+菜单风格(2位)+区域号(2位)三部分构成。	
+                                           //规则说明:oemcode最大值为4294967295,最多是十位数。
+                                           //0: 老设备
+                                           //1: 新基线设备
+                                           //10101: 有具体OEM code的为OEM设备
+    unsigned char   byModifyVerificationCode; //是否修改验证码 0-保留, 1-修改验证码, 2-不修改验证码
+    unsigned char   byMaxBindNum;          //支持绑定的最大个数(目前只有NVR支持该字段)
+    unsigned short  wOEMCommandPort;       //OEM命令端口
+    unsigned char   bySupportWifiRegion;
+                    //设备支持的wifi区域列表,按位表示,1表示支持,0表示不支持
+                    //0x01:是否支持default(默认功率和北美一致)
+                    //0x02:是否支持china
+                    //0x04:是否支持nothAmerica
+                    //0x08:是否支持japan
+                    //0x10:是否支持europe
+                    //0x20:是否支持world
+    unsigned char   byEnableWifiEnhancement;//是否启用wifi增强模式,0-不启用,1-启用
+    unsigned char   byWifiRegion;           //设备当前区域,0-default,1-china,2-nothAmerica,3-japan,4-europe,5-world
+    unsigned char   bySupport2; 
+                    //按位表示,  1表示支持,0表示不支持
+                    //0x01:是否支持通道默认密码配置(该密码用于nvr添加IPC, 默认使用的是nvr admin密码,会单独保存在本地)
+                    //0x02:是否支持邮箱重置密码
+                    //0x04:是否支持未激活配置SSID和Password
+}SADP_DEVICE_INFO, *LPSADP_DEVICE_INFO;
+
+typedef struct tagSADP_DEVICE_INFO_V40
+{
+    SADP_DEVICE_INFO struSadpDeviceInfo;
+    unsigned char   byLicensed;          //设备是否授权:0-保留,1-设备未授权,2-设备已授权
+    unsigned char   bySystemMode;        //系统模式 0-保留,1-单控,2-双控,3-单机集群,4-双控集群
+    unsigned char   byControllerType;    //控制器类型 0-保留,1-A控,2-B控
+    char            szEhmoeVersion[16];  //Ehmoe版本号
+    unsigned char   bySpecificDeviceType;//设备类型,1-中性设备  2-海康设备
+    unsigned int    dwSDKOverTLSPort;    //私有协议中 SDK Over TLS 命令端口
+    unsigned char   bySecurityMode;      //设备安全模式:0-standard,1-high-A,2-high-B,3-custom
+    unsigned char   bySDKServerStatus;   //设备SDK服务状态, 0-开启,1-关闭
+    unsigned char   bySDKOverTLSServerStatus;         //设备SDKOverTLS服务状态, 0-关闭,1-开启
+    char            szUserName[MAX_USERNAME_LEN + 1]; //管理员用户的用户名(设备安全模式在非标准模式下是允许用户设置管理员用户的用户名,标准模式默认为admin)
+    char            szWifiMAC[20];       //设备所连wifi的Mac地址
+    unsigned char   byDataFromMulticast; //0-链路 1-多播
+    unsigned char   bySupportEzvizUnbind; //是否支持萤石解绑 0-不支持 1-支持
+    unsigned char   bySupportCodeEncrypt; //是否支持重置口令AES128_ECB解密  0-不支持 1-支持
+    unsigned char   bySupportPasswordResetType; //是否支持获取密码重置方式参数  0-不支持 1-支持
+    unsigned char   byEZVIZBindStatus; //设备萤石云绑定状态,0-未知,1-已绑定,2-未绑定
+    char            szPhysicalAccessVerification[16]; //设备支持的物理接触式添加方式,1#AP配网传递,2#用户令牌(用户token)绑定,3#物理按键接触,4#扫码绑定(设备token)
+    unsigned char   byRes[411];
+}SADP_DEVICE_INFO_V40, *LPSADP_DEVICE_INFO_V40;
+
+//待修改的设备网络参数
+typedef struct tagSADP_DEV_NET_PARAM
+{
+    char            szIPv4Address[16];      // IPv4地址
+    char            szIPv4SubNetMask[16];   // IPv4子网掩码
+    char            szIPv4Gateway[16];      // IPv4网关
+    char            szIPv6Address[128];     // IPv6地址
+    char            szIPv6Gateway[128];     // IPv6网关
+    unsigned short  wPort;                  // 设备网络SDK服务端口号(默认8000)
+    unsigned char   byIPv6MaskLen;          // IPv6掩码长度
+    unsigned char   byDhcpEnable;           // DHCP使能
+    unsigned short  wHttpPort;              // HTTP端口
+    unsigned int    dwSDKOverTLSPort;       // 私有协议中 SDK Over TLS 命令端口
+    unsigned char   byRes[122];
+}SADP_DEV_NET_PARAM, *LPSADP_DEV_NET_PARAM;
+
+
+//设备返回网络参数信息
+typedef struct tagSADP_DEV_RET_NET_PARAM
+{
+    unsigned char   byRetryModifyTime;  //剩余可尝试修改网络参数次数
+    unsigned char   bySurplusLockTime;  //剩余时间,单位:分钟,用户锁定时此参数有效
+    unsigned char   byRes[126];
+}SADP_DEV_RET_NET_PARAM, *LPSADP_DEV_RET_NET_PARAM;
+
+// CMS参数
+typedef struct tagSADP_CMS_PARAM
+{
+    char            szPUID[32];         // 预分配的PUID
+    char            szPassword[16];     // 设置的登录密码
+    char            szCmsIPv4[16];      // CMS服务器IPv4地址
+    char            szCmsIPv6[128];     // CMS服务器IPv6地址
+    unsigned short  wCmsPort;           // CMS服务器监听端口
+    unsigned char   byRes[30];
+}SADP_CMS_PARAM, *LPSADP_CMS_PARAM;
+
+//设备安全码,对应配置命令SADP_GET_DEVICE_CODE,接口SADP_GetDeviceConfig
+typedef struct tagSADP_SAFE_CODE
+{
+    unsigned int    dwCodeSize;
+    char            szDeviceCode[MAX_DEVICE_CODE];
+    unsigned char   byRes[128];
+}SADP_SAFE_CODE, *LPSADP_SAFE_CODE;
+
+//设备二维码
+typedef struct tagSADP_QR_CODES
+{
+    unsigned int    dwCodeSize;
+    unsigned int    dwMailBoxSize;
+    unsigned int    dwServiceMailBoxSize;
+    char            szQrCodes[MAX_QR_CODES];
+    char            szMailBoxAddr[MAX_MAILBOX_LEN];         //要设置的邮箱地址
+    char            szServiceMailBoxAddr[MAX_MAILBOX_LEN];  //服务的邮箱地址
+    unsigned char   byRes[128];
+}SADP_QR_CODES, *LPSADP_QR_CODES;
+
+//加密串结构体,对应配置命令SADP_GET_ENCRYPT_STRING,接口SADP_GetDeviceConfig
+typedef struct tagSADP_ENCRYPT_STRING
+{
+    unsigned int    dwEncryptStringSize;               //加密串长度
+    char            szEncryptString[MAX_ENCRYPT_CODE]; //加密串内容
+    unsigned char   byRes[128];
+}SADP_ENCRYPT_STRING, *LPSADP_ENCRYPT_STRING;
+//恢复/重置密码结构体
+typedef struct tagSADP_RESET_PARAM
+{
+    char            szCode[MAX_ENCRYPT_CODE];     //日期转换过的特殊字符串或加密工具加密后的字符串 - 为兼容老接口
+    char            szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件
+    char            szPassword[MAX_PASS_LEN];     //用户密码
+    unsigned char   byEnableSyncIPCPW;            //是否启用同步IPC密码。0 - 不启用, 1- 启用
+    unsigned char   byRes[511];
+}SADP_RESET_PARAM, *LSADP_RESET_PARAM;
+
+//显示OEM配置结构体
+typedef struct tagSADP_DISPLAY_OEM_CFG
+{
+    unsigned int    dwDisplayOEM;   //0-显示所有OEM,其它值为要显示的某一种类型的OEMCode,具体详见dwDetailOEMCode	
+    unsigned char   byRes[32];      //保留
+}SADP_DISPLAY_OEM_CFG, *LPSADP_DISPLAY_OEM_CFG;
+
+typedef struct tagSADP_TYPE_UNLOCK_CODE
+{
+    unsigned int   dwCodeSize;
+    char           szDeviceTypeUnlockCode[MAX_UNLOCK_CODE_RANDOM_LEN/*256*/];//设备型号解禁码
+    unsigned char  byRes[128];
+}SADP_TYPE_UNLOCK_CODE, *LPSADP_TYPE_UNLOCK_CODE;
+
+typedef struct tagSADP_CUSTOM_DEVICE_TYPE
+{
+    unsigned int   dwCodeSize;
+    char           szDeviceTypeSecretKey[MAX_UNLOCK_CODE_KEY/*256*/];//类型解禁秘钥
+    unsigned char  byRes[128];
+}SADP_CUSTOM_DEVICE_TYPE, *LPSADP_CUSTOM_DEVICE_TYPE;
+
+//获取GUID参数结构体
+typedef struct tagSADP_GUID_FILE_COND
+{
+    char           szPassword[MAX_PASS_LEN];  //用户密码
+    unsigned char  byRes[128];
+}SADP_GUID_FILE_COND, *LPSADP_GUID_FILE_COND;
+
+//GUID结构体
+typedef struct tagSADP_GUID_FILE
+{
+    unsigned int    dwGUIDSize;
+    char            szGUID[MAX_GUID_LEN];
+    unsigned char   byRetryGUIDTime;    //剩余可导入/导出GUID次数
+    unsigned char   bySurplusLockTime;  //剩余时间,单位:分钟,用户锁定时此参数有效
+    unsigned char   byRes[254];
+}SADP_GUID_FILE, *LPSADP_GUID_FILE;
+
+typedef struct tagSADP_SINGLE_SECURITY_QUESTION_CFG
+{
+    unsigned int    dwSize;
+    unsigned int    dwId;//序号
+    char            szAnswer[MAX_ANSWER_LEN/*256*/];//答案,只在设置时有效,获取时无效
+    unsigned char   byMark;//标记该序号的问题是否被设置  0-未设置 1-已设置
+    unsigned char   byRes[127];
+}SADP_SINGLE_SECURITY_QUESTION_CFG, *LPSADP_SINGLE_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION_CFG
+{
+    unsigned int   dwSize;
+    SADP_SINGLE_SECURITY_QUESTION_CFG  struSecurityQuestion[MAX_QUESTION_LIST_LEN/*32*/];//安全问题列表
+    char           szPassword[MAX_PASS_LEN];  //用户密码
+    unsigned char  byRes[512];
+}SADP_SECURITY_QUESTION_CFG, *LPSADP_SECURITY_QUESTION_CFG;
+
+typedef struct tagSADP_SECURITY_QUESTION
+{
+    unsigned char   byRetryAnswerTime;  //剩余可设置安全问题次数
+    unsigned char   bySurplusLockTime;  //剩余时间,单位:分钟,用户锁定时此参数有效
+    unsigned char   byRes[254];
+}SADP_SECURITY_QUESTION, *LPSADP_SECURITY_QUESTION;
+
+typedef struct tagSADP_RESET_PARAM_V40
+{
+    unsigned int    dwSize;
+    unsigned char   byResetType;              //密码重置类型 0-保留,1- 通过设备序列号恢复默认密码,2-导入/导出文件重置密码,3-二维码重置, 4-GUID重置,5-安全问题重置 6-邮箱重置密码
+    unsigned char   byEnableSyncIPCPW;        //是否同时将密码启用为NVR同步IPC密码。0 - 不启用, 1- 启用
+    unsigned char   byRes2[2];                //保留
+    char            szPassword[MAX_PASS_LEN]; //用户密码
+    char            szCode[MAX_ENCRYPT_CODE]; //日期转换过的特殊字符串或加密工具加密后的字符串 - byResetType 为1、3时有效
+    char            szAuthFile[MAX_FILE_PATH_LEN];//重置授权文件, byResetType 为2时有效
+    char            szGUID[MAX_GUID_LEN];     //GUID, byResetType 为4时有效
+    SADP_SECURITY_QUESTION_CFG struSecurityQuestionCfg;//安全问题结构体, byResetType 为5时有效
+    unsigned char   byRes[512];
+}SADP_RESET_PARAM_V40, *LPSADP_RESET_PARAM_V40;
+
+typedef struct tagSADP_RET_RESET_PARAM_V40
+{
+    unsigned char   byRetryGUIDTime;    //剩余可设置次数
+    unsigned char   bySurplusLockTime;  //剩余时间,单位:分钟,用户锁定时此参数有效
+    unsigned char   bRetryTimeValid; //byRetryGUIDTime字段是否有效  0-无效,1-有效
+    unsigned char   bLockTimeValid; //bySurplusLockTime字段是否有效  0-无效,1-有效
+    unsigned char   byRes[252];
+}SADP_RET_RESET_PARAM_V40, *LPSADP_RET_RESET_PARAM_V40;
+
+//HCPlatform状态
+typedef struct tagSADP_HCPLATFORM_STATUS_INFO
+{
+    unsigned int    dwSize;
+    unsigned char   byEnableHCPlatform;        //是否启用HCPlatform。0 - 保留, 1- 启用, 2-不启用
+    unsigned char   byRes[3];                  //保留
+    char            szPassword[MAX_PASS_LEN];  //用户密码
+    unsigned char   byRes2[128];
+}SADP_HCPLATFORM_STATUS_INFO, *LPSADP_HCPLATFORM_STATUS_INFO;
+
+typedef struct tagSADP_USER_MAILBOX
+{
+    unsigned int    dwSize;
+    char            szPassword[MAX_PASS_LEN];        //设备admin用户密码
+    char            szMailBoxAddr[MAX_MAILBOX_LEN];  //预留邮箱地址,用于接收密码服务器返回的安全码
+    unsigned char   byRes[128];
+}SADP_USER_MAILBOX, *LPSADP_USER_MAILBOX;
+//设备验证码
+typedef struct tagSADP_VERIFICATION_CODE_INFO
+{
+    unsigned int    dwSize;
+    char            szVerificationCode[SADP_MAX_VERIFICATION_CODE_LEN];  //验证码(验证码用于萤石接入、预览、控制的唯一密码)
+    char            szPassword[MAX_PASS_LEN];  //用户密码
+    unsigned char   byRes[128];
+}SADP_VERIFICATION_CODE_INFO, *LPSADP_VERIFICATION_CODE_INFO;
+
+//设备锁定信息
+typedef struct tagSADP_DEV_LOCK_INFO
+{
+    unsigned char   byRetryTime;       //剩余可尝试次数
+    unsigned char   bySurplusLockTime; //剩余时间,单位:分钟,用户锁定时此参数有效
+    unsigned char   byRes[126];
+}SADP_DEV_LOCK_INFO, *LPSADP_DEV_LOCK_INFO;
+
+//被绑定设备信息结构体
+typedef struct tagSADP_BIND_INFO
+{
+    char            szSerialNO[SADP_MAX_SERIALNO_LEN]; //被绑定设备的序列号
+    unsigned char   byiBind; //设备是否绑定 0-未绑定;1-已绑定
+    unsigned char   byRes[127];
+}SADP_BIND_INFO, *LPSADP_BIND_INFO;
+
+typedef struct tagSADP_BIND_LIST
+{
+    SADP_BIND_INFO   struBindInfo[SADP_MAX_BIND_NUM]; //绑定设备信息列表
+    char             szPassword[MAX_PASS_LEN]; //用户密码
+    unsigned char    byUnbindAll; //是否解绑所有设备 0-不解绑所有设备;1-解绑所有设备
+    unsigned char    byRes[127];
+}SADP_BIND_LIST, *LPSADP_BIND_LIST;
+
+typedef struct tagSADP_INACTIVE_INFO
+{
+    char             szPassword[MAX_PASS_LEN];  //用户密码
+    unsigned char    byRes[128];
+}SADP_INACTIVE_INFO, *LPSADP_INACTIVE_INFO;
+
+//wifi Region
+typedef struct tagSADP_WIFI_REGION_INFO
+{
+    unsigned char   byMode;                  //模式,0-保留,1-wifi区域配置模式,2-wifi增强模式
+    unsigned char   byWifiRegion;            //wifi区域,当byMode为1时,该字段有效。0 -default, 1- china, 2-nothAmerica,3-japan,4-europe,5-world
+    unsigned char   byWifiEnhancementEnabled;//是否启用wifi增强模式,当byMode为2时,该字段有效 0 -不启用, 1- 启用
+    unsigned char   byRes;                   //保留
+    char            szPassword[MAX_PASS_LEN];//用户密码
+    unsigned char   byRes2[128];
+}SADP_WIFI_REGION_INFO, *LPSADP_WIFI_REGION_INFO;
+
+//通道默认密码信息
+typedef struct tagSADP_CHANNEL_DEFAULT_PASSWORD
+{
+    char             szPassword[MAX_PASS_LEN]; //设备admin用户密码
+    char             szChannelDefaultPassword[MAX_PASS_LEN]; //通道默认密码(用户NVR激活,添加IPC)
+    unsigned char    byRes[128];
+}SADP_CHANNEL_DEFAULT_PASSWORD, *LPSADP_CHANNEL_DEFAULT_PASSWORD;
+
+
+//设备自检状态结构体
+typedef struct tagSADP_SELF_CHECK_STATE
+{
+    unsigned int    dwSize;
+    int             dwTotalDisk;               //磁盘总数(默认值为-1)
+    int             dwGoodDisk;                //好盘数(默认值为-1)
+    char            szCPU[MAX_CPU_LEN];        //CPU
+    char            szMemory[MAX_MEMORY_LEN];  //内存
+    unsigned char   byProgress;                //自检进度,0-100
+    unsigned char   byTemperatureState;        //温度状态,0-无效;1-正常;2-异常
+    unsigned char   byFanState;                //风扇状态,0-无效;1-正常;2-异常
+    unsigned char   byPowerState;              //电源状态,0-无效;1-正常;2-异常
+    unsigned char   bySASConnectState;         //SAS连接状态,0-无效;1-连接;2-未连接
+    char            byTotalNetworkPort;        //网口总数(默认值为-1)
+    char            byConnectNetworkPort;      //网口连接数(默认值为-1)
+    unsigned char   byRes[129];
+}SADP_SELF_CHECK_STATE, *LPSADP_SELF_CHECK_STATE;
+
+//EHome使能参数
+typedef struct tagSADP_EHOME_ENABLE_PARAM
+{
+    unsigned int    dwSize;
+    char            szDevID[MAX_PASS_LEN];     //设备ID
+    char            szEhomeKey[MAX_PASS_LEN];  //Ehome Key
+    char            szPassword[MAX_PASS_LEN];  //设备密码
+    unsigned char   byRes[64];
+}SADP_EHOME_ENABLE_PARAM, *LPSADP_EHOME_ENABLE_PARAM;
+
+//WIFI参数配置结构体
+typedef struct tagSADP_WIFI_CONFIG_PARAM
+{
+    unsigned int    dwSize;
+    char            szSSID[SADP_MAX_SERIALNO_LEN];      //SSID
+    char            szPassword[SADP_MAX_SERIALNO_LEN];  //Password
+    unsigned char   byWifiMode;  //wifi模式,0-默认,1-Station, 2-AP
+    unsigned char   byRes[64];
+}SADP_WIFI_CONFIG_PARAM, *LPSADP_WIFI_CONFIG_PARAM;
+
+//已配置重置密码类型参数配置结构体
+typedef struct tagSADP_PASSWORD_RESET_TYPE_PARAM
+{
+    unsigned int    dwSize;
+    unsigned char   byEnable;  //0-未配置  1-(GUID,安全问题,安全邮箱,HC)配置过一种或多种 
+    unsigned char   byGuidEnabled;  //0-未导出过GUID  1-导出过GUID
+    unsigned char   bySecurityQuestionEnabled;  //0-未配置过安全问题  1-配置过安全问题
+    unsigned char   bySecurityMailBoxEnabled;  //0-未配置过安全邮箱  1-配置过安全邮箱
+    unsigned char   byHikConnectEnabled;  //0-未绑定HikConnect账号  1-绑定过HikConnect账号
+    unsigned char   byRes1[3];
+    unsigned char   byRes[64];
+}SADP_PASSWORD_RESET_TYPE_PARAM, *LPSADP_PASSWORD_RESET_TYPE_PARAM;
+
+
+// 接口
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK)(const SADP_DEVICE_INFO *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V30(PDEVICE_FIND_CALLBACK pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+typedef void (CALLBACK *PDEVICE_FIND_CALLBACK_V40)(const SADP_DEVICE_INFO_V40 *lpDeviceInfo, void *pUserData);
+CSADP_API BOOL CALLBACK SADP_Start_V40(PDEVICE_FIND_CALLBACK_V40 pDeviceFindCallBack, int bInstallNPF = 0, void* pUserData = NULL);
+CSADP_API BOOL CALLBACK SADP_SendInquiry(void);
+CSADP_API BOOL CALLBACK SADP_Stop(void);
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam);
+CSADP_API unsigned int CALLBACK SADP_GetSadpVersion(void);
+CSADP_API BOOL CALLBACK SADP_SetLogToFile(int nLogLevel=0, char const *strLogDir = NULL, int bAutoDel = 1);		
+CSADP_API unsigned int CALLBACK SADP_GetLastError(void);
+CSADP_API BOOL CALLBACK SADP_ResetDefaultPasswd(const char* sDevSerialNO, const char* sCommand);
+CSADP_API BOOL CALLBACK SADP_SetCMSInfo(const char* sMac, const SADP_CMS_PARAM *lpCmsParam);
+CSADP_API BOOL CALLBACK SADP_Clearup(void);
+CSADP_API void CALLBACK SADP_SetAutoRequestInterval(unsigned int dwInterval); //设置自动搜索时间间隔(单位秒,为0则不自动请求,默认60s)
+
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int  dwinBuffSize, void *lpOutBuffer, unsigned int  dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_SetDeviceConfig(const char* sDevSerialNO, unsigned int dwCommand, void* lpInBuffer, unsigned int  dwInBuffSize, void* lpOutBuffer, unsigned int  dwOutBuffSize);
+CSADP_API BOOL CALLBACK SADP_GetDeviceConfigByMAC(const char* sDevMAC, unsigned int dwCommand, void* lpInBuffer, unsigned int  dwinBuffSize, void *lpOutBuffer, unsigned int  dwOutBuffSize);
+//激活设备
+CSADP_API BOOL CALLBACK SADP_ActivateDevice(const char* sDevSerialNO, const char* sCommand);
+
+//重置密码接口,兼容之前的恢复默认密码接口
+CSADP_API BOOL CALLBACK SADP_ResetPasswd(const char* sDevSerialNO, const SADP_RESET_PARAM *pResetParam);
+//重置密码接口V40,兼容之前的SADP_ResetPasswd
+CSADP_API BOOL CALLBACK SADP_ResetPasswd_V40(const char* sDevSerialNO, const SADP_RESET_PARAM_V40 *pResetParam, SADP_RET_RESET_PARAM_V40 *pRetResetParam);
+
+
+//设置设备过滤规则
+//dwFilterRule,按位表示,为1表示过滤,全0表示不过滤;0x01:过滤萤石设备;0x02:过滤OEM设备;0x03:过滤萤和OEM设备;0xfffffffe:仅显示萤石设备;0xfffffffd:仅显示OEM设备
+CSADP_API BOOL CALLBACK SADP_SetDeviceFilterRule( unsigned int dwFilterRule, const void *lpInBuff, unsigned int dwInBuffLen);
+//修改网络参数V40
+CSADP_API BOOL CALLBACK SADP_ModifyDeviceNetParam_V40(const char* sMAC, const char* sPassword, const SADP_DEV_NET_PARAM *lpNetParam, SADP_DEV_RET_NET_PARAM *lpRetNetParam, unsigned int  dwOutBuffSize);
+//点灯
+CSADP_API BOOL CALLBACK SADP_SendLamp(const char* sMAC, unsigned int dwCommand);
+#endif
+
+
+
+
diff --git a/EZSDK/EZSDK/SDK/libEZOpenSDK.a b/EZSDK/EZSDK/SDK/libEZOpenSDK.a
index 3f9b2e0..6495b73 100644
--- a/EZSDK/EZSDK/SDK/libEZOpenSDK.a
+++ b/EZSDK/EZSDK/SDK/libEZOpenSDK.a
Binary files differ

--
Gitblit v1.8.0