數(shù)字錄像機(jī)程序開發(fā)文檔_第1頁(yè)
數(shù)字錄像機(jī)程序開發(fā)文檔_第2頁(yè)
數(shù)字錄像機(jī)程序開發(fā)文檔_第3頁(yè)
數(shù)字錄像機(jī)程序開發(fā)文檔_第4頁(yè)
數(shù)字錄像機(jī)程序開發(fā)文檔_第5頁(yè)
已閱讀5頁(yè),還剩53頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)字硬盤錄像機(jī)程序開發(fā)文檔基于設(shè)備網(wǎng)絡(luò)SDK使用手冊(cè)概述設(shè)備網(wǎng)絡(luò)SDK是基于設(shè)備私有網(wǎng)絡(luò)通信協(xié)議開發(fā)的,為后端設(shè)備(嵌入式網(wǎng)絡(luò)硬盤錄像機(jī)、視頻服務(wù)器)、前端設(shè)備(網(wǎng)絡(luò)攝像機(jī)、網(wǎng)絡(luò)球機(jī)、IP模塊)等產(chǎn)品服務(wù)的配套模塊,用于遠(yuǎn)程訪問和控制設(shè)備軟件的二次開發(fā)。 設(shè)備網(wǎng)絡(luò)SDK主要功能 序號(hào)功能備注1.圖像預(yù)覽2.文件回放和下載3.云臺(tái)控制、布防/撤防4.語(yǔ)音對(duì)講5.日志管理6.解碼卡7.遠(yuǎn)程升級(jí)8.遠(yuǎn)程重啟/關(guān)閉9.格式化硬盤10.參數(shù)配置(系統(tǒng)配置、通道配置、串口配置、報(bào)警配置、用戶配置)11.多路解碼器12.智能設(shè)備功能和獲取設(shè)備能力集設(shè)備網(wǎng)絡(luò)SDK包含網(wǎng)絡(luò)通訊庫(kù)、軟解碼庫(kù)、硬解碼庫(kù)等功能組件,

2、我們提供Windows和Linux兩個(gè)版本的SDK,各自所包含的組件如下: Windows下設(shè)備網(wǎng)絡(luò)SDK: 網(wǎng)絡(luò)通訊庫(kù)HCNetSDK.h頭文件HCNetSDK.lib LIB庫(kù)文件HCNetSDK.dll DLL庫(kù)文件hpr庫(kù)hpr.lib LIB庫(kù)文件hpr.dll DLL庫(kù)文件RTSP通訊庫(kù)StreamTransClient.dll DLL庫(kù)文件軟解碼庫(kù)PlayM4.h頭文件PlayCtrl.lib LIB庫(kù)文件PlayCtrl.dll DLL庫(kù)文件轉(zhuǎn)封裝庫(kù)SystemTransform.dll DLL庫(kù)文件硬解碼庫(kù)DataType.hDecodeCardSdk.h頭文件DsSdk.l

3、ib LIB庫(kù)文件DsSdk.dll DLL庫(kù)文件Linux下設(shè)備網(wǎng)絡(luò)SDK庫(kù): 網(wǎng)絡(luò)通訊庫(kù)hcnetsdk.h頭文件libhcnetsdk.soSO庫(kù)文件hpr庫(kù)libhpr.soSO庫(kù)文件RTSP通訊庫(kù)libStreamTransClient.soSO庫(kù)文件軟解碼庫(kù)playsdkpu.h頭文件libm4play.soSO庫(kù)文件轉(zhuǎn)封裝庫(kù)libSystemTransform.soSO庫(kù)文件本版本的設(shè)備網(wǎng)絡(luò)SDK開發(fā)包中包含以上各個(gè)組件,以下將對(duì)各個(gè)組件在SDK中的作用和使用條件分別說明。網(wǎng)絡(luò)通訊庫(kù)是設(shè)備網(wǎng)絡(luò)SDK的主體,主要用于網(wǎng)絡(luò)客戶端與各類產(chǎn)品之間的通訊交互,負(fù)責(zé)遠(yuǎn)程功能調(diào)控、遠(yuǎn)程參數(shù)配置

