萤石云 iOSSDK,移植跨平台相关工程
JLChen
2021-10-19 feb1c3628a4d5da3c85bd3f3dae3be22ed4f5625
2021-10-19 1.更新SDK
16个文件已添加
3个文件已删除
31个文件已修改
2336 ■■■■ 已修改文件
.gitignore 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/PrefixHeader.pch 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZAPWiFiConfigViewController.m 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZAddByQRCodeViewController.m 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/VideoTalk/EZVideoTalkViewcontroller.h 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/VideoTalk/EZVideoTalkViewcontroller.mm 436 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/ViewController.m 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkParam.h 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h 275 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Info.plist 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/README(集成必读).txt 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/ReleaseNotes.txt 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/com.hri.hpc.mobile.ios.player.metallib 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZConstants.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZGlobalSDK.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZOpenSDK.h 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZPlayer.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZAlarmInfo.h 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZDeviceInfo.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZBAVParam.h 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZConferenceClient.h 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSession.h 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSessionDefines.h 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSessionVideoParam.h 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalk.h 178 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h 257 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkView.h 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalkParam.h 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalkSDK.h 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/libEZOpenSDK.a 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/openssl/libcrypto.a 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/openssl/libssl.a 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/PrefixHeader.pch 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -75,7 +75,7 @@
*.ilk
*.meta
*.obj
*.pch
# *.pch
*.pdb
*.pgc
*.pgd
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17506" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="1Qq-y9-5Vr">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES" initialViewController="1Qq-y9-5Vr">
    <device id="retina4_7" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17505"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
