iOS端海康威视摄像头接入

作者: uproject | 来源:发表于2017-03-22 11:17 被阅读2776次

    欢迎各位客官大老爷进QQ群交流: 257011323 (SDK都在群共享)

    这几天公司要求在手机端需要看到海康威视的监控视频,网上找了半天也没有现成能用的demo。后来向海康威视的技术人员要了份demo,在这里总结一下。另外需要Demo的可以私信我。

    1、导入如图所示的三个文件

    01.png

    其中

    • VideoPlaySDK 是用监控点的播放地址(多为rtsp url)通过流媒体或者MAG取流,实现播放、实时预览和远程回放功能。
    • VMSNetSDK 是获取平台资源的接口。如获取设备信息,获取区域信息等等。

    2、添加所需库

    • 在使用VMSNetSDK中libVMSNetSDK.a的时候需要同时添加
      MobileCoreServices.framework
      SystemConfiguration.framework
      CFNetwork.framework
      CoreGraphics.framework
      libz.1.2.5.dylib
      libxml2.dylib
      libsql3.dylib
      libc++.dylib
      libstdc++.6.0.9.dylib
      以及VMSNetSDK中的所有静态库
    注:如果编译出现’ libxml/tree.h’ file not found 请在Build Setting Header Search Paths 中设置:”/usr/include/libxml2/**”
    • 在使用VideoPlaySDK的时候,需要添加以下库
      AVFoundation.framework
      AudioToolbox.framework
      CoreGraphics.framework
      OpenAL.framework
      OpenGLES.framework
      QuartzCore.framework
      LibiconV2.4.0.dylib
      VideoToolbox.framework
      GLKit.framework
      CoreMedia.framework
      CoreGraphice.framework
      AudioToolbox.framework

    3、项目中的使用

    • 1.在didFinishLaunchingWithOptions方法中调用
    //初始化播放库 
    InitLib();
    VP_InitSDK();
    
    • 2.登录平台获取登录信息
    • 2.1 获取登录信息:
     [vmsNetSDK login:_serverAddressTextField.text
                            toUserName:平台账号
                            toPassword:平台密码
                              toLineID:可用线路
                         passwordLevel:3 //用户密码强度由开发者自行判断,强度由弱到强分别为0,1,2,3
                            toServInfo:mspInfo]; 
    

    其中mspInfo就是所需的登录信息

    • 2.2 获取线路列表:
    _lineList = [NSMutableArray array];
    [vmsNetSDK getLineList:服务器地址 toLineInfoList:_lineList];
    

    内网测试环境为http://10.33.27.240

    • 3.获取平台账号当前层级下的所有资源
       //获取当前层级的所有资源
      -(NSMutableArray *)_getAllResources {
        VMSNetSDK *vmsNetSDK = [VMSNetSDK shareInstance];
         _allResorceList = [NSMutableArray array];
         NSMutableArray *tempArray = [NSMutableArray array];    
       //判断当前对象应该获取控制中心还是区域下的资源
       if (nil == _regionInfo) {
           if (nil == _controlUnitInfo) {      
               //获取根控制中心
               [vmsNetSDK getControlUnitList:_serverAddress
                                 toSessionID:_mspInfo.sessionID
                             toControlUnitID:0
                                toNumPerOnce:50
                                   toCurPage:1
                           toControlUnitList:tempArray];
               [_allResorceList addObjectsFromArray:tempArray];
               [tempArray removeAllObjects];
               
           } else {
               
               //获取控制中心下的控制中心
               [vmsNetSDK getControlUnitList:_serverAddress
                                 toSessionID:_mspInfo.sessionID
                             toControlUnitID:_controlUnitInfo.controlUnitID
                                toNumPerOnce:50
                                   toCurPage:1
                           toControlUnitList:tempArray];
               [_allResorceList addObjectsFromArray:tempArray];
               [tempArray removeAllObjects];
               
               //获取控制中心下的区域
               [vmsNetSDK getRegionListFromCtrlUnit:_serverAddress
                                        toSessionID:_mspInfo.sessionID
                                    toControlUnitID:_controlUnitInfo.controlUnitID
                                       toNumPerOnce:50
                                          toCurPage:1
                                       toRegionList:tempArray];
               [_allResorceList addObjectsFromArray:tempArray];
               [tempArray removeAllObjects];
               
               //获取控制中心下的设备
               [vmsNetSDK getCameraListFromCtrlUnit:_serverAddress
                                        toSessionID:_mspInfo.sessionID
                                    toControlUnitID:_controlUnitInfo.controlUnitID
                                       toNumPerOnce:50
                                          toCurPage:1
                                       toCameraList:tempArray];
               [_allResorceList addObjectsFromArray:tempArray];
               [tempArray removeAllObjects];
               
           }
         } else {      
           //获取区域下的区域
           [vmsNetSDK getRegionListFromRegion:_serverAddress
                                  toSessionID:_mspInfo.sessionID
                                   toRegionID:_regionInfo.regionID
                                 toNumPerOnce:50
                                    toCurPage:1
                                 toRegionList:tempArray];
           [_allResorceList addObjectsFromArray:tempArray];
           [tempArray removeAllObjects];
           //获取区域下的设备
           [vmsNetSDK getCameraListFromRegion:_serverAddress
                                  toSessionID:_mspInfo.sessionID
                                   toRegionID:_regionInfo.regionID
                                 toNumPerOnce:50
                                    toCurPage:1
                                 toCameraList:tempArray];
           [_allResorceList addObjectsFromArray:tempArray];
           [tempArray removeAllObjects];
         }
         return _allResorceList;
         }
    

    如果进行递归遍历,可以获取到所有设备以及播放通道。
    获取到的资源数组中如果是属于CCameraInfo 类或其子类的,就是可以用于播放的设备,将所需的参数传递过去即可
    服务器地址、登录信息MspInfo以及监控点信息cameraInfo

    • 4.准备播放
      • 获取播放地址

    _realPlayURL = [[CRealPlayURL alloc] init];
    BOOL result = [vmsNetSDK getRealPlayURL:服务器地址
    toSessionID:_mspInfo.sessionID
    toCameraID:_cameraInfo.cameraID
    toRealPlayURL:_realPlayURL
    toStreamType:STREAM_SUB]; //StreamType=0时,返回主码流和MAG地址,其=1时返回子码流和MAG地址

    
      - 获取设备信息
    

    CDeviceInfo *deviceInfo = [[CDeviceInfo alloc] init];
    result = [vmsNetSDK getDeviceInfo:_serverAddress
    toSessionID:_mspInfo.sessionID
    toDeviceID:_cameraInfo.deviceID
    toDeviceInfo:deviceInfo];

     - 填充监控点信息
    

    //填充vidioInfo
    VideoPlayInfo *videoInfo = [[VideoPlayInfo alloc] init];
    //监控点ID
    videoInfo.strID = _cameraInfo.cameraID;
    //取流协议类型 UDP或TCP
    videoInfo.protocalType = PROTOCAL_UDP;
    //播放模式,实时预览或者远程回放
    videoInfo.playType = REAL_PLAY;
    //取流方式,目前只支持从流媒体
    videoInfo.streamMethod = STREAM_METHOD_VTDU;
    //主子码流
    VP_STREAM_TYPE streamType = STREAM_SUB;
    videoInfo.streamType = streamType;
    //播放的控件 UIView即可
    videoInfo.pPlayHandle = (id)self.playView;
    //是否要开启转封装
    videoInfo.bSystransform = NO;
    //播放地址
    videoInfo.strPlayUrl = _realPlayURL.url1;

    - 5.开始播放
    

    // 获取VideoPlaySDK 播放句柄
    if (_vpHandle == NULL)
    {
    _vpHandle = VP_Login(videoInfo);
    }

    // 设置状态回调
    if (_vpHandle != NULL)
    {
        VP_SetStatusCallBack(_vpHandle, StatusCallBack, (__bridge void *)self);
    }
    
    // 开始实时预览
    if (_vpHandle != NULL)
    {
        if (!VP_RealPlay(_vpHandle))
        {
            NSLog(@"start VP_RealPlay failed");
        }
    }
    
    
    ###4、总结
    - 虽然_mspInfo.sessionID和 _cameraInfo.cameraID是动态的,但是在播放的时候并不需要获取到,在自己项目集成的时候,只需要获取到rtsp流播放的地址,这个地址也是写死的,初始化一个VideoplayInfo,监控点ID可以不填,把其他的参数填好,然后开始播放就可以了
    - 播放的卡顿跟网络很有关系,车载摄像头最好使用网线上传流媒体,使用3/4g卡上传的话延迟会比较严重。
    
    - 关于优化的方面
    VideoPlaySDK是封装好的播放控件,如果需要播放流畅度优化的话应该需要自己写一个播放器来播放了。
    
    欢迎各位客官大老爷进QQ群交流: 257011323

    相关文章

      网友评论

      • 7726870901be:求demo,18637333901@163.com,谢楼主
      • smile丶淡然:楼主你好,可以发我一份海康Demo嘛,谢谢 1721787140@qq.com
      • c064eb840803:求demo,13271926548@163.com,谢楼主
      • 知更_b048:楼主 求海康Demo 718451036@qq.com 多谢楼主
      • 我不会不在_7dda:求demo,385395559@qq.com,谢谢楼主
      • 堃_316c:求demo,254137679@qq.com,谢谢楼主
      • 641aa5c3f202:求demo,1044543532 @qq.com,谢谢楼主
      • 小小小鸟小小小:求demo,zd_2010@163.com ,谢楼主
      • 7anOS:fanmaoyu0871@163.com,谢谢楼主
      • reyzhang:大神求一份demo,27196849@qq.com 谢谢啦
      • BIGQUESTION:大神求一份demo,1029866584@qq.com
      • 4305824b6977:我要到的是c++接口SDK,和你截图里的不一样,我发现还有oc的SDK,HIKVersion4500.framework
      • l漂泊l:大神 可以给我发一份demo吗 1240758925@qq.com very thanks!
      • 左岸留恋:求一份demo duoluock@foxmail.com
      • 不辣先生:解码的时候,卡顿,花屏,高cpu这些,怎么处理的大神,你的播放器用的哪个啊?
      • 4cee4b4f0365:大神 求demo 424128933@qq.com
      • 土匪大当家:楼主你好,也可以发我一份海康Demo嘛,谢谢 834669908@qq.com
      • a6e7c662506f:大神,我也需要demo,854937886@qq.com,谢谢 :)
      • MasonCoder:麻烦发份demo 466317974@qq.com
        非常感谢
      • cocoaZ:求demo 1498161293@qq.com 谢谢!
      • 汤姆猫_6074:麻烦发到757566833@qq.com
        非常感谢
      • WinD是狮子座:大神,求发一份ios端的demo,万分感谢~邮箱地址:ils1314@vip.qq.com
      • 这个熊孩子不太冷:楼主求一份demo,songjichao225@163.com谢谢
      • dda5a2cf4502:644025323@qq.com 好人一生平安!
        uproject:@勒是雾都啊 加群嘛,群里有撒
      • C_灵朔:这几天也在搞这个 求一份海康的demo 谢谢 1608538691@qq.com
      • 一个记事本:运行海康demo,进入相应的控头后ios端没有画面,点击预览报"获取实时预览URL地址失败"。而pc端是有的监控画面的。请教一下。:pray:
        一个记事本:@uproject 谢谢,已加群,原来是监控设置没配mag服务。
        uproject:@一个记事本 你加群问问吧,群里人多
      • 一个记事本:可以发给我一份demo吗,非常感谢,380943617@qq.com
      • crow226119:大神,demo可以发一份吗?demo有没有适配iOS11的呢?邮箱2212807463QQ.com
      • Swift研习室:麻烦楼主给一份那个 Demo。非常感谢
      • 225fe594ecfe:1028770462@qq.com 求 海康威视的 Demo
      • 老坛风:请问有集成支付宝sdk吗?我这边集成了支付宝sdk后,就卡在NET_DVR_Login_V30注册设备代码上?有遇到的吗?
        老坛风:@uproject 对呀,删掉支付宝sdk就好了
        uproject:你是说支付宝Sdk跟这个有冲突吗?
      • 5c16631b5dbf:求源码Demo,mgv5@qq.com,谢谢了.
      • 白云游子:跪求Demo,297482125@qq.com
      • 天一方_0ade:求源码QQ:1067887599。谢谢了。
      • Lucas853:你好,可以给我发一份海康iOSSDK的DEMO,谢谢!
        Lucas853:QQ:982305722
      • 吃鲸鱼的喵:求 海康威视的 Demo, QQ联系 923138040@qq.com, 谢谢 楼主
      • 530dc6867031:大佬 还能求demo吗:confounded: 939221196@qq.com
      • 喜欢吃生蚝:demo 监控点 预览 报错
        rtsp start stream failed. error code is 18
        start VP_RealPlay failed
        知道什么原因吗 老哥
        uproject:@喜欢吃生蚝 那就不是sdk 的问题,你官方的先预览可以了再试sdk
        喜欢吃生蚝:@uproject 官方的也预览失败 什么检查通讯线路,或网络情况
        uproject:你下个官方的app ,叫ivms5060先看看能不能播放。
      • a2f037f7bfbb:求海康的Demo, QQ联系 396385648@qq.com, 非常感谢,另外请问有大华的demo吗?
        uproject:@itsLUO 群里有你加群吧
      • 不是长颈鹿:老司机带带我
      • 84d882ef5267:博主大大,群里共享的 和你这里写的不是一个sdk呀。。群里共享的。。。根本没有VideoPlaySDK之类的呀。。。这个是你封装的还是?
        uproject:@恩底弥翁之鹰 有的吧,是封装好的
      • Bemagine:大神,求 海康威视的 Demo, QQ联系 408601811@qq.com, 谢谢 楼主
        uproject:@Bemagine 你加一下群吧,里面有
      • Jeff_bian:来一发demo谢谢,老铁,302504531@qq.com
      • 夢若繁星:673646979@qq.com 求一份演示视频 谢谢
      • 今天_现在:求海康威视demo,非常急,邮箱:missshiwen_zhou@163.com
      • 忘山老人:感谢楼主大大江湖救急,楼主大大能发我一份 demo 么?814637488@qq.com
      • a396ddf1712f:求发我一份demo 1115804131@qq.com 谢谢楼主
        uproject:@a396ddf1712f 群里面有,你加一下吧
      • Lorne_coder:求一份demo 627841904@qq.com 已加群 等待验证
      • 63f2dd559f52:楼主给我也 发一份儿呗,谢谢844391981@qq.com
        uproject:@尼玛蛋用啥昵称都被占用 你加一下群下载吧,在群共享
      • LoveEachDay:这个很厉害
      • b1b5c41a91a3:楼主可以也给我发一份demo么?我邮箱:570515965@qq.com
        a814ec254192:楼主可以也给我发一份demo么?我邮箱:413739302@qq.com
        uproject:@Symphony_7dfa 群共享里有,你进群下载吧
      • 漫雪思舟:求demo QQ:77487814 ,谢谢大神
      • 63243b524473:大神发个包给我 1006969873@qq.com



      • GeekPwn_S:可以发我一份demo吗 1073212671@qq.com 谢谢:blush:
      • 老熊猫:请问下能多通道同时播放吗?
        记忆留夏:请问一下,我在播放的时候会导致界面卡2到3秒,这个要怎么解决?求demo 一份,邮箱1525328738@qq.com
        uproject:@老熊猫 肯定可以啊,Demo不就可以吗
      • qbxsdhl:大神,求发一份ios端的demo,万分感谢~邮箱地址:51779094@qq.com
      • 我是要成为大神的男人:大神,我也需要demo,601447049@qq.com
        我是要成为大神的男人:@uproject不对吧,确定是iOS sdk demo么。
        uproject:@我是要成为大神的男人 已发
      • 9e4428de5cb5:可以发给我一份demo吗,非常感谢,1360677450@qq.com
        uproject:@zh命运在我手中 已发
      • 卟师:可以发我一份demo麽 812920365@qq.com 谢谢啊
      • 7297c671c2b4:可以给我发一份demo吗 790175706@qq.com thanks
        7297c671c2b4:@uproject 3Q
        uproject:@萝卜都不给我 已发
      • 7297c671c2b4:可以发我一份demo麽 790175706@qq.com thanks
      • Sunror:我卡在抓图的环节,求支援,已加群,等验证
      • Rickie_Lambert:关于海康威视里的截图 功能, 你知道它怎么做的吗? 提示是 保存成功了, 但是本地相册中找不到

        #pragma mark 截图
        - (void)capture
        {
        NSLog(@"截图........");
        VPCaptureInfo *captureInfo = [[VPCaptureInfo alloc] init];
        if (![VideoPlayUtility getCaptureInfo:@"camera01" toCaptureInfo:captureInfo]) {
        NSLog(@"getCaptureInfo failed");
        return;
        }
        // 设置抓图质量 1-100 越高质量越高
        captureInfo.nPicQuality = 80;
        BOOL result = [g_playMamager capture:captureInfo];
        if (result) {
        NSLog(@"截图成功,图片路径:%@",captureInfo.strCapturePath);
        } else {
        NSLog(@"截图失败");
        }
        }
        Rickie_Lambert:@Sunror 截图截到了, 根绝它提示的路径去找, 你需要访问一下手机里Demo的沙盒,找到这个路径下的图片文件, 然后保存到相册里. 百度一下就有解决方法了.
        Sunror:@uproject 貌似,SDK的播放器盖在我们写的view上面,截取view的图片,怎么个策略,真的截取到并且没有问题吗
        uproject:@Mr_Rain 你可以直接截取view的图片就好了吧,我没用这里的截图功能
      • Link913:传输都封装了吗??
      • 小冰山口:大神可不可以带一下我
        小冰山口:@lawrenceWeiii 江湖从此无方神

      本文标题:iOS端海康威视摄像头接入

      本文链接:https://www.haomeiwen.com/subject/zgznnttx.html