4、及碼流數(shù)據(jù)的獲取和處理等。 hpr庫(kù)是網(wǎng)絡(luò)通訊庫(kù)的依賴庫(kù)。 RTSP通訊庫(kù)是支持RTSP傳輸協(xié)議的網(wǎng)絡(luò)庫(kù)。當(dāng)需要對(duì)支持RTSP協(xié)議的產(chǎn)品進(jìn)行取流等操作時(shí)就必須加載該項(xiàng)組件。 軟解碼庫(kù)主要用于對(duì)實(shí)時(shí)碼流數(shù)據(jù)進(jìn)行解碼顯示(實(shí)現(xiàn)預(yù)覽功能)和對(duì)錄像文件進(jìn)行回放解碼等。用戶如果需要在SDK內(nèi)部進(jìn)行對(duì)實(shí)時(shí)流和錄像碼流播放顯示時(shí)(即NET_DVR_RealPlay_V30接口的第二個(gè)結(jié)構(gòu)體參數(shù)的播放句柄設(shè)置成有效句柄時(shí))必須加載該組件,而如果用戶僅需要用網(wǎng)絡(luò)通訊庫(kù)捕獲到數(shù)據(jù)后再外部自行處理就不需要加載該組件,這種情況下用戶在外部自行解碼將更靈活,可參見軟解碼庫(kù)函數(shù)說明播放器SDK編程指南。 轉(zhuǎn)封裝庫(kù)的功能可

5、以分為兩種:一種是將標(biāo)準(zhǔn)碼流轉(zhuǎn)換成采用我們公司封裝格式的碼流。當(dāng)用戶需要對(duì)支持RTSP協(xié)議的產(chǎn)品捕獲采用本公司封裝格式的碼流數(shù)據(jù)時(shí)(即當(dāng)設(shè)置NET_DVR_RealPlay_V30接口中的回調(diào)函數(shù)捕獲數(shù)據(jù)或者調(diào)用NET_DVR_SetRealDataCallBack接口捕獲數(shù)據(jù)時(shí))必須加載該組件。另一種功能是能將標(biāo)準(zhǔn)碼流轉(zhuǎn)換成其他格式的封裝,如3GPP、PS等。例如,當(dāng)用戶需要對(duì)支持RTSP協(xié)議的產(chǎn)品實(shí)時(shí)捕獲指定封裝格式的碼流數(shù)據(jù)(對(duì)應(yīng)的SDK接口為NET_DVR_SaveRealData)時(shí)必須加載該項(xiàng)組件。 硬解碼庫(kù)需在配備硬解碼卡(MD卡)的前提下使用,通過解碼卡的解碼與輸出功能實(shí)現(xiàn)實(shí)時(shí)

6、流的解碼顯示及向監(jiān)視器上矩陣輸出的功能。用戶如果需要在SDK內(nèi)部對(duì)實(shí)時(shí)流碼流播放顯示時(shí)必須加載該項(xiàng)組件。為更方便靈活地調(diào)用硬解碼的相關(guān)功能,建議用戶通過捕獲數(shù)據(jù)在外部處理解碼。相關(guān)硬解碼庫(kù)的功能函數(shù)可參見板卡SDK編程指南中解碼卡API相關(guān)介紹。Linux下無硬解功能。通用接口介紹接口功能支持的產(chǎn)品備注NET_DVR_Init初始化SDK全部NET_DVR_Cleanup釋放SDK資源全部NET_DVR_SetConnectTime設(shè)置SDK網(wǎng)絡(luò)連接超時(shí)時(shí)間和連接嘗試次數(shù)全部NET_DVR_SetReconnect設(shè)置SDK重連功能全部NET_DVR_GetDVRIPByResolveSvr通

7、過解析服務(wù)器,獲取設(shè)備的動(dòng)態(tài)IP地址全部NET_DVR_SetDVRMessage注冊(cè)接收異常、重連等消息的窗口句柄全部NET_DVR_SetExceptionCallBack_V30注冊(cè)接收異常、重連等消息的窗口句柄或回調(diào)函數(shù)全部NET_DVR_GetSDKVersion獲取SDK的版本信息全部NET_DVR_GetSDKBuildVersion獲取SDK的版本號(hào)和build信息全部NET_DVR_GetSDKState獲取當(dāng)前SDK的狀態(tài)信息全部NET_DVR_GetSDKAbility獲取當(dāng)前SDK的功能信息全部NET_DVR_SetLogToFile啟用SDK寫日志文件全部NET_DV

