Android   (版本:2.0.171211)
  • 功能更新:
  • 1.增加扫描二维码添加一点通盒子下设备功能以及相关界面。
    2.开放一点通添加盒子下设备接口。
    3.注销demo内开发者信息,各位开发者请在使用demo之前向相关人员提供邮箱以便获取唯一开发者信息。


Android   (版本:1.0.170419)
  • 功能更新:
  • Demo中增加了流媒体登录:loginSms(String address, int nPort, String serialNo, int nChannelCount)


Android   (版本:1.0.160524)
  • 功能更新:
  • 初始版本
IOS   (版本:2.0.171211)
  • 功能更新:
  • 1.增加扫描二维码添加一点通盒子下设备功能以及相关界面。
    2.开放一点通添加盒子下设备接口。
    3.注销demo内开发者信息,各位开发者请在使用demo之前向相关人员提供邮箱以便获取唯一开发者信息。


IOS   (版本:1.0.170622)
  • 功能更新:
  • 初始版本

SDK功能:

1.  一点通账号的注册、找回密码、登录和注销,以及账号下的设备管理,包括添加、删除等功能。

2.  和监控设备的网络通信,如登录设备,设备相关参数的获取和修改,查询录像文件以及请求实时预览和录像文件的视频数据等。

3.  视频解码和显示,音频解码和播放

SDK说明文档(android版)

1.开发前准备

1.1. 开发环境:Android Studio

1.2. 打开工程,选择File --> New --> Import Module

1.3. 选择ydtlibrary的路径

1.4. 添加对ydtlibrary模块的依赖。

例如app要依赖ydtlibrary,则在app处右键选择Open Module Settings在弹出的界面中选择app --> Dependencies --> + --> Module dependency 选择:ydtlibrary

1.5. 配置路径

打开app模块目录下的build.gradle,在增加如下代码:

repositories {

flatDir {

dirs '../ydtlibrary/libs'

}

}

2.SDK功能:

2.1. 一点通账号的注册、找回密码、登录和注销,以及账号下的设备管理,包括添加、删除等功能。

2.2. 和监控设备的网络通信,如登录设备,设备相关参数的获取和修改,查询录像文件以及请求实时预览和录像文件的视频数据等。

2.3. 视频解码和显示,音频解码和播放

3.说明

所有YdtNetSDK和HBNetCtrl的接口,若无特殊说明,均应在子线程中调用。

4.初始化一点通库

//初始化一点通库

YdtNetSDK ydtSdk= new YdtNetSDK();

ydtNetSdk.init(DeveloperId, AppId, AppKey, imei);

说明:DeveloperId:开发者Id,通过开发者平台申请。

AppId:应用Id,通过开发者平台申请。

AppKey:每个应用对应一个AppKey,在开发者平台可查看。

Imei:移动设备的唯一标识。

5.账号管理

5.1. 调用流程

5.2. 账号注册并登录

YdtCheckCodeInfo info = ydtSdk.getMessageCheckCode(address, language);

YdtUserInfo userInfo = ydtSdk.registerCheckAndLogin(mSendtoAddr, mAuthCode, pushId);

ydtSdk.setPassword( passWord );

说明:address :手机号或邮箱。

Language:验证码的语言(当前系统语言),zh_CN代表中文,en_US代表英文。

mSendtoAddr:输入的手机号或邮箱。

mAuthCode:获取到的验证码。

pushId:推送Id,使用友盟推送时,该值为友盟返回的DeviceToken,不使用推送时,可以传空字符串。

userInfo.nErrorCode为0时,表明验证码认证成功。

5.3. 找回密码并登录

YdtCheckCodeInfo info = ydtSdk.getMessageCheckCode(address, language);

YdtUserInfo userInfo = ydtSdk.findPassowrdCheckAndLogin(mSendtoAddr, mAuthCode );

ydtSdk.setPassword( passWord );

说明:参考账号注册并登录。

5.4. 一点通账号登录

YdtUserInfo ydtUserInfo = ydtSdk.loginByYdtAccount(userName, passWord, pushId);

说明:当ydtUserInfo.nErrorCode==0时,表示登录成功。

5.5. 获取账号信息、修改密码

YdtUserInfo userInfo = ydtSdk.getAccountInfo();

