• 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;

    www,老湿机在线观看