8、R_GetLastError返回最后操作的錯(cuò)誤碼全部NET_DVR_GetErrorMsg返回最后操作的錯(cuò)誤碼信息全部NET_DVR_Login_V30注冊(cè)全部NET_DVR_Logout_V30注銷全部編程引導(dǎo)SDK主動(dòng)注冊(cè)模式SDK接口調(diào)用的主要流程其中虛線框的流程是可選部分,不會(huì)影響其他流程和模塊的功能使用。按實(shí)現(xiàn)功能的不同可以分成十個(gè)模塊,實(shí)現(xiàn)每個(gè)模塊的功能時(shí)初始化SDK、用戶注冊(cè)設(shè)備、注銷設(shè)備和釋放SDK資源這4個(gè)流程是必不可少的。1) 初始化SDK(NET_DVR_Init):對(duì)整個(gè)網(wǎng)絡(luò)SDK系統(tǒng)的初始化,內(nèi)存預(yù)分配等操作。2) 設(shè)置連接超時(shí)時(shí)間(NET_DVR_SetConnec

9、tTime):這部分為可選,用于設(shè)置SDK中的網(wǎng)絡(luò)連接超時(shí)時(shí)間,用戶可以根據(jù)自己的需要設(shè)置該值。在不調(diào)用此接口設(shè)置超時(shí)時(shí)間的情況下,將采用SDK中的默認(rèn)值。 3) 設(shè)置接收異常消息的回調(diào)函數(shù)(NET_DVR_SetDVRMessage或NET_DVR_SetExceptionCallBack_V30):由于SDK中大部分模塊的功能都是由異步模式實(shí)現(xiàn),所以我們提供此接口用于接收預(yù)覽、報(bào)警、回放、透明通道和語(yǔ)音對(duì)講等模塊發(fā)生異常信息。用戶可以在初始化SDK后就設(shè)置該回調(diào)函數(shù),在應(yīng)用層對(duì)各個(gè)模塊異常消息的接收和處理。 4) 從解析服務(wù)器獲得設(shè)備的IP地址(NET_DVR_GetDVRIPByReso

10、lveSvr):該接口提供一種在僅知道設(shè)備名稱和序列號(hào)的情況下,從解析服務(wù)器獲得設(shè)備IP地址的方法。如:當(dāng)前設(shè)備是通過撥號(hào)上網(wǎng)方式獲取到動(dòng)態(tài)IP地址,而運(yùn)行了我公司IPServer軟件的服務(wù)器即為解析服務(wù)器,我們可以通過此接口輸入解析服務(wù)器的地址、設(shè)備的名稱和序列號(hào)等信息查詢?cè)撛O(shè)備的IP地址。IPServer是我公司提供的一款域名解析服務(wù)器軟件。 5) 用戶注冊(cè)設(shè)備(NET_DVR_Login_V30):實(shí)現(xiàn)用戶的注冊(cè)功能,注冊(cè)成功后,返回的用戶ID作為其他功能操作的唯一標(biāo)識(shí),SDK允許最大注冊(cè)用戶數(shù)為512個(gè)。就設(shè)備而言,V3.0以上版本支持的設(shè)備允許有32個(gè)注冊(cè)用戶名,而且同時(shí)最多允許12

11、8個(gè)用戶注冊(cè);V3.0以下版本支持的設(shè)備允許有16個(gè)注冊(cè)用戶名,而且同時(shí)最多允許128個(gè)用戶注冊(cè)。6) 預(yù)覽模塊:從前端服務(wù)器取實(shí)時(shí)碼流,解碼顯示以及播放控制等功能,同時(shí)支持軟解碼和解碼卡解碼。具體流程詳見預(yù)覽模塊流程。7) 回放和下載模塊:可以通過按時(shí)間和按文件名的方式遠(yuǎn)程回放或者下載前端服務(wù)器的錄像文件,后續(xù)可以進(jìn)行解碼或者存儲(chǔ)。同時(shí)還支持?jǐn)帱c(diǎn)續(xù)傳功能。具體流程詳見回放和下載模塊流程。8) 參數(shù)配置模塊:設(shè)置和獲取前端服務(wù)器的參數(shù),主要包括設(shè)備參數(shù)、網(wǎng)絡(luò)參數(shù)、通道壓縮參數(shù)、串口參數(shù)、報(bào)警參數(shù)、異常參數(shù)、交易信息和用戶配置等參數(shù)信息。具體流程詳見參數(shù)配置模塊流程。9) 遠(yuǎn)程設(shè)備維護(hù)模塊:實(shí)現(xiàn)