说明:登录成功后可通过 ydtUserInfo的其他参数查看用户信息;否则,ydtUserInfo的其他参数无效。

5.6. 第三方账号登录

YdtUserInfo loginYdtByQQ(String nickName, String openId, String pushId);

YdtUserInfo loginYdtByWeiXin(String nickName, String openId, String pushId);

YdtUserInfo loginYdtByWeiBo(String nickName, String openId, String pushId);

说明:nickName - QQ昵称

openId:QQ或微信或微博的openId。

pushId:推送Id,使用友盟推送时,该值为友盟返回的DeviceToken,不使用推送时,可以传空字符串。

YdtUserInfo.nErrorCode == 0表示登录成功,此时YdtUserInfo的其他变量才有效,非0表示失败原因。

5.7. 账号注销

ydtSdk.logoutYdt();

6.账号下的设备管理

6.1. 调用流程

6.2. 获取账户下设备和指定设备信息

YdtDeviceInfo ydtDeviceInfo = ydtSdk.getDevicesBelongsToAccount();

6.3. 通过序列号添加设备

YdtDeviceInfo curDevInfo = ydtNetSDK.addDeviceBySN(deviceId, deviceName, deviceUser,devicePsw,channelCount);

说明:devId:设备ID,通过getDevicesBelongsToAccount()或getSpecifiedDeviceWithoutLogin( deviceSn )可得到该参数,该参数是不可修改的;

devName:设备名。

devUser:设备的用户名。

devPsw:设备的密码。

YdtDeviceInfo.errorCode == 0表示成功,此时YdtDeviceInfo信息中的deviceList只有一个元素,且只有地理位置信息有效。

添加设备之前,建议先校验设备的连通性和设备用户名、密码的正确性。

6.4. 通过IP添加设备

//首先登录设备,以便获取设备的序列号

hbNetCtrl.login(user, password, domain, port, callback);

ydtNetSDK.addDeviceBySN(deviceId, deviceName, deviceUser, devicePsw, channelCount);

说明:获取设备信息失败,无法继续添加。

添加设备之前,建议先校验设备的连通性和设备用户名、密码的正确性。

6.5. 通过域名添加设备

//首先登录设备,以便获取设备的序列号

hbNetCtrl.login(user, password, domain, port, callback);

ydtNetSDK.addDeviceByDomain(deviceSn, deviceName, deviceUser, devicePsw, deviceDomain, domainPort, channelCount);

说明:nDomainPort:域名的映射端口,1~65535。

使用的YdtNetSDK对象,必须跟登录帐户使用的是同一个。

获取设备信息失败,无法继续添加。

添加设备之前,建议先校验设备的连通性和设备用户名、密码的正确性。

6.6. 设备删除

ydtSdk.deleteDevice( deviceId );

7.设备管理

7.1. 调用流程

7.2. 登录设备

HBNetCtrl hbNetCtrl = new HBNetCtrl();

hbNetCtrl.loginVveye(deviceUser,devicePsw, vveyeId, vveyeRemortPort, callback);

说明:vveyeId和vveyeRemortPort可通过ydtSdk.getSpecifiedDeviceWithoutLogin或ydtSdk.getDevicesBelongsToAccount()接口得到,当YdtDeviceParam.devNetType==”VV”时,vveyeId = YdtDeviceParam.devVNIp,vveyeRemortPort = YdtDeviceParam.devVNPort。

7.3. 域名或IP登录

hbNetCtrl.login(userr ,password, domain, port, callback);

7.4. 获取设备参数

deviceSn = hbNetCtrl.getSerialNo();

deviceName = hbNetCtrl.getDeviceName();

channelCount = hbNetCtrl.getChannelCount();

说明:获取设备信息失败,无法继续添加。

添加设备之前,建议先校验设备的连通性和设备用户名、密码的正确性。

7.5. 注销设备

hbNetCtrl.logout();

8.实时预览

8.1. 调用流程

8.2. 获取监控设备的预览数据并解码显示

hbNetCtrl.startPreview( channelIndex, streamType, previewCallback );


//开启预览数据回调:

NetDataCallback previewCallback = new BaseNetControl.NetDataCallback()

