求解,调用的是海康的SDK,为啥函数没有执行进入回调函数中
求解,调用的是海康的SDK,为什么函数没有执行进入回调函数中
//截取码流
BOOL snapStream(LONG LuserId,LONG lChannel,char filename[256])
{
//FILE *Videofile = NULL;
Videofile = fopen(filename,"wb+");
NET_DVR_CLIENTINFO ClientInfo; // = {0}
memset(&ClientInfo, 0, sizeof(NET_DVR_CLIENTINFO));
//需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
ClientInfo.hPlayWnd = NULL;
//预览通道号
ClientInfo.lChannel = lChannel;
//最高位(31)为0表示主码流,为1表示子码流
ClientInfo.lLinkMode = 1;
//多播地址,需要多播预览时配置
ClientInfo.sMultiCastIP = NULL;
BOOL bPreviewBlock = false;
m_lPlayHandle = NET_DVR_RealPlay_V30(LuserId, &ClientInfo, fRealDataCallBack, NULL,FALSE);
if (m_lPlayHandle <0)
{
return FALSE;
}else
{
Sleep(4000);
// char name[256] = {"nihao,zhelishimateng"};
// fwrite(name,1,sizeof(name),Videofile);
Sleep(1000);
BOOL b_stop = NET_DVR_StopRealPlay(m_lPlayHandle);
if (!b_stop)
{
return FALSE;
}else
{
fclose(Videofile);
return TRUE;
}
}
}
------解决思路----------------------
仅供参考
//截取码流
BOOL snapStream(LONG LuserId,LONG lChannel,char filename[256])
{
//FILE *Videofile = NULL;
Videofile = fopen(filename,"wb+");
NET_DVR_CLIENTINFO ClientInfo; // = {0}
memset(&ClientInfo, 0, sizeof(NET_DVR_CLIENTINFO));
//需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
ClientInfo.hPlayWnd = NULL;
//预览通道号
ClientInfo.lChannel = lChannel;
//最高位(31)为0表示主码流,为1表示子码流
ClientInfo.lLinkMode = 1;
//多播地址,需要多播预览时配置
ClientInfo.sMultiCastIP = NULL;
BOOL bPreviewBlock = false;
m_lPlayHandle = NET_DVR_RealPlay_V30(LuserId, &ClientInfo, fRealDataCallBack, NULL,FALSE);
if (m_lPlayHandle <0)
{
return FALSE;
}else
{
Sleep(4000);
// char name[256] = {"nihao,zhelishimateng"};
// fwrite(name,1,sizeof(name),Videofile);
Sleep(1000);
BOOL b_stop = NET_DVR_StopRealPlay(m_lPlayHandle);
if (!b_stop)
{
return FALSE;
}else
{
fclose(Videofile);
return TRUE;
}
}
}
------解决思路----------------------
仅供参考
#pragma comment(lib,"user32")
#include <stdio.h>
#include <time.h>
#include <sys/timeb.h>
#include <windows.h>
char datestr[16];
char timestr[16];
char mss[4];
void log(char *s) {
struct tm *now;
struct timeb tb;
ftime(&tb);
now=localtime(&tb.time);
sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
sprintf(timestr,"%02d:%02d:%02d",now->tm_hour ,now->tm_min ,now->tm_sec );
sprintf(mss,"%03d",tb.millitm);
printf("%s %s.%s %s",datestr,timestr,mss,s);
}
VOID CALLBACK myTimerProc1(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
) {
log("In myTimerProc1\n");
}
VOID CALLBACK myTimerProc2(
HWND hwnd, // handle of window for timer messages
UINT uMsg, // WM_TIMER message
UINT idEvent, // timer identifier
DWORD dwTime // current system time
) {
log("In myTimerProc2\n");
}
int main() {
int i;
MSG msg;
SetTimer(NULL,0,1000,myTimerProc1);
SetTimer(NULL,0,2000,myTimerProc2);
for (i=0;i<20;i++) {
Sleep(500);
log("In main\n");
if (GetMessage(&msg,NULL,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
}
//2012-07-26 17:29:06.375 In main
//2012-07-26 17:29:06.875 In myTimerProc1
//2012-07-26 17:29:07.375 In main
//2012-07-26 17:29:07.875 In myTimerProc2
//2012-07-26 17:29:08.375 In main
//2012-07-26 17:29:08.375 In myTimerProc1
//2012-07-26 17:29:08.875 In main
//2012-07-26 17:29:08.875 In myTimerProc1
//2012-07-26 17:29:09.375 In main
//2012-07-26 17:29:09.890 In myTimerProc2
//2012-07-26 17:29:10.390 In main
//2012-07-26 17:29:10.390 In myTimerProc1
//2012-07-26 17:29:10.890 In main
//2012-07-26 17:29:10.890 In myTimerProc1
//2012-07-26 17:29:11.390 In main
//2012-07-26 17:29:11.890 In myTimerProc2
//2012-07-26 17:29:12.390 In main
//2012-07-26 17:29:12.390 In myTimerProc1
//2012-07-26 17:29:12.890 In main
//2012-07-26 17:29:12.890 In myTimerProc1
//2012-07-26 17:29:13.390 In main
//2012-07-26 17:29:13.890 In myTimerProc2
//2012-07-26 17:29:14.390 In main
//2012-07-26 17:29:14.390 In myTimerProc1
//2012-07-26 17:29:14.890 In main
//2012-07-26 17:29:14.890 In myTimerProc1
//2012-07-26 17:29:15.390 In main
//2012-07-26 17:29:15.890 In myTimerProc2
//2012-07-26 17:29:16.390 In main