12、關(guān)閉設(shè)備、重啟設(shè)備、恢復(fù)默認(rèn)值、遠(yuǎn)程硬盤格式化、遠(yuǎn)程升級(jí)和配置文件導(dǎo)入/導(dǎo)出等維護(hù)工作。具體流程詳見遠(yuǎn)程設(shè)備維護(hù)模塊流程。10) 語(yǔ)音對(duì)講轉(zhuǎn)發(fā)模塊:實(shí)現(xiàn)和前端服務(wù)器的語(yǔ)音數(shù)據(jù)對(duì)講和語(yǔ)音數(shù)據(jù)獲取,音頻編碼格式可以指定。具體流程詳見語(yǔ)音對(duì)講轉(zhuǎn)發(fā)模塊流程。11) 報(bào)警模塊:處理前端服務(wù)器上傳的各種報(bào)警信號(hào)。報(bào)警分為“布防”和“監(jiān)聽”兩種方式,在采用監(jiān)聽方式并且不需要獲取用戶ID的情況下,報(bào)警模塊可以無需進(jìn)行“用戶注冊(cè)”操作步驟。具體流程詳見報(bào)警模塊流程。12) 透明通道模塊:透明通道是將IP數(shù)據(jù)報(bào)文解析后直接發(fā)送到串行口的一種技術(shù)。實(shí)際上起到了延伸串行設(shè)備控制距離的作用??衫肐P網(wǎng)絡(luò)控制多種串行設(shè)

13、備,如控制解碼器、矩陣、報(bào)警主機(jī)、門禁、儀器儀表等串行設(shè)備,對(duì)用戶來說,只看到點(diǎn)對(duì)點(diǎn)傳輸,無須關(guān)心網(wǎng)絡(luò)傳輸過程,所以稱為串口透明通道。 SDK提供485和232串口作為透明通道功能,其中要將232串口作為透明通道使用,首先必須在232串口的配置信息(NET_DVR_RS232CFG)中將工作模式選為透明通道,這樣232串口才可作為透明通道使用。具體流程詳見透明通道模塊流程。 13) 云臺(tái)控制模塊:實(shí)現(xiàn)對(duì)云臺(tái)的基本操作、預(yù)置點(diǎn)、巡航、軌跡和透明云臺(tái)的控制。SDK將云臺(tái)控制分為兩種模式:一種是通過圖像預(yù)覽返回的句柄進(jìn)行控制;另一種是無預(yù)覽限制,通過用戶注冊(cè)ID號(hào)進(jìn)行云臺(tái)控制。 14) 解碼器功能模

14、塊:實(shí)現(xiàn)解碼器設(shè)備的配置、解碼控制等功能。SDK支持單路解碼器和多路解碼器,但目前以多路解碼器為主流產(chǎn)品。具體流程詳見多路解碼器功能模塊流程。 15) 智能行為分析功能模塊:實(shí)現(xiàn)對(duì)智能產(chǎn)品的參數(shù)配置、報(bào)警上傳和能力集獲取等功能。具體流程詳見智能行為分析功能模塊流程。 注:本手冊(cè)下文提供的代碼都是在VC環(huán)境下編譯的。預(yù)覽模塊流程l 實(shí)時(shí)預(yù)覽支持TCP、UDP、RTP、MULTICAST網(wǎng)絡(luò)傳輸模式。 l 實(shí)時(shí)預(yù)覽時(shí),DS-80xx、DS-70xx、DS-71xx、DS-72xx、 DS-60xx、DS-61xx系列設(shè)備每個(gè)通道最多支持6路同時(shí)連接,每臺(tái)設(shè)備最多支持24路同時(shí)連接;DS-81xx、