{

public void onNetData( DataType type, byte[] data, int nOffset, int nValidLength, long nTimeStamp )

{

if ( mPlayer.openStream( data, nOffset, nValidLength ) )

{

mPlayer.setPlaySurfaceView( videoView );

mPlayer.play();

}

mPlayer.inputData( data, nOffset, nValidLength );

}

}

说明:mChannelIndex:通道号,从0开始。

streamType为码流类型, 0 - 主码流, 1 - 子码流。

type - 数据类型,暂时保留。

nOffset - 数据缓冲区偏移量。

nValidLength - 有效数据长度。

nTimeStamp - 时间戳,暂时保留。

8.3. 关闭预览并停止解码

hbNetCtrl.stopPreview(channelIndex);

mPlayer.closeStream();

9.录像回放

9.1. 调用流程

9.2. 查询设备的录像文件

final List recordFileParams = mSelectDevice.hbNetCtrl.findRecordFile( mChannelIndex, mPlayType, beginTime);

说明:beginTime:long型时间戳,将要查看哪天的文件。

mPlayType:录像类型 此处为全部录像:0XFF

9.3. 回放获取指定通道的录像数据

hbNetCtrl.startPlayback( mChannelIndex, startTime, stopTime, callback );

hbNetCtrl.getPlaybackData( mChannelIndex, REQUEST_LARGE_DATA );


BaseNetControl.NetDataCallback callback = new BaseNetControl.NetDataCallback()

