C++ 海康摄像头实现录像文件下载,预览,裸码获取
生活随笔
收集整理的這篇文章主要介紹了
C++ 海康摄像头实现录像文件下载,预览,裸码获取
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
前言示例代碼鏈接:
示例代碼官方網(wǎng)址
預(yù)覽
方式一(由SDK實(shí)現(xiàn)解碼顯示)#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"#include <time.h>using namespace std;typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();PROCGETCONSOLEWINDOW GetConsoleWindowAPI;void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle,void *pUser){char tempbuf[256] = {0};switch(dwType){case EXCEPTION_RECONNECT: //預(yù)覽時(shí)重連printf("----------reconnect--------%d\n", time(NULL));break;default:break;}}void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------//設(shè)置異常消息回調(diào)函數(shù)NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);//---------------------------------------// 獲取控制臺(tái)窗口句柄HMODULE hKernel32 = GetModuleHandle("kernel32");GetConsoleWindowAPI =(PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");//---------------------------------------// 注冊(cè)設(shè)備LONG lUserID;//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, "10.13.35.229"); //設(shè)備IP地址struLoginInfo.wPort = 8000; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, "admin"); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, "abcd1234"); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};lUserID = NET_DVR_Login_V40(&struLoginInfo, \&struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}//---------------------------------------//啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流LONG lRealPlayHandle;HWND hWnd = GetConsoleWindowAPI(); //獲取窗口句柄NET_DVR_PREVIEWINFO struPlayInfo = {0};struPlayInfo.hPlayWnd = hWnd;//需要SDK解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空struPlayInfo.lChannel = 1; //預(yù)覽通道號(hào)struPlayInfo.dwStreamType = 0; //0-主碼流,1-子碼流,2-碼流3,3-碼流4,以此類推struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3-RTP方式,4-RTP/RTSP,5-RSTP/HTTPstruPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL);if (lRealPlayHandle < 0){printf("NET_DVR_RealPlay_V40 error\n");NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}Sleep(10000);//---------------------------------------//關(guān)閉預(yù)覽NET_DVR_StopRealPlay(lRealPlayHandle);//注銷用戶NET_DVR_Logout(lUserID);//釋放SDK資源NET_DVR_Cleanup();return;}方式二(由用戶自行處理回調(diào)得到的碼流數(shù)據(jù),此處以軟解顯示為例,代碼中帶有PlayM4_的函數(shù)請(qǐng)參見(jiàn)播放庫(kù)SDK開(kāi)發(fā)包里面的《播放器SDK編程指南》)#include <stdio.h>#include <iostream>#include "Windows.h"#include "HCNetSDK.h"#include "plaympeg4.h"#include <time.h>using namespace std;typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();PROCGETCONSOLEWINDOW GetConsoleWindowAPI;LONG lPort; //全局的播放庫(kù)port號(hào)void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE*pBuffer,DWORD dwBufSize,void* dwUser){HWND hWnd=GetConsoleWindowAPI();switch (dwDataType){case NET_DVR_SYSHEAD: //系統(tǒng)頭if (m_lPort >= 0){break; //該通道取流之前已經(jīng)獲取到句柄,后續(xù)接口不需要再調(diào)用}if (!PlayM4_GetPort(&lPort)) //獲取播放庫(kù)未使用的通道號(hào){break;}//m_iPort = 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)) //打開(kāi)流接口{break;}if (!PlayM4_Play(lPort, hWnd)) //播放開(kāi)始{break;}}break;case NET_DVR_STREAMDATA: //碼流數(shù)據(jù)if (dwBufSize > 0 && lPort != -1){if (!PlayM4_InputData(lPort, pBuffer, dwBufSize)){break;}}break;default: //其他數(shù)據(jù)if (dwBufSize > 0 && lPort != -1){if (!PlayM4_InputData(lPort, pBuffer, dwBufSize)){break;}}break;}}void CALLBACK g_ExceptionCallBack(DWORD dwType, LONG lUserID, LONG lHandle,void *pUser){char tempbuf[256] = {0};switch(dwType){case EXCEPTION_RECONNECT: //預(yù)覽時(shí)重連printf("----------reconnect--------%d\n", time(NULL));break;default:break;}}void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------//設(shè)置異常消息回調(diào)函數(shù)NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);//---------------------------------------// 獲取控制臺(tái)窗口句柄HMODULE hKernel32 = GetModuleHandle("kernel32");GetConsoleWindowAPI =(PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");//---------------------------------------// 注冊(cè)設(shè)備LONG lUserID;//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, "10.13.35.229"); //設(shè)備IP地址struLoginInfo.wPort = 8000; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, "admin"); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, "abcd1234"); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};lUserID = NET_DVR_Login_V40(&struLoginInfo, \&struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}//---------------------------------------//啟動(dòng)預(yù)覽并設(shè)置回調(diào)數(shù)據(jù)流LONG lRealPlayHandle;NET_DVR_PREVIEWINFO struPlayInfo = {0};struPlayInfo.hPlayWnd = NULL;//需要SDK解碼時(shí)句柄設(shè)為有效值,僅取流不解碼時(shí)可設(shè)為空struPlayInfo.lChannel = 1; //預(yù)覽通道號(hào)struPlayInfo.dwStreamType = 0; //0-主碼流,1-子碼流,2-碼流3,3-碼流4,以此類推struPlayInfo.dwLinkMode = 0; //0- TCP方式,1- UDP方式,2- 多播方式,3-RTP方式,4-RTP/RTSP,5-RSTP/HTTPstruPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo,g_RealDataCallBack_V30, NULL);if (lRealPlayHandle < 0){printf("NET_DVR_RealPlay_V40 error, %d\n", NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}Sleep(10000);//---------------------------------------//關(guān)閉預(yù)覽NET_DVR_StopRealPlay(lRealPlayHandle);//釋放播放庫(kù)資源PlayM4_Stop(lPort);PlayM4_CloseStream(lPort);PlayM4_FreePort(lPort);//注銷用戶NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}錄像文件下載
示例一:查找錄像文件并下載 #include <stdio.h> #include <iostream> #include "Windows.h" #include "HCNetSDK.h" using namespace std;int saveRecordFile(int userId,char * srcfile,char * destfile) {int bRes = 1;int hPlayback = 0;if( (hPlayback = NET_DVR_GetFileByName(userId, srcfile, destfile)) < 0 ){printf( "GetFileByName failed. error[%d]\n", NET_DVR_GetLastError());bRes= -1;return bRes;}if(!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL,0,NULL,NULL)){printf("play back control failed [%d]\n",NET_DVR_GetLastError());bRes=-1;return bRes;}int nPos = 0;for(nPos = 0; nPos < 100&&nPos>=0; nPos = NET_DVR_GetDownloadPos(hPlayback)){printf("Be downloading...%d %%\n", nPos);Sleep(5000); //millisecond}printf("have got %d\n", nPos);if(!NET_DVR_StopGetFile(hPlayback)){printf("failed to stop get file [%d]\n",NET_DVR_GetLastError());bRes = -1;return bRes;}printf("%s\n",srcfile);if(nPos<0||nPos>100){printf("download err [%d]\n",NET_DVR_GetLastError());bRes=-1;return bRes;}else{return 0;} }void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 注冊(cè)設(shè)備LONG lUserID;//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, "192.0.0.64"); //設(shè)備IP地址struLoginInfo.wPort = 8000; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, "admin"); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, "abcd1234"); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}NET_DVR_FILECOND_V40 struFileCond={0};struFileCond.dwFileType = 0xFF;struFileCond.lChannel = 1;struFileCond.dwIsLocked = 0xFF;struFileCond.dwUseCardNo = 0;struFileCond.struStartTime.dwYear = 2011;struFileCond.struStartTime.dwMonth = 3;struFileCond.struStartTime.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;struFileCond.struStopTime.dwMinute = 7;struFileCond.struStopTime.dwSecond = 0;//---------------------------------------//查找錄像文件int lFindHandle = NET_DVR_FindFile_V40(lUserID, &struFileCond);if(lFindHandle < 0){printf("find file fail,last error %d\n",NET_DVR_GetLastError());return;}NET_DVR_FINDDATA_V40 struFileData;while(true){int result = NET_DVR_FindNextFile_V40(lFindHandle, &struFileData);if(result == NET_DVR_ISFINDING){continue;}else if(result == NET_DVR_FILE_SUCCESS){char strFileName[256] = {0};sprintf(strFileName, "./%s", struFileData.sFileName);saveRecordFile(lUserID, struFileData.sFileName, strFileName);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; }示例二:按時(shí)間播放錄像文件 #include <stdio.h> #include <iostream> #include "Windows.h" #include "HCNetSDK.h" using namespace std;typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)(); PROCGETCONSOLEWINDOW GetConsoleWindow;void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 獲取控制臺(tái)窗口句柄HMODULE hKernel32 = GetModuleHandle("kernel32");GetConsoleWindow = (PROCGETCONSOLEWINDOW)GetProcAddress(hKernel32,"GetConsoleWindow");//---------------------------------------// 注冊(cè)設(shè)備LONG lUserID;//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, "192.0.0.64"); //設(shè)備IP地址struLoginInfo.wPort = 8000; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, "admin"); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, "abcd1234"); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}HWND hWnd = GetConsoleWindow(); //獲取窗口句柄NET_DVR_VOD_PARA struVodPara={0};struVodPara.dwSize=sizeof(struVodPara);struVodPara.struIDInfo.dwSize=sizeof(NET_DVR_STREAM_INFO);struVodPara.struIDInfo.dwChannel=1;struVodPara.hWnd=hWnd;struVodPara.struBeginTime.dwYear = 2013;struVodPara.struBeginTime.dwMonth = 6;struVodPara.struBeginTime.dwDay = 14;struVodPara.struBeginTime.dwHour = 9;struVodPara.struBeginTime.dwMinute = 0;struVodPara.struBeginTime.dwSecond =0;struVodPara.struEndTime.dwYear = 2013;struVodPara.struEndTime.dwMonth = 6;struVodPara.struEndTime.dwDay = 14;struVodPara.struEndTime.dwHour = 10;struVodPara.struEndTime.dwMinute = 7;struVodPara.struEndTime.dwSecond = 0;//---------------------------------------//按時(shí)間回放int hPlayback;hPlayback = NET_DVR_PlayBackByTime_V40(lUserID, &struVodPara);if(hPlayback < 0){printf("NET_DVR_PlayBackByTime_V40 fail,last error %d\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup(); return;}//---------------------------------------//開(kāi)始if(!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART,NULL, 0, NULL,NULL)){printf("play back control failed [%d]\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}Sleep(15000); //millisecondif(!NET_DVR_StopPlayBack(hPlayback)){printf("failed to stop file [%d]\n",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 namespace std;void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 注冊(cè)設(shè)備LONG lUserID;//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, "192.0.0.64"); //設(shè)備IP地址struLoginInfo.wPort = 8000; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, "admin"); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, "abcd1234"); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};lUserID = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);if (lUserID < 0){printf("Login failed, error code: %d\n", NET_DVR_GetLastError());NET_DVR_Cleanup();return;}NET_DVR_PLAYCOND struDownloadCond={0};struDownloadCond.dwChannel=1;struDownloadCond.struStartTime.dwYear = 2013;struDownloadCond.struStartTime.dwMonth = 6;struDownloadCond.struStartTime.dwDay = 14;struDownloadCond.struStartTime.dwHour = 9;struDownloadCond.struStartTime.dwMinute = 50;struDownloadCond.struStartTime.dwSecond =0;struDownloadCond.struStopTime.dwYear = 2013;struDownloadCond.struStopTime.dwMonth = 6;struDownloadCond.struStopTime.dwDay = 14;struDownloadCond.struStopTime.dwHour = 10;struDownloadCond.struStopTime.dwMinute = 7;struDownloadCond.struStopTime.dwSecond = 0;//---------------------------------------//按時(shí)間下載int hPlayback;hPlayback = NET_DVR_GetFileByTime_V40(lUserID, "./test.mp4",&struDownloadCond);if(hPlayback < 0){printf("NET_DVR_GetFileByTime_V40 fail,last error %d\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup(); return;}//---------------------------------------//開(kāi)始下載if(!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL,NULL)){printf("Play back control failed [%d]\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}int nPos = 0;for(nPos = 0; nPos < 100&&nPos>=0; nPos = NET_DVR_GetDownloadPos(hPlayback)){printf("Be downloading... %d %%\n",nPos);Sleep(5000); //millisecond}if(!NET_DVR_StopGetFile(hPlayback)){printf("failed to stop get file [%d]\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}if(nPos<0||nPos>100){printf("download err [%d]\n",NET_DVR_GetLastError());NET_DVR_Logout(lUserID);NET_DVR_Cleanup();return;}printf("Be downloading... %d %%\n",nPos);//注銷用戶NET_DVR_Logout(lUserID);//釋放SDK資源NET_DVR_Cleanup();return; }裸碼流獲取
static void CALLBACK PlayBackH264DataCallBack(LONG lPlayHandle, NET_DVR_PACKET_INFO_EX *struPackInfo, void *pUser) {StructH264Process *obj = static_cast<StructH264Process *>(pUser);switch (struPackInfo->dwPacketType){case FILE_HEAD: // 頭break;case VIDEO_I_FRAME: // I 幀break;case VIDEO_B_FRAME: // B 幀break;case VIDEO_P_FRAME: // P 幀break;default: // 其他數(shù)據(jù)break;} } void main() {//---------------------------------------// 初始化NET_DVR_Init();//設(shè)置連接時(shí)間與重連時(shí)間NET_DVR_SetConnectTime(2000, 1);NET_DVR_SetReconnect(10000, true);//---------------------------------------// 注冊(cè)設(shè)備//登錄參數(shù),包括設(shè)備地址、登錄用戶、密碼等NET_DVR_USER_LOGIN_INFO struLoginInfo = {0};struLoginInfo.bUseAsynLogin = 0; //同步登錄方式strcpy(struLoginInfo.sDeviceAddress, host.toStdString().data()); //設(shè)備IP地址struLoginInfo.wPort = port; //設(shè)備服務(wù)端口strcpy(struLoginInfo.sUserName, usr.toStdString().data()); //設(shè)備登錄用戶名strcpy(struLoginInfo.sPassword, pwd.toStdString().data()); //設(shè)備登錄密碼//設(shè)備信息, 輸出參數(shù)NET_DVR_DEVICEINFO_V40 struDeviceInfoV40 = {0};int userId = NET_DVR_Login_V40(&struLoginInfo, &struDeviceInfoV40);if (userId < 0){qDebug()<<"HIKVISION login fail,last error"<<NET_DVR_GetLastError();NET_DVR_Cleanup();return -1;}//按時(shí)間回放NET_DVR_VOD_PARA struVodPara = { 0 };struVodPara.dwSize = sizeof(struVodPara);struVodPara.struIDInfo.dwSize = sizeof(NET_DVR_STREAM_INFO);struVodPara.struIDInfo.dwChannel = 1;struVodPara.hWnd = NULL;struVodPara.struBeginTime.dwYear = 2019;struVodPara.struBeginTime.dwMonth = 12;struVodPara.struBeginTime.dwDay = 12;struVodPara.struBeginTime.dwHour = 12;struVodPara.struBeginTime.dwMinute = 12;struVodPara.struBeginTime.dwSecond = 12;struVodPara.struEndTime.dwYear = 2019;struVodPara.struEndTime.dwMonth = 12;struVodPara.struEndTime.dwDay =12;struVodPara.struEndTime.dwHour = 12;struVodPara.struEndTime.dwMinute = 12;struVodPara.struEndTime.dwSecond = 22;//---------------------------------------//按時(shí)間回放int hPlayback = NET_DVR_PlayBackByTime_V40(userId , &struVodPara);if(hPlayback < 0){printf("NET_DVR_PlayBackByTime_V40 fail,last error %d\n", NET_DVR_GetLastError());return;}//---------------------------------------//開(kāi)始if (!NET_DVR_PlayBackControl_V40(hPlayback, NET_DVR_PLAYSTART, NULL, 0, NULL, NULL)){printf("HK play back control start failed [%d]\n", NET_DVR_GetLastError());return;}NET_DVR_SetPlayBackESCallBack(hPlayback,PlayBackH264DataCallBack,NULL);QThread::sleep(10); //10s延遲用于等待視頻流數(shù)據(jù)返回if(!NET_DVR_StopPlayBack(hPlayback)){printf("HK failed to stop play back [%d]\n",NET_DVR_GetLastError());return;}//注銷用戶NET_DVR_Logout(userId);//釋放SDK資源NET_DVR_Cleanup(); }總結(jié)
以上是生活随笔為你收集整理的C++ 海康摄像头实现录像文件下载,预览,裸码获取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 杭州艾豆智能扫地机器人 陀螺仪导航开源
- 下一篇: linux64下调用海康sdk(=登陆、