iOS端海康威視攝像頭接入

歡迎各位客官大老爺進(jìn)QQ群交流: 257011323 (SDK都在群共享)

這幾天公司要求在手機(jī)端需要看到核膊叮康威視的監(jiān)控視頻鞍历,網(wǎng)上找了半天也沒有現(xiàn)成能用的demo。后來(lái)向悍净ⅲ康威視的技術(shù)人員要了份demo劣砍,在這里總結(jié)一下。另外需要Demo的可以私信我扇救。

1刑枝、導(dǎo)入如圖所示的三個(gè)文件

01.png

其中

  • VideoPlaySDK 是用監(jiān)控點(diǎn)的播放地址(多為rtsp url)通過(guò)流媒體或者M(jìn)AG取流,實(shí)現(xiàn)播放爵政、實(shí)時(shí)預(yù)覽和遠(yuǎn)程回放功能仅讽。
  • VMSNetSDK 是獲取平臺(tái)資源的接口。如獲取設(shè)備信息钾挟,獲取區(qū)域信息等等洁灵。

2、添加所需庫(kù)

  • 在使用VMSNetSDK中l(wèi)ibVMSNetSDK.a的時(shí)候需要同時(shí)添加
    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中的所有靜態(tài)庫(kù)
注:如果編譯出現(xiàn)’ libxml/tree.h’ file not found 請(qǐng)?jiān)贐uild Setting Header Search Paths 中設(shè)置:”/usr/include/libxml2/**”
  • 在使用VideoPlaySDK的時(shí)候掺出,需要添加以下庫(kù)
    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徽千、項(xiàng)目中的使用

  • 1.在didFinishLaunchingWithOptions方法中調(diào)用
//初始化播放庫(kù) 
InitLib();
VP_InitSDK();
  • 2.登錄平臺(tái)獲取登錄信息
  • 2.1 獲取登錄信息:
 [vmsNetSDK login:_serverAddressTextField.text
                        toUserName:平臺(tái)賬號(hào)
                        toPassword:平臺(tái)密碼
                          toLineID:可用線路
                     passwordLevel:3 //用戶密碼強(qiáng)度由開發(fā)者自行判斷,強(qiáng)度由弱到強(qiáng)分別為0,1,2,3
                        toServInfo:mspInfo]; 

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

  • 2.2 獲取線路列表:
_lineList = [NSMutableArray array];
[vmsNetSDK getLineList:服務(wù)器地址 toLineInfoList:_lineList];

內(nèi)網(wǎng)測(cè)試環(huán)境為http://10.33.27.240

  • 3.獲取平臺(tái)賬號(hào)當(dāng)前層級(jí)下的所有資源
   //獲取當(dāng)前層級(jí)的所有資源
  -(NSMutableArray *)_getAllResources {
    VMSNetSDK *vmsNetSDK = [VMSNetSDK shareInstance];
     _allResorceList = [NSMutableArray array];
     NSMutableArray *tempArray = [NSMutableArray array];    
   //判斷當(dāng)前對(duì)象應(yīng)該獲取控制中心還是區(qū)域下的資源
   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];
           
           //獲取控制中心下的區(qū)域
           [vmsNetSDK getRegionListFromCtrlUnit:_serverAddress
                                    toSessionID:_mspInfo.sessionID
                                toControlUnitID:_controlUnitInfo.controlUnitID
                                   toNumPerOnce:50
                                      toCurPage:1
                                   toRegionList:tempArray];
           [_allResorceList addObjectsFromArray:tempArray];
           [tempArray removeAllObjects];
           
           //獲取控制中心下的設(shè)備
           [vmsNetSDK getCameraListFromCtrlUnit:_serverAddress
                                    toSessionID:_mspInfo.sessionID
                                toControlUnitID:_controlUnitInfo.controlUnitID
                                   toNumPerOnce:50
                                      toCurPage:1
                                   toCameraList:tempArray];
           [_allResorceList addObjectsFromArray:tempArray];
           [tempArray removeAllObjects];
           
       }
     } else {      
       //獲取區(qū)域下的區(qū)域
       [vmsNetSDK getRegionListFromRegion:_serverAddress
                              toSessionID:_mspInfo.sessionID
                               toRegionID:_regionInfo.regionID
                             toNumPerOnce:50
                                toCurPage:1
                             toRegionList:tempArray];
       [_allResorceList addObjectsFromArray:tempArray];
       [tempArray removeAllObjects];
       //獲取區(qū)域下的設(shè)備
       [vmsNetSDK getCameraListFromRegion:_serverAddress
                              toSessionID:_mspInfo.sessionID
                               toRegionID:_regionInfo.regionID
                             toNumPerOnce:50
                                toCurPage:1
                             toCameraList:tempArray];
       [_allResorceList addObjectsFromArray:tempArray];
       [tempArray removeAllObjects];
     }
     return _allResorceList;
     }

如果進(jìn)行遞歸遍歷,可以獲取到所有設(shè)備以及播放通道汤锨。
獲取到的資源數(shù)組中如果是屬于CCameraInfo 類或其子類的双抽,就是可以用于播放的設(shè)備,將所需的參數(shù)傳遞過(guò)去即可
服務(wù)器地址闲礼、登錄信息MspInfo以及監(jiān)控點(diǎn)信息cameraInfo

  • 4.準(zhǔn)備播放
    • 獲取播放地址

_realPlayURL = [[CRealPlayURL alloc] init];
BOOL result = [vmsNetSDK getRealPlayURL:服務(wù)器地址
toSessionID:_mspInfo.sessionID
toCameraID:_cameraInfo.cameraID
toRealPlayURL:_realPlayURL
toStreamType:STREAM_SUB]; //StreamType=0時(shí)牍汹,返回主碼流和MAG地址,其=1時(shí)返回子碼流和MAG地址


  - 獲取設(shè)備信息

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

 - 填充監(jiān)控點(diǎn)信息

//填充vidioInfo
VideoPlayInfo *videoInfo = [[VideoPlayInfo alloc] init];
//監(jiān)控點(diǎn)ID
videoInfo.strID = _cameraInfo.cameraID;
//取流協(xié)議類型 UDP或TCP
videoInfo.protocalType = PROTOCAL_UDP;
//播放模式柬泽,實(shí)時(shí)預(yù)覽或者遠(yuǎn)程回放
videoInfo.playType = REAL_PLAY;
//取流方式,目前只支持從流媒體
videoInfo.streamMethod = STREAM_METHOD_VTDU;
//主子碼流
VP_STREAM_TYPE streamType = STREAM_SUB;
videoInfo.streamType = streamType;
//播放的控件 UIView即可
videoInfo.pPlayHandle = (id)self.playView;
//是否要開啟轉(zhuǎn)封裝
videoInfo.bSystransform = NO;
//播放地址
videoInfo.strPlayUrl = _realPlayURL.url1;

- 5.開始播放

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

// 設(shè)置狀態(tài)回調(diào)
if (_vpHandle != NULL)
{
    VP_SetStatusCallBack(_vpHandle, StatusCallBack, (__bridge void *)self);
}

// 開始實(shí)時(shí)預(yù)覽
if (_vpHandle != NULL)
{
    if (!VP_RealPlay(_vpHandle))
    {
        NSLog(@"start VP_RealPlay failed");
    }
}

###4慎菲、總結(jié)
- 雖然_mspInfo.sessionID和 _cameraInfo.cameraID是動(dòng)態(tài)的,但是在播放的時(shí)候并不需要獲取到锨并,在自己項(xiàng)目集成的時(shí)候露该,只需要獲取到rtsp流播放的地址,這個(gè)地址也是寫死的第煮,初始化一個(gè)VideoplayInfo解幼,監(jiān)控點(diǎn)ID可以不填,把其他的參數(shù)填好抑党,然后開始播放就可以了
- 播放的卡頓跟網(wǎng)絡(luò)很有關(guān)系,車載攝像頭最好使用網(wǎng)線上傳流媒體撵摆,使用3/4g卡上傳的話延遲會(huì)比較嚴(yán)重底靠。

- 關(guān)于優(yōu)化的方面
VideoPlaySDK是封裝好的播放控件,如果需要播放流暢度優(yōu)化的話應(yīng)該需要自己寫一個(gè)播放器來(lái)播放了台汇。

歡迎各位客官大老爺進(jìn)QQ群交流: 257011323
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末苛骨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子苟呐,更是在濱河造成了極大的恐慌痒芝,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牵素,死亡現(xiàn)場(chǎng)離奇詭異严衬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笆呆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門请琳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人赠幕,你說(shuō)我怎么就攤上這事俄精。” “怎么了榕堰?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵竖慧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我逆屡,道長(zhǎng)圾旨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任魏蔗,我火速辦了婚禮砍的,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莺治。我一直安慰自己廓鞠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布谣旁。 她就那樣靜靜地躺著床佳,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔓挖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天馆衔,我揣著相機(jī)與錄音瘟判,去河邊找鬼怨绣。 笑死,一個(gè)胖子當(dāng)著我的面吹牛拷获,可吹牛的內(nèi)容都是我干的篮撑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼匆瓜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赢笨!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起驮吱,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茧妒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后左冬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐筏,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年拇砰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梅忌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡除破,死狀恐怖牧氮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瑰枫,我是刑警寧澤踱葛,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站躁垛,受9級(jí)特大地震影響剖毯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜教馆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一逊谋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧土铺,春花似錦胶滋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至后德,卻和暖如春部宿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工理张, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赫蛇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓雾叭,卻偏偏與公主長(zhǎng)得像悟耘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子织狐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容