{

public void onNetData( DataType type, byte[] data, int nOffset,int nValidLength, long nTimeStamp )

{

......

mPlayer.setPlaySurfaceView( videoView );


//注册缓冲区状态回调

mPlayer.setOnBufferStateListener( new PlaySDK.OnBufferStateListener()

{

public void onBufferStateAlmostChange( PlaySDK player, boolean almostEmpty )

{

......

}

public void onBufferStateAlmostChange( PlaySDK player, boolean almostEmpty )

{

}

}


//设置缓冲模式:流畅性优先

mPlayer.setBufferMode( PlaySDK.PLAY_BUFFER_MODE_FLUENCY );

mPlayer.play();

}

mPlayer.inputData( data, nOffset, nValidLength );

};

说明:startTime:long型起始时间

stopTime:long型结束时间

type:数据类型。

data:数据源。

nOffset:数据源的偏移量,从数据源nOffset位置开始是有效数据。

nValidLength:有效数据长度。

接口使用:首先调用startPlayback发送回放请求,如果返回result==0则调用 getPlaybackData获取回放数据;此处需要开启定时器获取回放数据(具体参照demo)

9.4. 关闭回放并停止解码

hbNetCtrl.stopPlayback(channelIndex);

mPlayer.closeStream();

10.报警

10.1. 调用流程

10.2 绑定设备报警

mYdtNetSDK.bindDeviceAlarm( mDeviceSn, DEVICE_PASSWORD, SHARE_TYPE, BIND_FLAG );

说明:mDeviceSn:设备序列号

DEVICE_PASSWORD:设备密码

SHARE_TYPE:设备分享类型 0-自有设备,1-分享给该用户的设备,2-公共设

BIND_FLAG:绑定标识,1-绑定,0-解绑,-1禁止设备报警上传。

10.3. 获取监控设备的报警信息。

AlarmInformation alarmInf = mYdtNetSDK.getAlarmList(mDeviceSn, beginTime, endTime, mStartNo, mCount );

AlarmInformation information = mYdtNetSDK.getSingleAlarmInfo( alarmId );

说明:传入起始时间结束时间,获取该时间段内的报警信息,采用分段获取,传入起始位置和获取条数,一次获取完毕后,改变起始位置再次获取,依次循环;当获取的条数小于指定获取条数时获取完毕。(获取多条报警信息接口的使用)

mDeviceSn:设备序列号

beginTime:报警起始时间

endTime:报警结束时间

mStartNo:起始位置

mCount:循环一次获取的条数

alarmId:报警id,设备报警会推送给终端,(开发者需要使用推送服务)

11.错误信息

使用SDK过程中,所有接口返回的错误码,可通过以下接口获取对应的错误信息。

YdtSdkError.getErrorMessage

NetSdkError.getErrorMessage

SDK说明文档(IOS版)

1.开发前准备

1.1. 在新发布的iOS9系统上围绕用户数据的安全性和体验新增了一些安全特性,同时也影响了应用的实现以及集成方式,为了保证良好的稳定性和体验,需要做如下处理:

1.2. 在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads并设置为YES,指定所有HTTP连接都可正常请求

<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>

1.3. 配置

SDK采用ARC管理内存,如遇问题,请联系我们如果您使用了-all_load,可能需要添加libz的库,SDK中需要添加的库文件:libstdc++.tbd、libiconv.tbd,添加方式如下:

TARGETS-->Build Phases-->Link Binary With Libraries--> + -->libz.tbd等 。

特别注意:如项目中使用包含诸如ffmpeg的开源库,因而导致的库之间的冲突,此为开发中常见情况,请根据下面链接,做相应处理: http://www.cnblogs.com/wengzilin/p/3800856.html

说明:SDK支持iOS 7.0+

2.SDK功能:

2.1. 一点通账号的注册、找回密码、登录和注销,以及账号下的设备管理,包括添加、删除等功能。

2.2. 和监控设备的网络通信,如登录设备,设备相关参数的获取和修改,查询录像文件以及请求实时预览和录像文件的视频数据等。

2.3. 视频解码和显示,音频解码和播放。

3.说明

3.1 所有YdtNetSDK和HBNetCtrl的接口,若无特殊说明,均应在子线程中调用。

3.2. 文档中出现的[AccountManager sharedManager].ydtNetSdk,为demo中对ydtNetSdk进行单次实例化。

4.初始化一点通库

YdtNetSdk *ydtNetSdk = [[YdtNetSdk alloc] init];

[ydtNetSdk initWithDeveloperId:DeveloperID appId:AppID appKey:AppKey imei:deviceId];

说明:YdtNetSdk中参数需全局使用,开发者在应用中

DeveloperID:开发者Id,通过开发者平台申请。

AppID:应用Id,通过开发者平台申请。

AppKey:每个应用对应一个AppKey,在开发者平台可查看。

deviceId:所持有设备的唯一标示,建议使用UUID。

5.账号管理

5.1. 调用流程

5.2. 账号注册并登录

// 注册前可先判断账号已注册(根据项目需求自行决定)

[[AccountManager sharedManager].ydtNetSdk
getAccountInfoWithName:(NSString *)accountName completionHandler:^(YdtUserInfo * userInfo) {

//userInfo.errorCode为0时,表示获取用户信息成功,用于判断该用户是否已注册。

}];


//获取验证码

[[AccountManager sharedManager].ydtNetSdk getVerificationCodeWithAddress:(NSString *)address language:(NSString *)language completionHandler:^(YdtVervificationCodeInfo *codeInfo) {

//codeInfo.errorCode == 0,表示验证码发送成功。

}];


[[AccountManager sharedManager].ydtNetSdk registerAndLoginWithAddress:(NSString *)address verificationCode:(NSString *)verificationCode pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

// userInfo.errorCode == 0,表示未设置密码的状态下用户注册成功。

}];


[[AccountManager sharedManager].ydtNetSdk setAccountPassword:(NSString *)password completionHandler:^(int result) {

// result == 0,表示密码设置成功,此时可以正常登录。

}];

说明:accountName :手机号或邮箱。

address:验证码所要发送到的地址(用户注册时的手机号或邮箱)。

verifocationCode:获取到的验证码。

language:验证码提示信息的语言类型,需转换成zh_CN(中文)和en_US(英文)。

password:用户密码。

pushId:为注册推送时,返回的devicetoken此参数作用为提醒异地登录。

5.3. 找回密码并登录

// 调用此接口,对账户是否存在进行检验

[[AccountManager sharedManager].ydtNetSdk getVerificationCodeWithAddress:(NSString*)address language:(NSString *)language completionHandler:^(YdtVervificationCodeInfo *codeInfo) {

// userInfo.errorCode为0时,表示获取用户信息成功,用户存在可进行密码修改。

}];


[[AccountManager sharedManager].ydtNetSdk findPasswordAndLoginWithName:(NSString *)name verificationCode:(NSString *)verificationCode pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

//通知服务器,需要进行密码找回,当userInfo.errorCode == 0时,设置其他参数才有效。

}];