15、DS-71xxHV、72xxHV等系列設(shè)備每個(gè)通道最多支持6路同時(shí)連接,每臺(tái)設(shè)備最多支持18路同時(shí)連接;DS-90xx混合型硬盤錄像機(jī)每個(gè)通道最多支持6路同時(shí)連接,每臺(tái)設(shè)備最多支持64路同時(shí)連接;DS-91xx系列設(shè)備每個(gè)通道最多支持6路同時(shí)連接,每臺(tái)設(shè)備最多支持64路同時(shí)連接;IP設(shè)備每個(gè)通道最多支持6路同時(shí)連接;DS-91xx-ST系列通道連接數(shù)沒有限制,每臺(tái)設(shè)備最多支持128路同時(shí)連接。 預(yù)覽和與預(yù)覽相關(guān)的模塊流程圖圖中虛線框部分的模塊是與預(yù)覽模塊相關(guān),必須在啟動(dòng)預(yù)覽后才能調(diào)用,這些模塊之間是并列的關(guān)系,各自完成相應(yīng)的功能。l 聲音控制功能主要實(shí)現(xiàn)獨(dú)占、共享聲音的打開和關(guān)閉;音量的控制。

16、相關(guān)接口有:NET_DVR_OpenSound、NET_DVR_CloseSound、NET_DVR_OpenSoundShare、NET_DVR_CloseSoundShare、NET_DVR_Volume等。l 實(shí)時(shí)流數(shù)據(jù)捕獲和錄像模塊主要實(shí)現(xiàn)數(shù)據(jù)回調(diào)和本地錄像的功能,可以供用戶后續(xù)處理。相關(guān)接口有:NET_DVR_SetRealDataCallBack、NET_DVR_SetStandardDataCallBack、NET_DVR_SaveRealData等。l 抓圖功能主要實(shí)現(xiàn)對(duì)當(dāng)前解碼圖像的捕獲,保存格式為BMP。相關(guān)接口有:NET_DVR_CapturePicture。l 云臺(tái)控制

17、模塊主要是在開啟預(yù)覽的前提下實(shí)現(xiàn)對(duì)云臺(tái)控制的操作功能,包括云臺(tái)預(yù)置點(diǎn)、巡航、軌跡和透明云臺(tái)等。相關(guān)接口有:NET_DVR_PTZControl、NET_DVR_PTZControl_EX、NET_DVR_PTZPreset、NET_DVR_PTZPreset_EX、NET_DVR_PTZCruise、NET_DVR_PTZCruise_EX、NET_DVR_PTZTrack、NET_DVR_PTZTrack_EX、NET_DVR_TransPTZ、NET_DVR_TransPTZ_EX。實(shí)時(shí)流解碼方式l 方式一:在預(yù)覽接口NET_DVR_RealPlay_V30中預(yù)覽參數(shù)的播放窗口句柄賦成有效

18、句柄,則由SDK實(shí)現(xiàn)解碼功能。在初始化SDK和注冊(cè)設(shè)備兩步驟后,直接調(diào)用啟動(dòng)預(yù)覽和停止預(yù)覽接口。l 方式二:用戶可以通過設(shè)置預(yù)覽接口NET_DVR_RealPlay_V30中預(yù)覽參數(shù)的播放窗口句柄為空值,并通過調(diào)用捕獲數(shù)據(jù)的接口(即設(shè)置NET_DVR_RealPlay_V30接口中的回調(diào)函數(shù)或調(diào)用NET_DVR_SetRealDataCallBack、NET_DVR_SetStandardDataCallBack接口),獲取碼流數(shù)據(jù)進(jìn)行后續(xù)解碼播放處理。下面示例代碼以設(shè)置NET_DVR_RealPlay_V30()接口中的回調(diào)為例進(jìn)行說明。 示例代碼方式一(由SDK實(shí)現(xiàn)解碼顯示) #inclu

19、de <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"#include <time.h>using namespace std;void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) char tempbuf256 = 0; switch(dwType) case EXCEPTION_RECONNECT: /預(yù)