@@ -684,24 +684,40 @@
                                <nil key="highlightedColor"/>
                            </label>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" usesAttributedText="YES" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Q0X-wy-A5B">
                                <rect key="frame" x="47.5" y="362" width="311.5" height="40"/>
                                <rect key="frame" x="47.5" y="362" width="311.5" height="100"/>
                                <attributedString key="attributedText">
                                    <fragment content="返回">
                                        <attributes>
                                            <font key="NSFont" size="14" name=".PingFangSC-Regular"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
                                            <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
                                            <font key="NSFont" size="14" name="PingFangSC-Regular"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
                                        </attributes>
                                    </fragment>
                                    <fragment content="APP">
                                        <attributes>
                                            <font key="NSFont" metaFont="system" size="14"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
                                            <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
                                            <font key="NSFont" size="14" name="HelveticaNeue"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
                                        </attributes>
                                    </fragment>
                                    <fragment content=",等待与设备连接,成功后自动进入下一步操作。">
                                    <fragment content=",等待与设备连接,成功后自动进入下一步操作。(注意:如果设备WIFI名称不是“EZVIZ”前缀的,请复制密码后根据新的前缀名字,手动修改密码的前缀并连接即可。例如“">
                                        <attributes>
                                            <font key="NSFont" size="14" name=".PingFangSC-Regular"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0"/>
                                            <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
                                            <font key="NSFont" size="14" name="PingFangSC-Regular"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
                                        </attributes>
                                    </fragment>
                                    <fragment content="SoftAP_XXXXXXX">
                                        <attributes>
                                            <font key="NSFont" size="13" name="HelveticaNeue"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
                                        </attributes>
                                    </fragment>
                                    <fragment content="”)">
                                        <attributes>
                                            <color key="NSColor" name="textColor" catalog="System" colorSpace="catalog"/>
                                            <font key="NSFont" size="14" name="PingFangSC-Regular"/>
                                            <paragraphStyle key="NSParagraphStyle" alignment="left" lineBreakMode="wordWrapping" baseWritingDirection="natural" minimumLineHeight="20" tighteningFactorForTruncation="0.0" allowsDefaultTighteningForTruncation="NO"/>
                                        </attributes>
                                    </fragment>
                                </attributedString>
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/PrefixHeader.pch
New file
@@ -0,0 +1,51 @@
//
//  PrefixHeader.pch
//  EZOpenSDKDemo
//
//  Created by linyong on 16/10/26.
//  Copyright Â© 2016å¹´ Ezviz. All rights reserved.
//
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
// Include any system framework and library headers here that should be included in all compilation units.
// You will also need to set the Prefix Header build setting of one or more of your targets to reference this file.
#if 0
#define EZVIZ_GLOBAL_DEMO
#else
#define EZVIZ_OPEN_DEMO
#endif
#define DEMO_ONLINE //线上服务器
//#import "Macros.h"
//#import "UIView+EZExtension.h"
#import "UIView+Toast.h"
//#import "JXTAlertController.h"
//#import "NSDate+DateTools.h"
#import "Masonry.h"
#import "DDKit.h"
#import "EZOpenSDK.h"
#import "EZGlobalSDK.h"
#import "GlobalKit.h"
#import "EZHttpUtil.h"
#import "EZSDK.h"
//#ifdef EZVIZ_GLOBAL_DEMO
//
//#define EZOPENSDK [EZGlobalSDK class]
//
//#else
//
//#define EZOPENSDK [EZOpenSDK class]
//
//#endif
#endif /* PrefixHeader_pch */
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZAPWiFiConfigViewController.m
@@ -244,8 +244,13 @@
{
    NSString *ssid = [self currentSsid];
    
    if (ssid && [ssid isEqualToString:self.devicWifiName])
    {
//    if (ssid && [ssid isEqualToString:self.devicWifiName])
//    {
//        return YES;
//    }
    //2021-10-19 åˆ¤æ–­æ¡ä»¶ï¼Œæ”¹ä¸ºåªåŒ¹é…åŽé¢åºåˆ—号字段
    if(ssid && [ssid hasSuffix:[GlobalKit shareKit].deviceSerialNo]){//字符串末尾有序列号字符
        return YES;
    }
    
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZAddByQRCodeViewController.m
@@ -234,6 +234,7 @@
- (void)checkQRCode:(NSString *)strQRcode
{
    strQRcode = [strQRcode stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\r"];//2021-10-19 è§£å†³éƒ¨åˆ†çŒ«çœ¼è®¾å¤‡å±å¹•显示的二维码,参数之间出现空行导致分割取错字段问题
    NSArray *arrString = [strQRcode componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    
    if(arrString.count >=3)
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m
@@ -390,9 +390,9 @@
}
- (void) go2VideoTalk:(EZDeviceInfo *)deviceInfo {
    EZVideoTalkViewcontroller *vc = [EZVideoTalkViewcontroller videoTalkVC];
    vc.deviceInfo = deviceInfo;
    [self.navigationController pushViewController:vc animated:YES];
//    EZVideoTalkViewcontroller *vc = [EZVideoTalkViewcontroller videoTalkVC];
//    vc.deviceInfo = deviceInfo;
//    [self.navigationController pushViewController:vc animated:YES];
}
- (IBAction)go2MultiPlay:(id)sender {
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/VideoTalk/EZVideoTalkViewcontroller.h
@@ -1,20 +1,20 @@
////
////  EZVideoTalkViewcontroller.h
////  EZBAVDemo
////
////  Created by kanhaiping on 2018/6/26.
////  Copyright Â© 2018å¹´ hikvision. All rights reserved.
////
//
//  EZVideoTalkViewcontroller.h
//  EZBAVDemo
//#import <UIKit/UIKit.h>
//
//  Created by kanhaiping on 2018/6/26.
//  Copyright Â© 2018å¹´ hikvision. All rights reserved.
//@class EZDeviceInfo;
//
#import <UIKit/UIKit.h>
@class EZDeviceInfo;
@interface EZVideoTalkViewcontroller : UIViewController
@property(nonatomic, strong) EZDeviceInfo *deviceInfo;
+ (EZVideoTalkViewcontroller *) videoTalkVC;
@end
//@interface EZVideoTalkViewcontroller : UIViewController
//
//@property(nonatomic, strong) EZDeviceInfo *deviceInfo;
//
//+ (EZVideoTalkViewcontroller *) videoTalkVC;
//
//@end
//
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/VideoTalk/EZVideoTalkViewcontroller.mm
@@ -1,221 +1,221 @@
////
////  EZVideoTalkViewcontroller.m
////  EZBAVDemo
////
////  Created by kanhaiping on 2018/6/26.
////  Copyright Â© 2018å¹´ hikvision. All rights reserved.
////
//
//  EZVideoTalkViewcontroller.m
//  EZBAVDemo
//#import "EZVideoTalkViewcontroller.h"
//#import "EZVideoTalkSDK.h"
//#import "EZVideoTalkParam.h"
//#import "UIView+Toast.h"
//#import <AVFoundation/AVFoundation.h>
//#import "EZOpenSDK.h"
//#import "EZDeviceInfo.h"
//#import "GlobalKit.h"
//#import "EzvizWatchServerInfo.h"
//#import "EZTokenKit.h"
//
//  Created by kanhaiping on 2018/6/26.
//  Copyright Â© 2018å¹´ hikvision. All rights reserved.
//@interface EZVideoTalkViewcontroller ()<EZVideoTalkSDKDelegate>
//@property (nonatomic, assign) BOOL bEverOpenSound;
//@property (nonatomic, strong) EZVideoTalkSDK *client;
//
#import "EZVideoTalkViewcontroller.h"
#import "EZVideoTalkSDK.h"
#import "EZVideoTalkParam.h"
#import "UIView+Toast.h"
#import <AVFoundation/AVFoundation.h>
#import "EZOpenSDK.h"
#import "EZDeviceInfo.h"
#import "GlobalKit.h"
#import "EzvizWatchServerInfo.h"
#import "EZTokenKit.h"
@interface EZVideoTalkViewcontroller ()<EZVideoTalkSDKDelegate>
@property (nonatomic, assign) BOOL bEverOpenSound;
@property (nonatomic, strong) EZVideoTalkSDK *client;
@property (weak, nonatomic) IBOutlet UIView *localView;
@property (weak, nonatomic) IBOutlet UIView *remoteView;
@property (weak, nonatomic) IBOutlet UITextField *roomIDTextField;
@property (nonatomic, strong) EzvizWatchServerInfo *watchServerInfo;
@end
@implementation EZVideoTalkViewcontroller
+ (EZVideoTalkViewcontroller *) videoTalkVC {
    EZVideoTalkViewcontroller *vc = [[NSBundle mainBundle] loadNibNamed:@"EZVideoTalkViewcontroller" owner:nil options:nil].firstObject;
    return vc;
}
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
    if (self.view.gestureRecognizers.count <= 0) {
        [self.view addGestureRecognizer:gesture];
    }
    self.title = @"Video Talk";
}
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(stopTalk) name:UIApplicationDidEnterBackgroundNotification object:nil];
    [self getWatchInfo];
}
- (void)viewWillDisappear:(BOOL)animated  {
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    if (self.client != nil) {
        [self stopTalk];
    }
}
- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
#pragma mark Actions
- (IBAction)createRoomAction:(id)sender {
    [self startTalkWithRoomID:0];
}
- (IBAction)enterRoomAction:(id)sender {
    if (self.roomIDTextField.text.length <= 0 || [self.roomIDTextField.text integerValue] <= 0) {
        [self showMessage:@"请输入正确的房间号"];
        return;
    }
    [self startTalkWithRoomID:(int32_t)[self.roomIDTextField.text integerValue]];
    [self showMessage:@"加入房间"];
}
- (IBAction)leaveRoomAction:(id)sender {
    [self stopTalk];
    [self showMessage:@"已离开房间"];
}
- (void)tapAction:(id)sender {
    [self.roomIDTextField resignFirstResponder];
}
#pragma mark Helper
- (void)showMessage:(NSString *)message
{
    [self.view makeToast:message duration:2.0 position:CSToastPositionCenter];
}
#pragma mark BAV API
- (void)getWatchInfo {
    __weak typeof(self) weakSelf = self;
    [EZOpenSDK requestGetWatchServerInfo:self.deviceInfo.deviceSerial completion:^(id watchServerInfo, NSError *error) {
        weakSelf.watchServerInfo = watchServerInfo;
    }];
}
- (void)startTalkWithRoomID:(int32_t)roomID
{
    if (self.client != nil) {
        [self.client stop];
        self.client = nil;
    }
    EZVideoTalkParam *param = [EZVideoTalkParam new];
    param.iCltRole = roomID > 0 ? 1 : 0;
    param.iCltType = 1;
    param.iOtherCltType = 1;
//    param.iReason = 101;
    param.iStsPort = self.watchServerInfo.port;
    param.iRoomId = roomID > 0 ? roomID : 0;
    param.szOterId = self.deviceInfo.deviceSerial;
    param.szSelfId = @"1234567891";
    param.szAuthToken = [EZTokenKit sharedKit].token;
    param.szStsAddr = self.watchServerInfo.domain;
    [EZVideoTalkSDK setDebugVideoLog:YES];
    [EZVideoTalkSDK setDebugLogEnable:YES withLogCallback:^(NSString *logStr) {
        NSLog(@"%@", logStr);
    }];
    _client = [[EZVideoTalkSDK alloc] initWithParam:param localWindow:self.localView remoteWindow:self.remoteView];
    _client.delegate = self;
    //    [_client startWithType:EZVideoTalkCaptureVideo | EZVideoTalkCaptureAudio];
        [_client startWithType:EZVideoTalkCaptureAudio];
}
- (void)stopTalk
{
    [self.client stop];
    self.client = nil;
}
#pragma mark EZVideoTalkSDKDelegate
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedError:(int32_t)errorCode
{
    NSLog(@"%s recived errorcode:%d", __func__, errorCode);
    dispatch_async(dispatch_get_main_queue(), ^{
        [self showMessage:[NSString stringWithFormat:@"BAVClient Error:%d",errorCode]];
    });
    [self stopTalk];
}
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedMessage:(EZVideoTalkMessageType)messageCode msg:(NSString *)msg
{
    NSLog(@"%s recived messagecode:%lu ,msg:%@", __func__, (unsigned long)messageCode, msg);
    dispatch_async(dispatch_get_main_queue(), ^{
        if (messageCode == EZVideoTalkMessageRoomCreated) {
            [self showMessage:[NSString stringWithFormat:@"已创建房间:%d", self.client.roomID]];
             self.roomIDTextField.text = [NSString stringWithFormat:@"%d", self.client.roomID];
        }
        else if (messageCode == EZVideoTalkMessageStartInputData) {
            [self showMessage:[NSString stringWithFormat:@"开始推流"]];
        }
    });
}
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedBavClientLogMsg:(NSString *)msg {
    NSLog(@"%s recived msg:%@", __func__, msg);
}
- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTime:(int32_t)delayTime {
    NSLog(@"%s delayTime:%d", __func__, delayTime);
    dispatch_async(dispatch_get_main_queue(), ^{
        [self showMessage:[NSString stringWithFormat:@"播放卡顿-delayTime:%d", delayTime]];
    });
}
- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTimeStatistics:(double)delayTimeStat {
    NSLog(@"%s delayTimeStat:%f", __func__, delayTimeStat);
}
- (void)videoTalk:(EZVideoTalkSDK *)client didDisplayWidth:(int32_t)width height:(int32_t)height {
    NSLog(@"%s", __func__);
    if (!self.bEverOpenSound) {
        self.bEverOpenSound = YES;
        [self.client openSound:YES];
    }
}
@end
//@property (weak, nonatomic) IBOutlet UIView *localView;
//@property (weak, nonatomic) IBOutlet UIView *remoteView;
//@property (weak, nonatomic) IBOutlet UITextField *roomIDTextField;
//
//@property (nonatomic, strong) EzvizWatchServerInfo *watchServerInfo;
//
//@end
//
//@implementation EZVideoTalkViewcontroller
//
//+ (EZVideoTalkViewcontroller *) videoTalkVC {
//
//    EZVideoTalkViewcontroller *vc = [[NSBundle mainBundle] loadNibNamed:@"EZVideoTalkViewcontroller" owner:nil options:nil].firstObject;
//    return vc;
//}
//
//- (void)viewDidLoad {
//    [super viewDidLoad];
//    // Do any additional setup after loading the view, typically from a nib.
//    UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapAction:)];
//    if (self.view.gestureRecognizers.count <= 0) {
//        [self.view addGestureRecognizer:gesture];
//    }
//
//    self.title = @"Video Talk";
//}
//
//- (void)viewWillAppear:(BOOL)animated {
//    [super viewWillAppear:animated];
//
//    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(stopTalk) name:UIApplicationDidEnterBackgroundNotification object:nil];
//    [self getWatchInfo];
//}
//
//- (void)viewWillDisappear:(BOOL)animated  {
//    [super viewWillDisappear:animated];
//
//    [[NSNotificationCenter defaultCenter] removeObserver:self];
//
//    if (self.client != nil) {
//        [self stopTalk];
//    }
//}
//
//- (void)didReceiveMemoryWarning {
//    [super didReceiveMemoryWarning];
//    // Dispose of any resources that can be recreated.
//}
//
//
//#pragma mark Actions
//
//- (IBAction)createRoomAction:(id)sender {
//
//    [self startTalkWithRoomID:0];
//}
//
//- (IBAction)enterRoomAction:(id)sender {
//
//    if (self.roomIDTextField.text.length <= 0 || [self.roomIDTextField.text integerValue] <= 0) {
//        [self showMessage:@"请输入正确的房间号"];
//        return;
//    }
//
//    [self startTalkWithRoomID:(int32_t)[self.roomIDTextField.text integerValue]];
//
//    [self showMessage:@"加入房间"];
//}
//
//- (IBAction)leaveRoomAction:(id)sender {
//
//    [self stopTalk];
//
//    [self showMessage:@"已离开房间"];
//}
//
//- (void)tapAction:(id)sender {
//
//    [self.roomIDTextField resignFirstResponder];
//}
//
//#pragma mark Helper
//
//- (void)showMessage:(NSString *)message
//{
//    [self.view makeToast:message duration:2.0 position:CSToastPositionCenter];
//}
//
//#pragma mark BAV API
//
//- (void)getWatchInfo {
//
//    __weak typeof(self) weakSelf = self;
//    [EZOpenSDK requestGetWatchServerInfo:self.deviceInfo.deviceSerial completion:^(id watchServerInfo, NSError *error) {
//
//        weakSelf.watchServerInfo = watchServerInfo;
//    }];
//}
//
//- (void)startTalkWithRoomID:(int32_t)roomID
//{
//    if (self.client != nil) {
//        [self.client stop];
//        self.client = nil;
//    }
//
//    EZVideoTalkParam *param = [EZVideoTalkParam new];
//    param.iCltRole = roomID > 0 ? 1 : 0;
//    param.iCltType = 1;
//    param.iOtherCltType = 1;
////    param.iReason = 101;
//    param.iStsPort = self.watchServerInfo.port;
//    param.iRoomId = roomID > 0 ? roomID : 0;
//    param.szOterId = self.deviceInfo.deviceSerial;
//    param.szSelfId = @"1234567891";
//    param.szAuthToken = [EZTokenKit sharedKit].token;
//    param.szStsAddr = self.watchServerInfo.domain;
//
//    [EZVideoTalkSDK setDebugVideoLog:YES];
//    [EZVideoTalkSDK setDebugLogEnable:YES withLogCallback:^(NSString *logStr) {
//        NSLog(@"%@", logStr);
//    }];
//
//    _client = [[EZVideoTalkSDK alloc] initWithParam:param localWindow:self.localView remoteWindow:self.remoteView];
//    _client.delegate = self;
//
//    //    [_client startWithType:EZVideoTalkCaptureVideo | EZVideoTalkCaptureAudio];
//        [_client startWithType:EZVideoTalkCaptureAudio];
//}
//
//- (void)stopTalk
//{
//    [self.client stop];
//    self.client = nil;
//}
//
//#pragma mark EZVideoTalkSDKDelegate
//
//- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedError:(int32_t)errorCode
//{
//    NSLog(@"%s recived errorcode:%d", __func__, errorCode);
//
//    dispatch_async(dispatch_get_main_queue(), ^{
//        [self showMessage:[NSString stringWithFormat:@"BAVClient Error:%d",errorCode]];
//    });
//
//    [self stopTalk];
//}
//
//- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedMessage:(EZVideoTalkMessageType)messageCode msg:(NSString *)msg
//{
//    NSLog(@"%s recived messagecode:%lu ,msg:%@", __func__, (unsigned long)messageCode, msg);
//
//    dispatch_async(dispatch_get_main_queue(), ^{
//
//        if (messageCode == EZVideoTalkMessageRoomCreated) {
//
//            [self showMessage:[NSString stringWithFormat:@"已创建房间:%d", self.client.roomID]];
//             self.roomIDTextField.text = [NSString stringWithFormat:@"%d", self.client.roomID];
//        }
//        else if (messageCode == EZVideoTalkMessageStartInputData) {
//
//            [self showMessage:[NSString stringWithFormat:@"开始推流"]];
//        }
//    });
//}
//
//- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedBavClientLogMsg:(NSString *)msg {
//
//    NSLog(@"%s recived msg:%@", __func__, msg);
//}
//
//- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTime:(int32_t)delayTime {
//
//    NSLog(@"%s delayTime:%d", __func__, delayTime);
//
//    dispatch_async(dispatch_get_main_queue(), ^{
//        [self showMessage:[NSString stringWithFormat:@"播放卡顿-delayTime:%d", delayTime]];
//    });
//}
//
//- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTimeStatistics:(double)delayTimeStat {
//
//    NSLog(@"%s delayTimeStat:%f", __func__, delayTimeStat);
//}
//
//- (void)videoTalk:(EZVideoTalkSDK *)client didDisplayWidth:(int32_t)width height:(int32_t)height {
//
//    NSLog(@"%s", __func__);
//    if (!self.bEverOpenSound) {
//        self.bEverOpenSound = YES;
//        [self.client openSound:YES];
//    }
//}
//
//
//
//@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/ViewController.m
@@ -84,10 +84,10 @@
//
//
//    [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://china-gateway.hdlcontrol.com" platform:1 homeId:@"1409421094585028610"];
    [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJiZTVmYzRhZjQwODA0Y2Y0OTA5OTk5YTcyYWIwNTVjYSIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInRlbmFudElkIjoiMjAiLCJ1c2VyVHlwZSI6IlVTRVJfQyIsInRva2VuVHlwZSI6ImFjY2Vzc190b2tlbiIsInVzZXJOYW1lIjoi5ZiJ5LmQIiwib3BlbkFwcGxpY2F0aW9uSWQiOiIwIiwidXNlcklkIjoiMTM1NzEzODQzNDgyODMzMzA1OCIsImV4cCI6MTYyNjg1MjY5NSwibmJmIjoxNjI2ODQ1NDk1fQ.ZjLGpFDfEXhViUEVqYY5UggMorgqAmj38rHXfHSp1pX008Lk0_KH9lz3R05iCfLign74LSYdTd4OfVkyDYb2pt_bIjZr3w0kZdbun8v4Ofu4bFrFFdI4qACPbc7GjXFI2tC_0A_uvekTB6nCRm3lW-GWAvTocR6UWsA_UGsMDIM" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJjNDQ1M2EyMDE0MzU0MWRlYWRmOTgyYjQ3YmEyYjU0YiIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzU3MTM4NDM0ODI4MzMzMDU4IiwiZXhwIjoxNjI3NDUwNDEzLCJuYmYiOjE2MjY4NDU2MTN9.TN9-Y72sesOx-qL6V6BHdbLIqeM26OepFe0uHRIMSXKncRzU9NwknYgREli6k0GDe3965aQD7IeQh-jJTPOxS39VqGjzfuH_E-yfx2wt2aHPbDVZAOBalInSSOGHsJEnw-kEh5BIFDDvq-6tysHemQvxkR3zK5S9XKimwxeCZOg"];
    [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJmNDE3MGQyZjIxZWI0NjMyYWU5ZmUxOTM5NDJmOTNmYiIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInRlbmFudElkIjoiMjAiLCJ1c2VyVHlwZSI6IlVTRVJfQyIsInRva2VuVHlwZSI6ImFjY2Vzc190b2tlbiIsInVzZXJOYW1lIjoi5ZiJ5LmQIiwib3BlbkFwcGxpY2F0aW9uSWQiOiIwIiwidXNlcklkIjoiMTM1NzEzODQzNDgyODMzMzA1OCIsImV4cCI6MTYzNDAyNzAxOSwibmJmIjoxNjM0MDE5ODE5fQ.Bn4bTXJq-o4Ch05rM81UdjR_EO4ybEpGwzt19as16UaoQVR9i2OGgoT7r4jVjC204o1APLC3JvrPq-eJKXieh7VBP6n5s-2BwGHTdV4W2cKdiMC5ciVeHFopmkw7cd3JNkxgGiXykQqxMnIl3keNXu5VXjo4XCOw3cYOuXhg_ZA" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIxMWIyNDFjY2U2MDE0YTM2YmIyMTdjZGFhZGY0NzlhMCIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzU3MTM4NDM0ODI4MzMzMDU4IiwiZXhwIjoxNjM0NjI0NjE5LCJuYmYiOjE2MzQwMTk4MTl9.GL9idS-BWGVbZG8RdmwM1sATKJr9FC6Z4x64xZoZf0E421iL_IkGy2iflLWToTmeLqMzBJ-bjN34yCgban-7M4dY5HuEMvWbxgP5sAiXTuS9z1UDkbry8gvs6zrcVUreb9H5ciroNJOh20yoCzfnfXZVl9M7w5acCkl9UmdtX0c"];
    
    
    [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://china-gateway.hdlcontrol.com" platform:1 homeId:@"1417299149361909761"];
    [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://china-gateway.hdlcontrol.com" platform:1 homeId:@"1357564319439441921"];
    
    
}
@@ -97,8 +97,7 @@
    
    return;
//    [[GlobalKit shareKit] setAccessToken:@"ra.a5bfkhhx7ycscsj41if7l0cf9ytfhv5q-9keuxvphmn-1fvjt6p-jugtyy8sr"];
    [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI2Zjk1ZTEwZWIwNjA0ZjNiYTdmNTc0ZGUyM2QxYmNmZiIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInVzZXJBY2NvdW50Ijoid3hyIiwidGVuYW50SWQiOiIyMCIsInVzZXJUeXBlIjoiVVNFUl9DIiwidG9rZW5UeXBlIjoiYWNjZXNzX3Rva2VuIiwidXNlck5hbWUiOiJrYWVkZSIsIm9wZW5BcHBsaWNhdGlvbklkIjoiMCIsInVzZXJJZCI6IjEzOTIwMzU1NjgyMDQ0MjMxNjkiLCJleHAiOjE2MjU3MTY3NjAsIm5iZiI6MTYyNTcwOTU2MH0.C6w0mb0YiNhqQfLPscXiNVh_DOsbza_fubUbn_T-W04L3R7egi7-Gv_iifdfvh4XTU10rEdVl6FLXKxt3JJvo2x_sjBQLkWRQINMVl1qLOz9cMew79_aykXOwl8mdroYs9SKBd90qyM2lZaA91sD4H0HMVVyc_D2TEcG4XJzSBM" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiI1M2FlMzg3NDhmNjU0MzE1OTM0MTQ0OWQyYmQ0NjE0NiIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzkyMDM1NTY4MjA0NDIzMTY5IiwiZXhwIjoxNjI2MzE0MzYwLCJuYmYiOjE2MjU3MDk1NjB9.AZlG8jO8lFDcj5dfoY0rZsDfglGdeyLuSImzMw1enHWfAacjkIof0vXQ_qJG9Q-6qxyXXbPu_xrd0DhkGNFeHJ4WFL0iiYgDP51sJuUdKrQklUCSC6T7ZjIW0GSVmvOW4GCw0s6L51bVT_rkdrusVD4rDnOtJwWqXTUfyNanmlk"];
    [[EZSDK sharedInstance] setHDlAccessToken:@"Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiJmNDE3MGQyZjIxZWI0NjMyYWU5ZmUxOTM5NDJmOTNmYiIsImNvbXBhbnlJZCI6IjAiLCJyb2xlIjoiIiwiaGVhZGVyUHJlZml4IjoiQmVhcmVyICIsInRlbmFudElkIjoiMjAiLCJ1c2VyVHlwZSI6IlVTRVJfQyIsInRva2VuVHlwZSI6ImFjY2Vzc190b2tlbiIsInVzZXJOYW1lIjoi5ZiJ5LmQIiwib3BlbkFwcGxpY2F0aW9uSWQiOiIwIiwidXNlcklkIjoiMTM1NzEzODQzNDgyODMzMzA1OCIsImV4cCI6MTYzNDAyNzAxOSwibmJmIjoxNjM0MDE5ODE5fQ.Bn4bTXJq-o4Ch05rM81UdjR_EO4ybEpGwzt19as16UaoQVR9i2OGgoT7r4jVjC204o1APLC3JvrPq-eJKXieh7VBP6n5s-2BwGHTdV4W2cKdiMC5ciVeHFopmkw7cd3JNkxgGiXykQqxMnIl3keNXu5VXjo4XCOw3cYOuXhg_ZA" refreshToken:@"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJqdGkiOiIxMWIyNDFjY2U2MDE0YTM2YmIyMTdjZGFhZGY0NzlhMCIsImNvbXBhbnlJZCI6IjAiLCJoZWFkZXJQcmVmaXgiOiJCZWFyZXIgIiwidGVuYW50SWQiOiIyMCIsInRva2VuVHlwZSI6InJlZnJlc2hfdG9rZW4iLCJvcGVuQXBwbGljYXRpb25JZCI6IjAiLCJ1c2VySWQiOiIxMzU3MTM4NDM0ODI4MzMzMDU4IiwiZXhwIjoxNjM0NjI0NjE5LCJuYmYiOjE2MzQwMTk4MTl9.GL9idS-BWGVbZG8RdmwM1sATKJr9FC6Z4x64xZoZf0E421iL_IkGy2iflLWToTmeLqMzBJ-bjN34yCgban-7M4dY5HuEMvWbxgP5sAiXTuS9z1UDkbry8gvs6zrcVUreb9H5ciroNJOh20yoCzfnfXZVl9M7w5acCkl9UmdtX0c"];
    
    [[EZSDK sharedInstance] setRequestHttpsHostAndPlatform:@"https://test-gz.hdlcontrol.com" platform:1 homeId:@"1396717478877241345"];
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/EZOpenSDKFramework
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZAlarmInfo.h
@@ -26,7 +26,19 @@
/// å‘Šè­¦ç±»åž‹
@property (nonatomic) NSInteger alarmType;
/// æ˜¯å¦åР坆
@property (nonatomic) BOOL isEncrypt;
//@property (nonatomic) BOOL isEncrypt;
/// å‘Šè­¦å›¾ç‰‡åŠ å¯†ä¿¡æ¯ crypt 0-不确定 1-设备加密 2-平台加密
/// å¦‚果是2,表明是平台加密的图片,请使用下面的checksum作为解密秘钥解密图片
/// å¦‚果是1,表明是设备加密的图片,请使用设备的验证码作为解密秘钥解密图片
/// å¦‚果是0,表明未知的加密信息,请通过上面报警图片URL(alarmPicUrl)中的 isEncrypted å­—段,判断图片是 0:未加密 1:设备加密
/// æŠ¥è­¦å›¾ç‰‡çš„URL示例:
/// 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-萤石和sd卡,6-百度和sd卡
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZConstants.h
@@ -143,9 +143,9 @@
/* WiFi配置设备状态 */
typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
    DEVICE_WIFI_CONNECTING = 1,   //设备正在连接WiFi
    DEVICE_WIFI_CONNECTED = 2,    //设备连接WiFi成功
    DEVICE_WIFI_CONNECTED = 2,    //设备连接WiFi成功  (已废弃 v4.16.0)
    DEVICE_PLATFORM_REGISTED = 3, //设备注册平台成功
    DEVICE_ACCOUNT_BINDED = 4     //设备已经绑定账户
    DEVICE_ACCOUNT_BINDED = 4     //设备已经绑定账户  (已废弃 v4.16.0)
};
/* è®¾å¤‡ptz命令 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZDeviceInfo.h
@@ -35,7 +35,7 @@
@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 +47,8 @@
@property (nonatomic) BOOL isSupportMirrorCenter;
/// æ˜¯å¦æ”¯æŒå£°æ³¢é…ç½‘
@property (nonatomic) BOOL isSupportSoundWave;
/// æ˜¯å¦æ”¯æŒå€æ•°å›žæ”¾
@property (nonatomic) BOOL isSupportPlaybackRate;
/// è®¾å¤‡å¤§ç±»
@property (nonatomic,copy) NSString *category;
/// æ·»åŠ æ—¶é—´
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZGlobalSDK.h
@@ -248,6 +248,12 @@
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
/// å‘Šè­¦å›¾ç‰‡è§£å¯†æ–¹æ³•
/// @param data éœ€è¦è§£å¯†çš„æ•°æ®
/// @param verifyCode è®¾å¤‡éªŒè¯ç  æˆ– å¹³å°è¿”回的checksum
/// @param type 1:设备加密;2:平台加密
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
#pragma mark - V3.2 æ–°å¢žåŠ æŽ¥å£
/**
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDK.h
@@ -231,7 +231,12 @@
 */
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
/// @since 4.16.8
/// å‘Šè­¦å›¾ç‰‡è§£å¯†æ–¹æ³•
/// @param data éœ€è¦è§£å¯†çš„æ•°æ®
/// @param verifyCode è®¾å¤‡éªŒè¯ç  æˆ– å¹³å°è¿”回的checksum
/// @param type 1:设备加密;2:平台加密
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
#pragma mark - V3.2 æ–°å¢žåŠ æŽ¥å£
/**
@@ -814,4 +819,22 @@
                                platFormId:(NSString *)platFormId
                                completion:(void (^)(id records, NSError *error))completion;
#pragma mark - v4.16 å¤šæ–¹éŸ³è§†é¢‘
/// åˆ›å»ºä¼šè®®ä¿¡æ¯
/// @param password è‡ªå®šä¹‰å¯†ç 
/// @param customId å¼€å‘者自定义用户ID
/// @param limit é™åˆ¶æœ€å¤§äººæ•° æœ€å¤§100
/// @param completion operation
+ (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;
/// åŠ å…¥æ–¹èŽ·å–ä¼šè®®ä¿¡æ¯
/// @param roomId  æˆ¿é—´å·
/// @param customId å¼€å‘者自定义用户ID
/// @param completion operation
+ (void)requestCalledMeetingInfo:(NSString *)roomId
                        customId:(NSInteger)customId
                       completion:(void (^)(int32_t roomId, NSString *vtmAddress,NSString *clientid ,NSInteger customId, NSString *controlServerAddress,NSError *error))completion;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZOpenSDKFramework.h
@@ -30,5 +30,5 @@
#include <EZOpenSDKFramework/EZStorageInfo.h>
#include <EZOpenSDKFramework/EZUserInfo.h>
#include <EZOpenSDKFramework/EZVideoQualityInfo.h>
#include <EZOpenSDKFramework/EZVideoTransformer.h>
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZPlayer.h
@@ -95,6 +95,19 @@
 */
- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
/**
 æ’­æ”¾è¿‡ç¨‹ä¸­ å›žè°ƒè§£ç æ•°æ®
 é‡è¦ï¼šè¯¥å›žè°ƒä¼šæ¯”较频繁(一秒若干次),同时直接由播放库线程回调上来,请勿在方法中做耗时操作
 é‡è¦ï¼šå›žè°ƒçš„æ•°æ®çš„内存是由播放库内部分配并管理的,在使用时,请同步处理回调的data;如需异步处理,请拷贝该数据
 @param player æ’­æ”¾å™¨å¯¹è±¡
 @param data æ’­æ”¾åº“解码出的数据
 @param width è§†é¢‘宽度
 @param height è§†é¢‘高度
 */
- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
@end
/// æ­¤ç±»ä¸ºè¤çŸ³æ’­æ”¾å™¨ç±»
@@ -241,6 +254,13 @@
- (BOOL)startVoiceTalk;
/**
 *  å¼€å§‹TTS对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *  é’ˆå¯¹äºŽNVR对讲使用
 *  @return YES/NO
 */
- (BOOL)startVoiceTalkNeedVoiceChannel:(BOOL)needVoiceChannel;
/**
 *  å¼€å§‹Qos对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @return YES/NO
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkParam.h
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Headers/EZVideoTalkSDK.h
@@ -7,112 +7,89 @@
//
#import <UIKit/UIKit.h>
#import "EZVideoTalkParam.h"
#import "EZBAVParam.h"
NS_ASSUME_NONNULL_BEGIN
typedef enum : NSUInteger {
    EZVideoTalkMessageUnkown,
    EZVideoTalkMessageRoomCreated,      //创建房间成功
    EZVideoTalkMessagePeerEnteredRoom,  //目前未使用,用于多方
    EZVideoTalkMessagePeerLeaveRoom,    //目前未使用,用于多方
    EZVideoTalkMessageStartInputData    //链接建立成功,开始推流
} EZVideoTalkMessageType;
typedef NS_OPTIONS(NSUInteger, EZVideoTalkCaptureType) {
    EZVideoTalkCaptureNone = 1 << 0,
    EZVideoTalkCaptureVideo = 1 << 1,
    EZVideoTalkCaptureAudio = 1 << 2,
};
@class EZVideoTalkSDK;
@class EZVideoTalkSDK, EZMediaSessionVideoParam, EZVideoTalkView, EZBAVParam, EZConferenceParam;
@protocol EZVideoTalkSDKDelegate<NSObject>
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedError:(int32_t)errorCode;
- (void)videoTalk:(id)client didReceivedError:(int32_t)errorCode;
/**
 å›žè°ƒæ¶ˆæ¯
 @param client client
 @param messageCode æ¶ˆæ¯ç 
 @param msg é€ä¼ æ¶ˆæ¯
 @param messageCode æ¶ˆæ¯ç  å‚见EZBAVMessage
 @param msg é€ä¼ æ¶ˆæ¯ï¼Œ
    å¦‚果是EZVideoTalkMessagePeerEnteredRoom和EZVideoTalkMessagePeerLeaveRoom消息,msg是{@"clientID":@(9527),@"clientName":@"张三"}
        å¦‚果消息是 EZVideoTalkMessageTransferData msg是 msg是{@"content":@"实际的透传消息"}
 */
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedMessage:(EZVideoTalkMessageType)messageType msg:(NSString*)msg;
/**
 å›žè°ƒæ¶ˆæ¯ bavclient log回调
 @param client client
 @param msg é€ä¼ æ¶ˆæ¯
 */
- (void)videoTalk:(EZVideoTalkSDK *)client didReceivedBavClientLogMsg:(NSString*)msg;
/**
 æ˜¾ç¤ºå›žè°ƒï¼Œé¦–次画面出来以及后续画面尺寸发生变化时回调
 @param client client
 @param width ç”»é¢å®½åº¦
 @param height ç”»é¢é«˜åº¦
 */
- (void)videoTalk:(EZVideoTalkSDK *)clientt didDisplayWidth:(int32_t)width height:(int32_t)height;
/**
 æ’­æ”¾å¡é¡¿
 @param client client
 @param delayTime å¡é¡¿æ—¶é—´
 */
- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTime:(int32_t)delayTime;
/**
 æ’­æ”¾å¡é¡¿ç»Ÿè®¡
 @param client client
 @param delayTimeStat å¡é¡¿æ—¶é—´
 */
- (void)videoTalk:(EZVideoTalkSDK *)client playDelayTimeStatistics:(double)delayTimeStat;
- (void)videoTalk:(id)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
@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 æœ¬åœ°çª—口
 @param remoteWin è¿œç«¯çª—口
 @return è¿”回值
 */
- (instancetype)initWithParam:(EZVideoTalkParam *)param
                  localWindow:(UIView *)localWin
                 remoteWindow:(UIView *)remoteWin;
/// åŠ å…¥çš„æˆ¿é—´å·
- (int32_t)roomID;
/**
 å¼€å§‹åŒå‘音视频对讲,耗时接口,默认 EZVideoTalkCaptureVideo | EZVideoTalkCaptureAudio åŒæ—¶å¼€å¯
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
- (void)start;
@property (nonatomic, assign) BOOL forceToSpeaker;
/**
 å¼€å§‹åŒå‘音视频对讲,耗时接口
 */
- (void)startWithType:(EZVideoTalkCaptureType)type;
/**
 åœæ­¢åŒå‘音视频对讲
 */
- (void)stop;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// å¼€å¯å£°éŸ³ï¼ŒæŽ¥æ”¶åˆ°EZVideoTalkMessageStartInputData消息后调用
/// @param open å¼€å…³çŠ¶æ€
- (int32_t) openSound:(BOOL)open;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @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:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
/// å¼€å…³è¿œç¨‹å£°éŸ³ï¼Œé»˜è®¤å¼€
/// @param open å¼€å¯
- (int32_t)enableRemoteSound:(BOOL)open;
#pragma mark - æ—¥å¿—调试
/**
@@ -139,4 +116,142 @@
@end
@interface EZConfOpenSDK : NSObject
@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
/// åŠ å…¥çš„æˆ¿é—´å·
- (int32_t)roomID;
/// è‡ªå·±çš„clientID
- (int32_t)clientID;
/**
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
@property (nonatomic, assign) BOOL forceToSpeaker;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// åŠ å…¥ä¼šè®®ï¼ˆæ–°æŽ¥å£ï¼‰
/// @param roomId æˆ¿é—´å·
/// @param password å¯†ç 
/// @param customId è‡ªå®šä¹‰çš„customid
- (void)enterRoom:(int32_t)roomId withPassword:(NSString *)password withCustomId:(NSString *)customId;
/// é€€å‡ºä¼šè®®
- (int32_t)leaveRoom;
/// è§£æ•£ä¼šè®®ï¼Œè§£æ•£åŽï¼Œå…¶ä»–与会者会收到会议被解散消息
- (void)dissolveRoom;
/// æœ¬åœ°æ‘„像头开启/关闭接口.
/// @param enable æ˜¯å¦å¼€å¯æ‘„像头
- (NSInteger)enableVideoCapture:(BOOL)enable;
/// æœ¬åœ°éº¦å…‹é£Žå¼€å¯/关闭接口
/// @param enable æ˜¯å¦å¼€å¯éº¦å…‹é£Ž
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableAudioCatpure:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
/// æ˜¯å¦å¼€å¯è¾…流,辅流分辨率更低、码率更小
/// @param enable æ˜¯å¦å¼€å¯
- (NSInteger)enableThumbnailCatpure:(BOOL)enable;
/// æ˜¯å¦å¼€å¯å±å¹•共享
/// @param enable æ˜¯å¦å¼€å¯
/// @param name å¯é€‰çš„分享的名称
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @param localWin çª—口window
- (void)setLocalWindow:(EZVideoTalkView *)localWin;
/// è®¾ç½®è¿œç¨‹çª—口,1.必须在拿到远端客户端加入的消息后设置,2.如果设置非空对象view,必须在主线程调用
/// @param window æ’­æ”¾çª—口
/// @param clientID åŠ å…¥çš„å®¢æˆ·ç«¯çš„ID
/// @param streamType 1视频 2音频 4小流
- (int32_t)setRemoteWindow:(UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
/// è®¾ç½®è§‚看屏幕共享的窗口
/// @param window çª—口
- (int32_t)setWindowForScreenShare:(UIView *)window;
/// åˆ‡æ¢å¯¹è®²æ—¶ä½¿ç”¨çš„æ‘„像头,默认采用前置 åŒæ­¥æŽ¥å£
/// @param backCameraSelected YES:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
#pragma mark - å½•制相关接口
/// å¼€å§‹æˆ¿é—´è§†é¢‘会议录制
/// @param roomId æˆ¿é—´å·
/// @param customId å¼€å‘者自定义用户ID
/// @param recUsers éœ€è¦å½•制的房间参与者id
/// @param projectId äº‘存储项目ID
/// @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 ä¸»æŒäººç”¨æˆ·id(开发者自定义的用户id)
/// @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
Demo/EZOpensdk_iOS_4.15.1_build20201104/DynamicSDK/EZOpenSDKFramework.framework/Info.plist
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/README(¼¯³É±Ø¶Á).txt
New file
@@ -0,0 +1,30 @@
##############  Chinese  ##############
### ç›®å½•
- EZOpenDynamicSDK:动态库SDK。
- EZOpenSDK:静态库SDK,一般开发者使用此SDK即可。
- EZOpenSDKDemo:示例代码工程,打开工程后记得将EZOpenSDK拖入对应位置。
- README.text:集成必读文档,一些说明及注意事项。
- ReleaseNotes.text:发布说明。
### æ³¨æ„äº‹é¡¹
1.如使用海外版本Demo,请将PrefixHeader.pch文件中宏定义设置为1。
2.请务必按照官网的集成步骤来集成。很多开发者反馈集成编译不通过或者程序崩溃,都是因为未看文档或者不按步骤操作导致的。
3.集成SDK时,请确保com.hri.hpc.mobile.ios.player.metallib和openssl库 èµ„源文件已经加入到你的 XCode é¡¹ç›®å·¥ç¨‹ä¸­ï¼Œå¦åˆ™ä¼šå¯¼è‡´ç¨‹åºå´©æºƒã€‚(openssl版本号为1.1.1,如果项目中有其他版本的openssl或者其他三方SDK中内置了其他版本的openssl,可能会在使用某些功能的时候导致程序崩溃,请做好openssl库的适配,或者谨慎升级EZOpenSDK。动态库中已经内置openssl。)
4.优先参照EZOpenSDKDemo中的功能代码,官网中的代码更新可能有延迟或缺失。
##############  English  ##############
### Catalogue
- EZOpenDynamicSDK:Dynamic SDK.
- EZOpenSDK:Static library, general developers can use this SDK.
- EZOpenSDKDemo:Sample code project. After opening the project, remember to drag the EZOpenSDK to the corresponding location.
- README.text:Integration required document, some descriptions and precautions.
- ReleaseNotes.text:Release notes.
### Descriptions and precautions
1.If you are using an overseas version demo, please set the macro definition in the PrefixHeader.pch file to 1.
2.Please follow the integration steps on the official website. Many developers reported that the integration compilation failed or the program crashed because they did not read the document or did not follow the steps.
3.When integrating the SDK, please ensure that the com.hri.hpc.mobile.ios.player.metallib and OpenSSL library resource file has been added to your Xcode project,, otherwise the program will crash.(The OpenSSL version number is 1.1.1. If there are other versions of OpenSSL in the project or other versions of OpenSSL are built in other third-party SDKs, the program may crash when using some functions. Please adapt the OpenSSL library or carefully upgrade the ezopensdk. OpenSSL is already built in the dynamic library.)
4.The function code in ezopensdkdemo is preferred. The code update in the official website may be delayed or missing.
Demo/EZOpensdk_iOS_4.15.1_build20201104/ReleaseNotes.txt
@@ -1,3 +1,32 @@
EZOpenSDK V4.16.8.1 build20211012
 for iOS æ›´æ–°å†…容:
1.性能优化
EZOpenSDK V4.16.8 build20210823
 for iOS æ›´æ–°å†…容:
1.支持对云端加密报警图片的解密
2.支持多人会议(初版),待进一步补全功能和优化接口
3.修复部分崩溃问题
4.修复部分设备SD卡录像无法回放问题
EZOpenSDK V4.16.6 build20210610
 for iOS æ›´æ–°å†…容:
1.预览/回放支持全链路加密,更安全
2.修复内部bugs.
EZOpenSDK V4.16.1 build20210330
 for iOS æ›´æ–°å†…容:
1.支持NVR对讲;
2.支持边缘设备播放;
3.兼容新国标设备;
EZOpenSDK V4.16.0 build20210128
 for iOS æ›´æ–°å†…容:
1.支持三方音视频通话;
2.优化配网流程;
3. ä¿®å¤é¢„览偶现崩溃问题
EZOpenSDK V4.15.0 build20201019
 for iOS æ›´æ–°å†…容:
1.支持Qos对讲;
@@ -162,4 +191,4 @@
13.修改设置布撤防接口setDefence名称,同时使其兼容IPC和非IPC设备的布撤防功能;
14.修改需要validateCode参数相关的接口包括:addDevice、decryptData、setDeviceEncryptStatus等,修改validateCode名称为verifyCode,图片视频加解密接口(setDeviceEncryptStatus)使用设备验证码替代短信验证码,解决短信验证码发送太频繁的问题;
15.拆分EZOpenSDK的常量定义为EZConstants类文件,更加完善EZErrorCode的信息;
16.EZAlarm中的channelNo字段改成cameraNo,作统一。
16.EZAlarm中的channelNo字段改成cameraNo,作统一。
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/com.hri.hpc.mobile.ios.player.metallib
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZConstants.h
@@ -143,9 +143,9 @@
/* WiFi配置设备状态 */
typedef NS_ENUM(NSInteger, EZWifiConfigStatus) {
    DEVICE_WIFI_CONNECTING = 1,   //设备正在连接WiFi
    DEVICE_WIFI_CONNECTED = 2,    //设备连接WiFi成功
    DEVICE_WIFI_CONNECTED = 2,    //设备连接WiFi成功  (已废弃 v4.16.0)
    DEVICE_PLATFORM_REGISTED = 3, //设备注册平台成功
    DEVICE_ACCOUNT_BINDED = 4     //设备已经绑定账户
    DEVICE_ACCOUNT_BINDED = 4     //设备已经绑定账户  (已废弃 v4.16.0)
};
/* è®¾å¤‡ptz命令 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZGlobalSDK.h
@@ -248,6 +248,12 @@
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
/// å‘Šè­¦å›¾ç‰‡è§£å¯†æ–¹æ³•
/// @param data éœ€è¦è§£å¯†çš„æ•°æ®
/// @param verifyCode è®¾å¤‡éªŒè¯ç  æˆ– å¹³å°è¿”回的checksum
/// @param type 1:设备加密;2:平台加密
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
#pragma mark - V3.2 æ–°å¢žåŠ æŽ¥å£
/**
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZOpenSDK.h
@@ -231,7 +231,12 @@
 */
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode;
/// @since 4.16.8
/// å‘Šè­¦å›¾ç‰‡è§£å¯†æ–¹æ³•
/// @param data éœ€è¦è§£å¯†çš„æ•°æ®
/// @param verifyCode è®¾å¤‡éªŒè¯ç  æˆ– å¹³å°è¿”回的checksum
/// @param type 1:设备加密;2:平台加密
+ (NSData *)decryptData:(NSData *)data verifyCode:(NSString *)verifyCode encryptType:(NSInteger)type;
#pragma mark - V3.2 æ–°å¢žåŠ æŽ¥å£
/**
@@ -814,4 +819,22 @@
                                platFormId:(NSString *)platFormId
                                completion:(void (^)(id records, NSError *error))completion;
#pragma mark - v4.16 å¤šæ–¹éŸ³è§†é¢‘
/// åˆ›å»ºä¼šè®®ä¿¡æ¯
/// @param password è‡ªå®šä¹‰å¯†ç 
/// @param customId å¼€å‘者自定义用户ID
/// @param limit é™åˆ¶æœ€å¤§äººæ•° æœ€å¤§100
/// @param completion operation
+ (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;
/// åŠ å…¥æ–¹èŽ·å–ä¼šè®®ä¿¡æ¯
/// @param roomId  æˆ¿é—´å·
/// @param customId å¼€å‘者自定义用户ID
/// @param completion operation
+ (void)requestCalledMeetingInfo:(NSString *)roomId
                        customId:(NSInteger)customId
                       completion:(void (^)(int32_t roomId, NSString *vtmAddress,NSString *clientid ,NSInteger customId, NSString *controlServerAddress,NSError *error))completion;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/EZPlayer.h
@@ -95,6 +95,19 @@
 */
- (void)player:(EZPlayer *)player didReceivedDisplayHeight:(NSInteger)height displayWidth:(NSInteger)width;
/**
 æ’­æ”¾è¿‡ç¨‹ä¸­ å›žè°ƒè§£ç æ•°æ®
 é‡è¦ï¼šè¯¥å›žè°ƒä¼šæ¯”较频繁(一秒若干次),同时直接由播放库线程回调上来,请勿在方法中做耗时操作
 é‡è¦ï¼šå›žè°ƒçš„æ•°æ®çš„内存是由播放库内部分配并管理的,在使用时,请同步处理回调的data;如需异步处理,请拷贝该数据
 @param player æ’­æ”¾å™¨å¯¹è±¡
 @param data æ’­æ”¾åº“解码出的数据
 @param width è§†é¢‘宽度
 @param height è§†é¢‘高度
 */
- (void)player:(EZPlayer *)player didDecodedData:(NSData *)data width:(NSInteger)width height:(NSInteger)height;
@end
/// æ­¤ç±»ä¸ºè¤çŸ³æ’­æ”¾å™¨ç±»
@@ -241,6 +254,13 @@
- (BOOL)startVoiceTalk;
/**
 *  å¼€å§‹TTS对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *  é’ˆå¯¹äºŽNVR对讲使用
 *  @return YES/NO
 */
- (BOOL)startVoiceTalkNeedVoiceChannel:(BOOL)needVoiceChannel;
/**
 *  å¼€å§‹Qos对讲,异步接口,返回值只是表示操作成功,不代表播放成功
 *
 *  @return YES/NO
Demo/EZOpensdk_iOS_4.15.1_build20201104/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作为解密秘钥解密图片
/// å¦‚果是1,表明是设备加密的图片,请使用设备的验证码作为解密秘钥解密图片
/// å¦‚果是0,表明未知的加密信息,请通过上面报警图片URL(alarmPicUrl)中的 isEncrypted å­—段,判断图片是 0:未加密 1:设备加密
/// æŠ¥è­¦å›¾ç‰‡çš„URL示例:
/// 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-萤石和sd卡,6-百度和sd卡
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZDeviceInfo.h
@@ -35,7 +35,7 @@
@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 +47,8 @@
@property (nonatomic) BOOL isSupportMirrorCenter;
/// æ˜¯å¦æ”¯æŒå£°æ³¢é…ç½‘
@property (nonatomic) BOOL isSupportSoundWave;
/// æ˜¯å¦æ”¯æŒå€æ•°å›žæ”¾
@property (nonatomic) BOOL isSupportPlaybackRate;
/// è®¾å¤‡å¤§ç±»
@property (nonatomic,copy) NSString *category;
/// æ·»åŠ æ—¶é—´
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZBAVParam.h
New file
@@ -0,0 +1,143 @@
//
//  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;                                            //必填    åŠ å…¥æ–¹clientId
     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 EZConferenceParam : NSObject
@property (nonatomic, assign) int32_t m_iRoomId; /**<必填    éœ€è¦åŠ å…¥æˆ¿é—´å· */
@property (nonatomic, assign) int32_t m_uClientId; /**< å¿…å¡«    åŠ å…¥æ–¹clientId */
@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;//必填    è§†é¢‘会议必填 ä¼šæŽ§æœåŠ¡ç«¯k口
@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 æ˜¯NPQ,走UDP */
@property (nonatomic, assign) int32_t m_iCltType; /**< å¿…å¡«    å®¢æˆ·ç«¯ç±»åž‹ */
@property (nonatomic, strong) NSString *m_szVcAddr;//必填    è§†é¢‘会议必填 ä¼šæŽ§æœåŠ¡åœ°å€
@property (nonatomic, assign) int32_t m_iVcPort;//必填    è§†é¢‘会议必填 ä¼šæŽ§æœåŠ¡ç«¯k口
@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;/**< é€‰æ‹©  å‚考BAV_QOS_TYPE */
//
//@property (nonatomic, assign) int32_t m_iVideo;/**< é€‰æ‹©  æ˜¯å¦å¼€å¯è§†é¢‘Qos 1 å¼€å¯ 0 ä¸å¼€å¯ */
//
//@property (nonatomic, assign) int32_t m_iAudio;/**< é€‰æ‹©  æ˜¯å¦å¼€å¯éŸ³é¢‘Qos 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;//选填  ä¸‰æ–¹éŸ³è§†é¢‘时,IPC设备需要填写
@property (nonatomic, assign) int32_t m_iDevStreamType;//选填  è®¾å¤‡ä¸»å­ç æµ
@property (nonatomic, strong) NSString *m_szExtensionParas; /**< é€‰æ‹©    æ‰©å±•字段信息 */
@end
/// ä¸Žä¼šè€…信息
@interface EZBAVParticipantsInfo : 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) 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 netState;//网络状态
@end
@interface EZBAVParticipantVolume : NSObject
@property (nonatomic, assign) uint32_t m_uClientId;
@property (nonatomic, assign) uint8_t m_sVolume;    //音量强度0-10 10为最强 0为最弱
@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 EZBAVForcedQuitReasonRepeatJoin;//已在其他地方加入房间
extern int32_t const EZBAVForcedQuitReasonMovedOut;//被管理员移出房间
extern int32_t const EZBAVForcedQuitReasonRoomDissolved;//房间解散
typedef void(^EZAudioOpenResultBlock)(NSInteger ret);
typedef void(^EZScreenShareResultBlock)(NSInteger ret);
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZConferenceClient.h
New file
@@ -0,0 +1,201 @@
//
//  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 "EZMediaSessionDefines.h"
#import "EZVideoTalkView.h"
@class EZConferenceClient;
@class EZMediaSessionVideoParam;
@protocol EZConferenceClientDelegate<NSObject>
/// é”™è¯¯å›žè°ƒ
/// @param client client
/// @param errorCode å‡ºé”™çš„错误码
- (void)bavClient:(EZConferenceClient *)client didReceivedError:(int32_t)errorCode;
/**
 å›žè°ƒæ¶ˆæ¯
 @param client client
 @param messageCode æ¶ˆæ¯ç  å‚见EZBAVMessage
 @param msg é™„加信息,
    å¦‚果是EZBAVMessagePeerEnteredRoom,msg是EZBAVParticipantsInfo对象,但是只有m_uClientId、m_szUserName字段有效
    å¦‚果是EZBAVMessagePeerLeaveRoom消息,msg是EZBAVParticipantsInfo对象,但是只有m_uClientId字段有效
    å¦‚果是EZBAVMessageClientVolume消息,msg是EZBAVParticipantVolume对象
    å¦‚果消息是 EZBAVMessageTransferData msg是 msg是字符串 @"实际的透传消息"
    å¦‚果消息是EZBAVMessageClientAudioAvailable,msg是EZBAVParticipantsInfo对象,但是只有m_uClientId和audioState字段有效
    å¦‚果消息是EZBAVMessageClientVideoAvailable ï¼Œmsg是EZBAVParticipantsInfo对象,但是只有m_uClientId和videoState字段有效
    å¦‚果消息是EZBAVMessageNetworkQuality ï¼Œmsg是EZBAVParticipantsInfo对象,但是只有m_uClientId和netState字段有效
    å¦‚果消息是EZBAVMessageJoinRoomOK ï¼Œmsg是nil
    å¦‚果消息是EZBAVMessageForcedQuit ï¼Œmsg是NSNumber,比如@(EZBAVForcedQuitReasonMovedOut)
 */
- (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;
@end
@interface EZConferenceClient : NSObject
@property (nonatomic, weak) id<EZConferenceClientDelegate> delegate;
@property (nonatomic, assign, readonly) int32_t roomID;
@property (nonatomic, assign, readonly) int32_t clientID;
/**
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
@property (nonatomic, assign) BOOL forceToSpeaker;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// åŠ å…¥ä¼šè®®ï¼ˆæ–°æŽ¥å£ï¼‰
/// @param param å‚æ•°
- (int32_t)enterRoom:(EZConferenceParam *)param;
/// é€€å‡ºä¼šè®®
- (int32_t)leaveRoom;
/// è§£æ•£ä¼šè®®ï¼Œè§£æ•£åŽï¼Œå…¶ä»–与会者会收到会议被解散消息
- (void)dissolveRoom;
/// æœ¬åœ°æ‘„像头开启/关闭接口
/// @param enable æ˜¯å¦å¼€å¯æ‘„像头
- (NSInteger)enableVideoCapture:(BOOL)enable;
/// æœ¬åœ°éº¦å…‹é£Žå¼€å¯/关闭接口
/// @param enable æ˜¯å¦å¼€å¯éº¦å…‹é£Ž
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableAudioCatpure:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
/// æ˜¯å¦å¼€å¯è¾…流,辅流分辨率更低、码率更小
/// @param enable æ˜¯å¦å¼€å¯
- (NSInteger)enableThumbnailCatpure:(BOOL)enable;
/// æ˜¯å¦å¼€å¯å±å¹•共享
/// @param enable æ˜¯å¦å¼€å¯
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @param localWin çª—口window
- (void)setLocalWindow:(EZVideoTalkView *)localWin;
/// è®¢é˜…会场中的某个用户的音视频流
/// @param clientIDs ä¼šåœºä¸­çš„用户
/// @param type  1视频 2音频 4音视频
/// @param subOrUnsub  YES:订阅   NO:取消订阅
//- (int32_t)subscribeStreamOfClients:(NSArray *)clientIDs withStreamType:(NSInteger)type subscribe:(BOOL)subOrUnsub;
/// è®¾ç½®è¿œç¨‹çª—口,1.必须在拿到远端客户端加入的消息后设置,2.如果设置非空对象view,必须在主线程调用(如果是设置成nil,可以不在主线程调用)
/// @param window æ’­æ”¾çª—口
/// @param clientID åŠ å…¥çš„å®¢æˆ·ç«¯çš„ID
/// @param streamType 1视频 2音频 4小流
- (int32_t)setRemoteWindow:(UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
/// è®¾ç½®è§‚看屏幕共享的窗口
/// @param window çª—口
- (int32_t)setWindowForScreenShare:(UIView *)window;
/// é‚€è¯·è®¾å¤‡åŠ å…¥ä¼šè®®
/// @param dev è®¾å¤‡ä¿¡æ¯
- (int32_t)inviteDev:(EZBAVDevInfo *)dev;
#pragma é™„加接口
/// å¼€å…³ä¼šè®®ä¸­æŸä¸ªä¸Žä¼šè€…的声音,默认开
/// @param open YES:开,NO:关
- (int32_t)soundCtrl:(BOOL)open forClient:(int32_t)clientID;
/// åˆ‡æ¢å¯¹è®²æ—¶ä½¿ç”¨çš„æ‘„像头,默认采用前置 åŒæ­¥æŽ¥å£
/// @param backCameraSelected YES:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
/// å¼‚步获取本地抓图
/// @param block æŠ“图成功回调,失败image为nil
//- (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;
/// å‘送透传消息接口,同步接口,可能耗时
/// @param msg æ¶ˆæ¯å†…容,比如json数据
- (int)sendTransferMsg:(NSString *)msg;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSession.h
New file
@@ -0,0 +1,43 @@
//
//  EZMediaSession.h
//  H264 Encode and Decode
//
//  Created by kanhaiping on 2018/6/21.
//  Copyright Â© 2018å¹´ AJB. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "EZMediaSessionDefines.h"
@class UIImage;
@class EZMediaSession;
@class EZMediaSessionVideoParam;
@protocol EZMediaSessionDelegate <NSObject>
- (void)mediaSession:(EZMediaSession *)session didReceivedEncodedData:(NSData *)mediaData pts:(int64_t)ptsInMS type:(EZMediaCaptureSessionType)type;
- (void)mediaSession:(EZMediaSession *)session didReceivedError:(NSInteger)error;
@end
@interface EZMediaSession : NSObject
@property (nonatomic, weak) id displayLayer;//可选的预览视图,请传入AVSampleBufferDisplayLayer
@property (nonatomic, assign, readonly) BOOL isAudioEnabled;
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam delegate:(id<EZMediaSessionDelegate>)delegate;
- (NSInteger)enableVideoCapture:(BOOL)enable;
- (NSInteger)enableAudioCatpure:(BOOL)enable;
- (NSInteger)enableThumbnailCatpure:(BOOL)enable;
- (NSInteger)enableScreenShareCapture:(BOOL)enable;
- (void)selectBackCamera:(BOOL)backCameraSelected;
- (NSInteger)startEncoding;
- (NSInteger)setMaxBPS:(int)maxBPS;
- (void)forceNextKeyFrame;
- (NSInteger)stop;
- (void)localScreenShotWithBlock:(void (^)(UIImage *image))block;
- (BOOL) startLocalRecord:(NSString*)path;
- (BOOL) stopLocalRecord;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSessionDefines.h
New file
@@ -0,0 +1,95 @@
//
//  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 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, EZAudioAACEncoderError) {
    EZAudioAACEncoderErrorUnknown = EZMediaSessionErrorBaseAudioEncode,
    EZAudioAACEncoderErrorFailToInitConverter = 30100,
    EZAudioAACEncoderErrorFailToGetDataBuffer,
    EZAudioAACEncoderErrorFailToEncodeBuffer,
};
typedef NS_ENUM(NSUInteger, EZVideoH264EncoderError) {
    EZVideoH264EncoderErrorUnknown = EZMediaSessionErrorBaseVideoEncode,
    EZVideoH264EncoderErrorInitFailed = 40100,
    EZVideoH264EncoderErrorInvalidSample,
    EZVideoH264EncoderErrorSampleNotReady,
    EZVideoH264EncoderErrorNotRunning,
    EZVideoH264EncoderErrorSetMaxBPSFailed,
    EZVideoH264EncoderErrorSetAverageBPSFailed,
    EZVideoH264EncoderErrorEncodeFailed = 40200,
};
typedef NS_ENUM(NSUInteger, EZBAVStreamClientError) {
    EZBAVStreamClientErrorUnknow = EZMediaSessionErrorBaseStreamClient,
    EZBAVStreamClientErrorAudioEnableNotAllowed = EZMediaSessionErrorBaseStreamClient + 9000,
    EZBAVStreamClientErrorShareEnableNotAllowed,
};
@interface EZMediaSessionDefines : NSObject
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZMediaSessionVideoParam.h
New file
@@ -0,0 +1,32 @@
//
//  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 EZMediaSessionVideoParam : NSObject
/// æ‘„像头采集采集画面的默认设置,比如AVCaptureSessionPreset1280x720
@property (nonatomic, strong) AVCaptureSessionPreset resolutionPreset;
/// æœ€ç»ˆè¾“出的画面的宽
@property (nonatomic, assign) NSInteger pixelWidth;
/// æœ€ç»ˆè¾“出的画面的高
@property (nonatomic, assign) NSInteger pixelHeigth;
/// ä¼ å…¥ AVCaptureVideoOrientation,默认竖屏
@property (nonatomic, assign) NSInteger videoOrientation;
/// I帧间隔 é»˜è®¤4秒
@property (nonatomic, assign) NSInteger encodeKeyFrameInterval;
+ (EZMediaSessionVideoParam *)screenShareParam;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalk.h
New file
@@ -0,0 +1,178 @@
//
//  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 "EZMediaSessionDefines.h"
#import "EZVideoTalkView.h"
@class EZVideoTalk;
@class EZMediaSessionVideoParam;
@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 é™„加信息,
    å¦‚果是EZBAVMessagePeerEnteredRoom、EZBAVMessagePeerLeaveRoom消息,msg是EZBAVParticipantsInfo对象
    å¦‚果消息是 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:param role=1 reason=0 roomid=收到的roomid æŽ¥å¬å®Œé€šè¯ä¸­æŒ‚断调用stop
/// B.如果主动拒接 è°ƒç”¨ start:param role=2 reason=101 roomid=收到的roomid æ‹’接完成后立马调用stop
/// C.如果无人接听 è°ƒç”¨ start:param role=2 reason=102 roomid=收到的roomid å®ŒæˆåŽç«‹é©¬è°ƒç”¨stop
@interface EZVideoTalk : NSObject
@property (nonatomic, weak) id<EZVideoTalkDelegate> delegate;
@property (nonatomic, assign, readonly) int32_t roomID;
/**
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
@property (nonatomic, assign) BOOL forceToSpeaker;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @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;
#pragma é™„加接口
/// åˆ‡æ¢å¯¹è®²æ—¶ä½¿ç”¨çš„æ‘„像头,默认采用前置 åŒæ­¥æŽ¥å£
/// @param backCameraSelected YES:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
/// å¼€å…³è¿œç¨‹å£°éŸ³ï¼Œé»˜è®¤å¼€
/// @param open å¼€å¯
- (int32_t)enableRemoteSound:(BOOL)open;
/// å¼‚步获取本地抓图
/// @param block æŠ“图成功回调,失败image为nil
//- (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;
/// å‘送透传消息接口,同步接口,可能耗时
/// @param msg æ¶ˆæ¯å†…容,比如json数据
- (int)sendTransferMsg:(NSString *)msg;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkGlobal.h
New file
@@ -0,0 +1,37 @@
//
//  EZVideoTalkGlobal.h
//  EZVideoTalk
//
//  Created by yuqian on 2018/9/12.
//  Copyright Â© 2018å¹´ hikvision. All rights reserved.
//
#import <Foundation/Foundation.h>
@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;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkSDK.h
New file
@@ -0,0 +1,257 @@
//
//  EZVideoTalkSDK.h
//  EZOpenSDK
//
//  Created by yuqian on 2020/3/14.
//  Copyright Â© 2020 Hikvision. All rights reserved.
//
#import <UIKit/UIKit.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 é€ä¼ æ¶ˆæ¯ï¼Œ
    å¦‚果是EZVideoTalkMessagePeerEnteredRoom和EZVideoTalkMessagePeerLeaveRoom消息,msg是{@"clientID":@(9527),@"clientName":@"张三"}
        å¦‚果消息是 EZVideoTalkMessageTransferData msg是 msg是{@"content":@"实际的透传消息"}
 */
- (void)videoTalk:(id)client didReceivedMessage:(int32_t)messageCode msg:(id)msg;
@end
@interface EZVideoTalkSDK : NSObject
@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
/// åŠ å…¥çš„æˆ¿é—´å·
- (int32_t)roomID;
/**
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
@property (nonatomic, assign) BOOL forceToSpeaker;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @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:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
/// å¼€å…³è¿œç¨‹å£°éŸ³ï¼Œé»˜è®¤å¼€
/// @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 EZConfOpenSDK : NSObject
@property (nonatomic, weak) id<EZVideoTalkSDKDelegate> delegate;
/// åŠ å…¥çš„æˆ¿é—´å·
- (int32_t)roomID;
/// è‡ªå·±çš„clientID
- (int32_t)clientID;
/**
 å¯¹è®²æ—¶ï¼Œå¼ºåˆ¶é‡‡ç”¨æ‰¬å£°å™¨æ’­æ”¾å£°éŸ³ï¼Œé»˜è®¤ä¸ºYES
 */
@property (nonatomic, assign) BOOL forceToSpeaker;
/// åˆå§‹åŒ–视频通话SDK对象
/// @param videoParam è§†é¢‘通话中视频的参数
- (instancetype)initWithVideoParam:(EZMediaSessionVideoParam *)videoParam;
/// åŠ å…¥ä¼šè®®ï¼ˆæ–°æŽ¥å£ï¼‰
/// @param roomId æˆ¿é—´å·
/// @param password å¯†ç 
/// @param customId è‡ªå®šä¹‰çš„customid
- (void)enterRoom:(int32_t)roomId withPassword:(NSString *)password withCustomId:(NSString *)customId;
/// é€€å‡ºä¼šè®®
- (int32_t)leaveRoom;
/// è§£æ•£ä¼šè®®ï¼Œè§£æ•£åŽï¼Œå…¶ä»–与会者会收到会议被解散消息
- (void)dissolveRoom;
/// æœ¬åœ°æ‘„像头开启/关闭接口.
/// @param enable æ˜¯å¦å¼€å¯æ‘„像头
- (NSInteger)enableVideoCapture:(BOOL)enable;
/// æœ¬åœ°éº¦å…‹é£Žå¼€å¯/关闭接口
/// @param enable æ˜¯å¦å¼€å¯éº¦å…‹é£Ž
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableAudioCatpure:(BOOL)enable withResultBlock:(EZAudioOpenResultBlock)block;
/// æ˜¯å¦å¼€å¯è¾…流,辅流分辨率更低、码率更小
/// @param enable æ˜¯å¦å¼€å¯
- (NSInteger)enableThumbnailCatpure:(BOOL)enable;
/// æ˜¯å¦å¼€å¯å±å¹•共享
/// @param enable æ˜¯å¦å¼€å¯
/// @param name å¯é€‰çš„分享的名称
/// @param block ä¸»çº¿ç¨‹å›žè°ƒç»“æžœ
- (void)enableScreenShare:(BOOL)enable andName:(NSString *)name withResultBlock:(EZScreenShareResultBlock)block;
/// è®¾ç½®æœ¬åœ°çš„预览窗口
/// @param localWin çª—口window
- (void)setLocalWindow:(EZVideoTalkView *)localWin;
/// è®¾ç½®è¿œç¨‹çª—口,1.必须在拿到远端客户端加入的消息后设置,2.如果设置非空对象view,必须在主线程调用
/// @param window æ’­æ”¾çª—口
/// @param clientID åŠ å…¥çš„å®¢æˆ·ç«¯çš„ID
/// @param streamType 1视频 2音频 4小流
- (int32_t)setRemoteWindow:(UIView *)window ofClient:(int32_t)clientID withStream:(NSInteger)streamType;
/// è®¾ç½®è§‚看屏幕共享的窗口
/// @param window çª—口
- (int32_t)setWindowForScreenShare:(UIView *)window;
/// åˆ‡æ¢å¯¹è®²æ—¶ä½¿ç”¨çš„æ‘„像头,默认采用前置 åŒæ­¥æŽ¥å£
/// @param backCameraSelected YES:选择后置,NO:选择前置
- (int32_t)switchCamera:(BOOL)backCameraSelected;
#pragma mark - å½•制相关接口
/// å¼€å§‹æˆ¿é—´è§†é¢‘会议录制
/// @param roomId æˆ¿é—´å·
/// @param customId å¼€å‘者自定义用户ID
/// @param recUsers éœ€è¦å½•制的房间参与者id
/// @param projectId äº‘存储项目ID
/// @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 ä¸»æŒäººç”¨æˆ·id(开发者自定义的用户id)
/// @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
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkSDKDefines.h
New file
@@ -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
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalk/EZVideoTalkView.h
New file
@@ -0,0 +1,18 @@
//
//  EZVideoTalkView.h
//  EZVideoTalk
//
//  Created by Harper Kan on 2020/12/5.
//  Copyright Â© 2020 hikvision. All rights reserved.
//
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface EZVideoTalkView : UIView
- (AVSampleBufferDisplayLayer *)videoLayer;
@end
NS_ASSUME_NONNULL_END
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalkParam.h
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/include/modules/EZVideoTalkSDK.h
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/libEZOpenSDK.a
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/openssl/libcrypto.a
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/SDK/openssl/libssl.a
Binary files differ
EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
Binary files differ
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.4.5")]
[assembly: AssemblyVersion("1.5.1")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
EZSDK/EZSDK.xcodeproj/xcshareddata/xcschemes/EZSDK.xcscheme
@@ -58,7 +58,7 @@
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
      buildConfiguration = "Release">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
EZSDK/EZSDK/EZ/PrefixHeader.pch
New file
@@ -0,0 +1,30 @@
//
//  PrefixHeader.pch
//  EZOpenSDKDemo
//
//  Created by linyong on 16/10/26.
//  Copyright Â© 2016å¹´ Ezviz. All rights reserved.
//
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#define DEMO_ONLINE //线上服务器
//#import "Macros.h"
//#import "UIView+EZExtension.h"
#import "UIView+Toast.h"
//#import "JXTAlertController.h"
//#import "NSDate+DateTools.h"
#import "Masonry.h"
#import "DDKit.h"
#import "EZOpenSDK.h"
#import "EZGlobalSDK.h"
#import "GlobalKit.h"
#import "EZHttpUtil.h"
#import "EZSDK.h"
#endif /* PrefixHeader_pch */
EZSDK/EZSDK/EZ/UIViewControllers/EZAPWiFiConfigViewController.m
@@ -244,8 +244,13 @@
{
    NSString *ssid = [self currentSsid];
    
    if (ssid && [ssid isEqualToString:self.devicWifiName])
    {
//    if (ssid && [ssid isEqualToString:self.devicWifiName])
//    {
//        return YES;
//    }
    //2021-10-19 åˆ¤æ–­æ¡ä»¶ï¼Œæ”¹ä¸ºåªåŒ¹é…åŽé¢åºåˆ—号字段
    if(ssid && [ssid hasSuffix:[GlobalKit shareKit].deviceSerialNo]){//字符串末尾有序列号字符
        return YES;
    }
    
EZSDK/EZSDK/EZ/UIViewControllers/EZAddByQRCodeViewController.m
@@ -234,6 +234,8 @@
- (void)checkQRCode:(NSString *)strQRcode
{
    strQRcode = [strQRcode stringByReplacingOccurrencesOfString:@"\r\n" withString:@"\r"];//2021-10-19 è§£å†³éƒ¨åˆ†çŒ«çœ¼è®¾å¤‡å±å¹•显示的二维码,参数之间出现空行导致分割取错字段问题
    NSArray *arrString = [strQRcode componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    
    if(arrString.count >=3)