[[AccountManager sharedManager].ydtNetSdk setAccountPassword:(NSString *)password completionHandler:^(int result) {

// result == 0,表示修改密码成功。

}];

说明:name: 输入的手机号或邮箱号。

verifocationCode:获取到的验证码。

password:设置的用户密码。

5.4. 一点通账号登录

[[AccountManager sharedManager].ydtNetSdk loginYdtWithName:(NSString *)name password:(NSString *)password pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

}];

说明:当userInfo.errorCode==0时,表示登录成功,此时,可通过 userInfo的其他参数查看用户信息;否则,userInfo的其他参数无效。

5.5. 第三方账号登录

//QQ登录

[[AccountManager sharedManager].ydtNetSdk loginYdtByQQWithNickname:(NSString *)nickName openId:(NSString *)openId pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

}];


//微博登录

[[AccountManager sharedManager].ydtNetSdk loginYdtByWeiBoWithNickname:(NSString *)nickName openId:(NSString *)openId pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

}];


//微信登录

[[AccountManager sharedManager].ydtNetSdk loginYdtByWeiXinWithNickname:(NSString *)nickName openId:(NSString *)openId pushId:pushID completionHandler:^(YdtUserInfo *userInfo) {

}];

5.6. 账号注销

[[AccountManager sharedManager].ydtNetCtrl logoutWithBlock:^(int result) {

}];

说明:result = 0,表示注销成功。

6.账号下的设备管理

6.1. 调用流程

6.2. 获取账户下设备和指定设备信息

//获取账户下设备

[[AccountManager sharedManager].ydtNetSdk getDevicesBelongsToAccountWithCompletionHandler:^(YdtDeviceInfo *deviceInfo) {

// deviceInfo.errorCode == 0时,表示获取账户下设备成功,此时deviceInfo.deviceAray才有效。

}];


//次接口为获取指定设备信息,可为设备添加前,先通过该接口获取设备绑定状态,非绑定状态返回设备信息将用于设备添加。

[[AccountManager sharedManager].ydtNetSdk getSpecifiedDeviceWithoutLoginWithDeviceSn:(NSString *)deviceSn completionHandler:^(YdtDeviceInfo *deviceInfo) {

// deviceInfo.errorCode == 0时,获取指定设备信息成功。

}];

说明:deviceSn:设备序列号。

6.3. 设备登录

Long result = HB_NET_Login(char* sDevIP,

WORD wDevPort,

char* sUserName,

char* sPassword,

LPHB_NET_DEVICEINFO lpDeviceInfo,

PHB_NET_DATA_PROC pfnCallback,

void* pContext);

说明:此步骤在添加设备时,无需一定调用。以下是参数调用--

sDevIP:设备域名

vDevPort:设备域名映射端口号。

sUserName:设备用户名。

sPassword:设备密码。

lpDeviceInfo:HB_NET_DEVICEINFO类型的结构体,存放设备相关参数信息。

pfnCallback:设备断线回调,其中可以对设备进行重连操作。

6.4. 通过序列号添加设备

[[AccountManager sharedManager].ydtNetSdk addDeviceBySnWithDeviceId:(NSString *)deviceId deviceName:(NSString *)deviceName deviceUser:(NSString *)deviceUser devicePassword:(NSString *)devicePassword channelCount:(int)channelCount completionHandler:^(YdtDeviceInfo *deviceInfo) {

}];

说明:deviceId:设备ID,通过获取账户下的设备信息或者获取指定设备信息可得到该参数,该参数是只读的;

deviceName:设备名。

deviceUser:设备的用户名。

devicePassword:设备的密码。

channelCount:设备的通道数。

添加设备之前,建议先校验设备的连通性和设备用户名、密码的正确性。

6.5. 通过局域网IP添加设备

//首先登录设备调用登录接口,以便获取设备的相关信息,此类中需添加HBNetSDK.h头文件

[[AccountManager sharedManager].ydtNetSdk addDeviceBySnWithDeviceId:(NSString *)deviceId deviceName:(NSString *)deviceName deviceUser:(NSString *)deviceUser devicePassword:(NSString *)devicePassword channelCount:(int)channelCount completionHandler:^(YdtDeviceInfo *deviceInfo) {

}];

