歡迎各位客官大老爺進(jìn)QQ群交流: 257011323 (SDK都在群共享)
這幾天公司要求在手機(jī)端需要看到核膊叮康威視的監(jiān)控視頻鞍历,網(wǎng)上找了半天也沒有現(xiàn)成能用的demo。后來(lái)向悍净ⅲ康威視的技術(shù)人員要了份demo劣砍,在這里總結(jié)一下。另外需要Demo的可以私信我扇救。
1刑枝、導(dǎo)入如圖所示的三個(gè)文件
其中
- 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