20、覽時(shí)重連 printf("-reconnect-%dn", time(NULL); break;default: break; void main() /- / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); /- / 注冊(cè)設(shè)備 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64&

21、quot;, 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) printf("Login error, %dn", NET_DVR_GetLastError(); NET_DVR_Cleanup(); return; /- /設(shè)置異常消息回調(diào)函數(shù) NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); /- /啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流 LONG lRealPlayHand

22、le; HWND hWnd = GetConsoleWindow(); /獲取窗口句柄 NET_DVR_CLIENTINFO ClientInfo = 0; ClientInfo.hPlayWnd = hWnd; /需要SDK解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空 ClientInfo.lChannel = 1; /預(yù)覽通道號(hào) ClientInfo.lLinkMode = 0; /最高位(31)為0表示主碼流,為1表示子碼流030位表示連接方式:0TCP方式;1UDP方式;2多播方式;3RTP方式; ClientInfo.sMultiCastIP = NULL; /多播地址,需要多播預(yù)覽

23、時(shí)配置 BOOL bPreviewBlock = false; /請(qǐng)求碼流過程是否阻塞,0:否,1:是 lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, NULL, NULL, 0); if (lRealPlayHandle < 0) printf("NET_DVR_RealPlay_V30 errorn"); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; /- /關(guān)閉預(yù)覽 NET_DVR_StopRealPlay(lRealPla

24、yHandle); /注銷用戶 NET_DVR_Logout(lUserID); /釋放SDK資源 NET_DVR_Cleanup(); return;方式二(由用戶自行處理回調(diào)得到的碼流數(shù)據(jù),此處以軟解顯示為例,代碼中帶有PlayM4_的函數(shù)參見軟解碼庫(kù)說明文檔播放器SDK編程指南)#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"#include "plaympeg4.h"#include <ti