说明:获取设备信息失败,无法继续添加。

6.6. 通过域名添加设备

//首先登录设备调用登录接口,以便获取设备的序列号,此类中需添加HBNetSDK.h头文件

[[AccountManager sharedManager].ydtNetCtrl addDeviceByDomainWithDeviceSN:(NSString *)deviceSn DeviceName:(NSString *)deviceName DeviceUser:(NSString *)deviceUser DevicePassword:(NSString *)devicePassword DeviceDomain:(NSString *)domain Port:(int)domainPort ChannelCount:(int)channelCount Block:^(int result, HBYdtDeviceParam *device) {

}];

说明:以上参数均可在由获取账户下设备或者是获取单独设备信息得到。

deviceDomainPort:域名的映射端口,1~65535。

使用的YdtNetSDK对象,必须跟登录帐户使用的是同一个。

获取设备信息失败,无法继续添加。

6.7. 设备删除

[[AccountManager sharedManager].ydtNetSdk deleteDeviceWithDeviceId:(NSString *)deviceId completionHandler:^(int result) {

//result ==0 删除成功,否则为错误码

}];

7.设备管理

7.1. 调用流程

注意: 需在应用页面添加”HBNetSDK.h”头文件,之后调用设备登录接口。

7.2. 登录设备

//vv登录

HB_NET_Login("127.0.0.1", vveyeLocalPort, (char *)userName, (char *)password, &devInfo, deviceDisconnectCallback, (__bridge void *)self);

说明:设备添加方式有多种,VV为其中之一。

1.vveyeLocalPort:通过t2u_add_port_v3(vveyeID, NULL, "127.0.0.1", vveyeRemotePort, 0)做相应的映射获取。

2.vveyeID:通过[[AccountManager sharedManager].ydtNetSdk getSpecifiedDeviceWithoutLoginWithDeviceSn:(NSString *)deviceSn completionHandler:^(YdtDeviceInfo *deviceInfo) {

}];或[[AccountManager sharedManager].ydtNetSdk

getDevicesBelongsToAccountWithCompletionHandler:^(YdtDeviceInfo *deviceInfo) {

}];回调参数获取,详见Demo添加设备页。

3.vveyeRemortPort:同上获取方式。

4. username:同上获取方式。

5.passWord:同上获取方式。

设备的相关参数可从登陆接口的回调函数中获取。

7.3. 域名或IP登录

HB_NET_Login((char *)domain, domainPort, (char *)userName, (char *)password, &devInfo, deviceDisconnectCallback, (__bridge void *)self);

说明:domain:域名的获取方式同vveyeID,需要进行UTF8转码。

domainPort:域名端口,默认为8101。

userName:设备用户名称。

password:设备密码,需要进行UTF8转码。

&devInfo: HB_NET_DEVICEINFO 类型的结构体,包含设备登录后获取到的相关参数。

deviceDisconnectCallback:设备断线回调,其中可以对设备进行重连操作。

7.4. 注销设备

HB_NET_Logout(LONG lUserID);

8.实时预览

8.1. 调用流程

8.2. 获取监控设备的实时预览数据

1.声明HB_NET_CLENTINFO结构体(该结构体设置预览开启时所需参数),并设置其相关参数,dwsize、lStreamType,lChannel,pfnCallback等;

hbNetCtrl.startPreview( channelIndex, streamType, previewCallback );

HB_NET_CLIENTINFO info;

info.pfnCallback=(PHB_NET_STREAMDATA_PROC)playStreamCallback;


//设置预览配置参数

HB_NET_setStreamConfig(long lUserID, int nChannel, int streamType, int frameRate, int bitRate, int audio);

说明:lUserID由登录时返回值获得。

//开启预览

HB_NET_RealPlay(lUserID, &info);

2.在 playStreamCallback中做回调操作

// 打开解码

player = [HBPlaySDK openStream:data length:len];


//添加播放控件

[player AddViewport:self.viewport];


// 设置缓冲模式 均衡,用于预览

[player SetBufferMode:PLAY_BUFFER_MODE_BALANCED];


//注册缓冲状态