25、me.h>using namespace std;LONG lPort; /全局的播放庫(kù)port號(hào)void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser) HWND hWnd=GetConsoleWindow();switch (dwDataType)case NET_DVR_SYSHEAD: /系統(tǒng)頭if (!PlayM4_GetPort(&lPort) /獲取播放庫(kù)未使用的通道號(hào)break;/m_iPo

26、rt = lPort; /第一次回調(diào)的是系統(tǒng)頭,將獲取的播放庫(kù)port號(hào)賦值給全局port,下次回調(diào)數(shù)據(jù)時(shí)即使用此port號(hào)播放if (dwBufSize > 0)if (!PlayM4_SetStreamOpenMode(lPort, STREAME_REALTIME) /設(shè)置實(shí)時(shí)流播放模式break;if (!PlayM4_OpenStream(lPort, pBuffer, dwBufSize, 1024*1024) /打開流接口break;if (!PlayM4_Play(lPort, hWnd) /播放開始break;case NET_DVR_STREAMDATA: /碼流數(shù)據(jù)

27、if (dwBufSize > 0 && lPort != -1)if (!PlayM4_InputData(lPort, pBuffer, dwBufSize)break; void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle, void *pUser) char tempbuf256 = 0; switch(dwType) case EXCEPTION_RECONNECT: /預(yù)覽時(shí)重連 printf("-reconnect-%dn", time(NUL

28、L); break;default: break; void main() /- / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); /- / 注冊(cè)設(shè)備 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("172.0.0.100", 8000, "admin", "12345&quo

29、t;, &struDeviceInfo); if (lUserID < 0) printf("Login error, %dn", NET_DVR_GetLastError(); NET_DVR_Cleanup(); return; /- /設(shè)置異常消息回調(diào)函數(shù) NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL); /- /啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流 LONG lRealPlayHandle; NET_DVR_CLIENTINFO ClientInfo = 0; ClientIn

30、fo.hPlayWnd = NULL; /需要SDK解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空 ClientInfo.lChannel = 1; /預(yù)覽通道號(hào) ClientInfo.lLinkMode = 0; /最高位(31)為0表示主碼流,為1表示子碼流030位表示連接方式:0TCP方式;1UDP方式;2多播方式;3RTP方式; ClientInfo.sMultiCastIP = NULL; /多播地址,需要多播預(yù)覽時(shí)配置 BOOL bPreviewBlock = false; /請(qǐng)求碼流過程是否阻塞,0:否,1:是 lRealPlayHandle = NET_DVR_RealPlay_

31、V30(lUserID, &ClientInfo, g_RealDataCallBack_V30, NULL, 0); if (lRealPlayHandle < 0) printf("NET_DVR_RealPlay_V30 errorn"); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; /- /關(guān)閉預(yù)覽 NET_DVR_StopRealPlay(lRealPlayHandle); /注銷用戶 NET_DVR_Logout_V30(lUserID); NET_DVR_Cleanup(); retur

32、n;回放和下載模塊流程l 按文件回放或下載需要通過查找錄像文件功能先獲取文件信息(相關(guān)接口NET_DVR_FindFile_V30、NET_DVR_FindNextFile_V30),然后根據(jù)獲取到的文件名開始回放或下載(相關(guān)接口NET_DVR_PlayBackByName、NET_DVR_GetFileByName),特別提醒在調(diào)用了回放或下載的接口后,還必須調(diào)用控制接口(NET_DVR_PlayBackControl)的開始播放命令(NET_DVR_PLAYSTART)。l 按時(shí)間回放或下載文件時(shí),用戶可以無需調(diào)用查找錄像文件的相關(guān)接口,只要在接口中指定開始和結(jié)束時(shí)間,調(diào)用回放或下載接口(

33、相關(guān)接口NET_DVR_PlayBackByTime、NET_DVR_GetFileByTime)后,還必須調(diào)用控制接口(NET_DVR_PlayBackControl)的開始播放命令(NET_DVR_PLAYSTART)。此時(shí),將按照指定時(shí)間范圍內(nèi)最近的有錄像的時(shí)間段開始回放或下載。用戶也可以通過調(diào)用查找錄像文件的相關(guān)接口,獲取文件的開始和結(jié)束時(shí)間后,按這個(gè)時(shí)間范圍指定回放或下載接口中的時(shí)間參數(shù),最后還必須調(diào)用控制接口(NET_DVR_PlayBackControl)的開始播放命令(NET_DVR_PLAYSTART)。l Linux下,按文件回放和按時(shí)間回放時(shí),若回放的窗口句柄不為NULL

34、(即需要SDK解碼顯示),需要調(diào)用初始化窗口接口(NET_DVR_DrawAreaInit)進(jìn)行SDL窗口的初始化才能正常的解碼顯示,在停止回放時(shí),需要調(diào)用釋放窗口資源接口(NET_DVR_DrawAreaRelease)釋放窗口資源。 示例代碼示例一:查找錄像文件并下載#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"using namespace std;int saveRecordFile(int userId,char

35、 * srcfile,char * destfile) int bRes = 1; int hPlayback = 0; if( (hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile) < 0 ) printf( "GetFileByName failed. error%dn", NET_DVR_GetLastError(); bRes= -1; return bRes; if(!NET_DVR_PlayBackControl(hPlayback, NET_DVR_PLAYSTART, 0, NULL

36、) printf("play back control failed %dn",NET_DVR_GetLastError(); bRes=-1; return bRes; int nPos = 0; for(nPos = 0; nPos < 100&&nPos>=0; nPos = NET_DVR_GetDownloadPos(hPlayback) Sleep(5000); /millisecond printf("have got %dn", nPos); if(!NET_DVR_StopGetFile(hPlayback)

37、 printf("failed to stop get file %dn",NET_DVR_GetLastError(); bRes = -1; return bRes; printf("%sn",srcfile); if(nPos100) printf("download err %dn",NET_DVR_GetLastError(); bRes=-1; return bRes; else return 0; void main() /- / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetC

38、onnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); /- / 注冊(cè)設(shè)備 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) printf("Login error, %dn", NET_DV

39、R_GetLastError(); NET_DVR_Cleanup(); return; NET_DVR_FILECOND struFileCond; struFileCond.dwFileType = 0xFF; struFileCond.lChannel = 1; struFileCond.dwIsLocked = 0xFF; struFileCond.dwUseCardNo = 0; struFileCond.struStartTime.dwYear = 2011; struFileCond.struStartTime.dwMonth = 3; struFileCond.struStar

40、tTime.dwDay = 1; struFileCond.struStartTime.dwHour = 10; struFileCond.struStartTime.dwMinute = 6; struFileCond.struStartTime.dwSecond =50; struFileCond.struStopTime.dwYear = 2011; struFileCond.struStopTime.dwMonth = 3; struFileCond.struStopTime.dwDay = 1; struFileCond.struStopTime.dwHour = 11; struF

41、ileCond.struStopTime.dwMinute = 7; struFileCond.struStopTime.dwSecond = 0; /- /查找錄像文件 int lFindHandle = NET_DVR_FindFile_V30(lUserID, &struFileCond); if(lFindHandle < 0) printf("find file fail,last error %dn",NET_DVR_GetLastError(); return; NET_DVR_FINDDATA_V30 struFileData; while(t

42、rue) int result = NET_DVR_FindNextFile_V30(lFindHandle, &struFileData); if(result = NET_DVR_ISFINDING) continue; else if(result = NET_DVR_FILE_SUCCESS) char strFileName256 = 0; sprintf(strFileName, "./%s", struFileData.sFileName); saveRecordFile(lUserID, struFileData.sFileName, strFile

43、Name); break; else if(result = NET_DVR_FILE_NOFIND | result = NET_DVR_NOMOREFILE) break; else printf("find file fail for illegal get file state"); break; /停止查找 if(lFindHandle > 0) NET_DVR_FindClose_V30(lFindHandle); /注銷用戶 NET_DVR_Logout(lUserID); /釋放SDK資源 NET_DVR_Cleanup(); return;示例二:按

44、時(shí)間播放錄像文件#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"using namespace std;void main() /- / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); /- / 注冊(cè)設(shè)備 LONG lUserID; NET_DVR_DEVICEINFO_V

45、30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) printf("Login error, %dn", NET_DVR_GetLastError(); NET_DVR_Cleanup(); return; NET_DVR_TIME struStartTime, struStopTime; struStartTime

46、.dwYear = 2011; struStartTime.dwMonth = 3; struStartTime.dwDay = 1; struStartTime.dwHour = 9; struStartTime.dwMinute = 0; struStartTime.dwSecond =0; struStopTime.dwYear = 2011; struStopTime.dwMonth = 3; struStopTime.dwDay = 1; struStopTime.dwHour = 10; struStopTime.dwMinute = 7; struStopTime.dwSecon

47、d = 0; HWND hWnd = GetConsoleWindow(); /獲取窗口句柄 /- /按時(shí)間回放 int hPlayback; hPlayback = NET_DVR_PlayBackByTime(lUserID, 1, &struStartTime, &struStopTime, hWnd); if(hPlayback < 0) printf("NET_DVR_GetFileByTime fail,last error %dn",NET_DVR_GetLastError(); NET_DVR_Logout(lUserID); NET_

48、DVR_Cleanup(); return; /- /開始 if(!NET_DVR_PlayBackControl(hPlayback, NET_DVR_PLAYSTART, 0, NULL) printf("play back control failed %dn",NET_DVR_GetLastError(); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; Sleep(15000); /millisecond if(!NET_DVR_StopPlayBack(hPlayback) printf("fai

49、led to stop file %dn",NET_DVR_GetLastError(); NET_DVR_Logout(lUserID); NET_DVR_Cleanup(); return; /注銷用戶 NET_DVR_Logout(lUserID); /釋放SDK資源 NET_DVR_Cleanup(); return;示例三:按時(shí)間下載錄像文件#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"using na

50、mespace std;void main() /- / 初始化 NET_DVR_Init(); /設(shè)置連接時(shí)間與重連時(shí)間 NET_DVR_SetConnectTime(2000, 1); NET_DVR_SetReconnect(10000, true); /- / 注冊(cè)設(shè)備 LONG lUserID; NET_DVR_DEVICEINFO_V30 struDeviceInfo; lUserID = NET_DVR_Login_V30("192.0.0.64", 8000, "admin", "12345", &struDeviceInfo); if (lUserID < 0) printf("Login error, %dn", NET_DVR_GetLastError(); NET_DVR_Cleanup(); retur

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論