[player SetBufferStateAlmostChangeCallback:bufferStateAmostChangeCallback context:(__bridge void *)weakself];

[player SetBufferStateChangedCallback:bufferStateChangedCallback context:(__bridge void *)weakself];

[player SetPictureSizeChangedCallback:PictureSizeChangedCallback context:(__bridge void*)weakself];


//播放

[player Play];


//输出数据

[player InputData:data length:len type:type timestamp:llTimestamp];

说明:player 为解码对象 HBPlaySDK

8.3. 关闭预览并停止解码

//需先关闭网络数据接收,然后释放解码

HB_NET_StopRealPlay(lRealHandle);


//释放解码

player = nil;

说明:lRealHandle 设备预览句柄,此值为HB_NET_RealPlay()的返回值。

9.录像回放

9.1. 调用流程

9.2. 查询设备的录像文件

// 声明结构体 HB_NET_FILEFINDCOND findFileInfo ,并设置相关参数:

findFileInfo.dwFileType = HB_NET_REC_ALL;

findFileInfo.dwChannel = channelIndx;     //录像通道

findFileInfo.struStartTime.dwYear = 2016;     //开始时间

findFileInfo.struStartTime.dwMonth = 5;

findFileInfo.struStartTime.dwDay = 5;

findFileInfo.struStartTime.dwHour = 0;

findFileInfo.struStartTime.dwMinute = 0;

findFileInfo.struStartTime.dwSecond = 0;


// 结束时间需要大于开始时间

findFileInfo.struStopTime.dwYear = 2016;    //结束时间

findFileInfo.struStopTime.dwMonth = 5;

findFileInfo.struStopTime.dwDay = 5;

findFileInfo.struStopTime.dwHour = 23;

findFileInfo.struStopTime.dwMinute = 59;

findFileInfo.struStopTime.dwSecond = 59;


//查找录像文件

long lFindhandle = HB_NET_FindFile(lUserID, &findFileInfo);


注意:此处需要循环获取文件数据,根据lFindRet来选择关闭录像文件查询


lFindRet = HB_NET_FindNextFile(lFindhandle, &findData);


//结束查询录像文件

HB_NET_FindFileClose(LONG lFindHandle);

说明:struStartTime, struStopTime,:录像的开始时间和结束时间。

dwFileType :录像类型 此处为全部录像:0XFF

channelIndx:当前通道通道。

findData:返回录像数据对象,内附相关录像数据详细信息。

9.3. 回放获取指定通道的录像数据

1.先尝试vod方式

//声明结构体HB_NET_VODCOND vodCond,对相关参数进行赋值,例:

memset(&vodCond, 0, sizeof(vodCond));

vodCond.dwSize = sizeof(HB_NET_VODCOND);


vodCond.dwChannel = index;     //当前通道

vodCond.dwType = HB_NET_REC_ALL;     //录像类型

vodCond.dwLoadMode=1;

vodCond.mode.byTime.struStartTime.dwYear = 2016;

vodCond.mode.byTime.struStartTime.dwMonth = 5 ;

vodCond.mode.byTime.struStartTime.dwDay = 6;

vodCond.mode.byTime.struStartTime.dwHour = 1;

vodCond.mode.byTime.struStartTime.dwMinute = 1;

vodCond.mode.byTime.struStartTime.dwSecond = 1;


//结束时间最大为开始时间当天23:59:59

vodCond.mode.byTime.struStopTime.dwYear = 2016;

vodCond.mode.byTime.struStopTime.dwMonth = 5;

vodCond.mode.byTime.struStopTime.dwDay = 6;

vodCond.mode.byTime.struStopTime.dwHour = 23;

vodCond.mode.byTime.struStopTime.dwMinute = 59;

vodCond.mode.byTime.struStopTime.dwSecond = 59;


vodCond.pContext=(__bridge void *)(weakself);

2. //设置数据回调

vodCond.pfnDataProc = (PHB_NET_STREAMDATA_PROC)playbackStreamCallback;


//尝试vod模式进行回放,若不支持再使用HB_NET_PlayBack()

HB_NET_Vod(lUserID, &vodCond);

2.1 Vod模式成功时需使用请求数据

HB_NET_VodGetFrame(lPlaybackHandle, frameCount, 0);

2.2 vod失败,使用HB_NET_PlayBack()方式

3. //在 playStreamCallback中回调操作

//打开解码

player = [HBPlaySDK openStream:data length:len];


//添加播放控件

[player AddViewport:_viewport];


// 设置缓冲模式 均衡,用于预览

[player SetBufferMode:PLAY_BUFFER_MODE_BALANCED];


//注册缓冲状态

[player SetBufferStateAlmostChangeCallback:bufferStateAmostChangeCallback context:(__bridge void *)weakself];

[player SetBufferStateChangedCallback:bufferStateChangedCallback context:(__bridge void *)weakself];

[player SetPictureSizeChangedCallback:PictureSizeChangedCallback context:(__bridge void*)weakself];


//播放

[player Play];


//输出数据

[player InputData:data length:len type:type timestamp:llTimestamp];

说明:具体使用详参Demo 中Device.m调用。

(1)此处赋值的时间为样式赋值,需要开发者传入回放时间进行赋值。

(2)使用HB_NET_PlayBack( )进行回放,需要声明 HB_NET_PLAYBACKCOND playbackCond 结构体,并仿照 HB_NET_VODCOND vodCond 设置相关参数。

以下为参数说明:

player :解码对象 HBPlaySDK。

struStartTime:起始时间。

struStopTime:结束时间,注意:开始时间距结束时间最多一个自然天。

playbackStreamCallback : 设置数据回调。

lUserID:此参数为设备登录时返回值,全局通用。

frameCount:数据请求量。

&vodCond:vod方式时,HB_NET_VODCOND结构体。

playbackCond:使用HB_NET_PlayBack( )方式回放,所使用的HB_NET_PLAYBACKCOND 结构体。

data :回放数据。

len:回放数据长度。

9.4. 关闭回放并停止解码

// vod模式进行回放,先关闭网络数据数据接收,再关解码

停止对HB_NET_VodGetFrame(lPlaybackHandle, frameCount, 0)的调用;


//根据回放模式关闭解码

HB_NET_StopPlayBack(lPlaybackHandle);

HB_NET_StopVod(lPlaybackHandle);

说明:lPlaybackHandle 设备回放句柄,通过此句柄对对应的设备进行操作。

10.报警

10.1. 调用流程

10.2 绑定设备报警

[[AccountManager sharedManager].ydtNetSdk bindDeviceAlarmWithDeviceSn:(NSString *)deviceSn devicePassword:(NSString *)devicePassword shareType:(DeviceShareType)shareType bindFlag(AlarmBindFlag)bindFlag completionHandler:^(int result) {

}];

说明:deviceSn :设备序列号

devicePassword :设备密码

shareType :设备分享类型 0-自有设备,1-分享给该用户的设备,2-公共设备

bindFlag :绑定标识,1-绑定,0-解绑,-1禁止设备报警上传。

10.3. 获取监控设备的报警信息。

//获取多条报警信息

[[AccountManager sharedManager].ydtNetSdk getMultiAlarmInfoWithDeviceSn:(NSString *)deviceSn beginTime:(NSTimeInterval)beginTime endTime:(NSTimeInterval)endTime startIndex:(int)startIndex count:(int)count competionHander:^(YdtAlarmInfo *alarmInfo) {

}];


//获取单条报警

[[AccountManager sharedManager].ydtNetSdk getSingleAlarmInfoWithAlarmId:(NSString *)alarmId competionHander:^(YdtAlarmInfo *alarmInfo) {

}];

说明:传入起始时间和结束时间,获取该时间段内的报警信息,采用分段获取,传入起始位置和获取条数,一次获取完毕后,改变起始位置再次获取,依次循环;当获取的条数小于指定获取条数时获取完毕。

deviceSn :设备序列号

beginTime :报警起始时间

endTime :报警结束时间

startIndex :起始位置

count :循环一次获取的条数

alarmId:报警id,设备报警会推送给终端,(开发者需要使用推送服务)

10.1. 调用流程

11. 错误信息

使使用SDK过程中的异常情况下的提示信息,可通过以下接口获取:

(NSError *)mapYdtError:(int)code;

(NSError *)mapYdtError:(int)code description:(NSString *)description;

(NSError *)mapNetsdkError:(int)code;