求解,调用的是海康的SDK,为什么函数没有执行进入回调函数中

无想无念 2014-09-11 11:50:26
//截取码流
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;
}

}
}
...全文
1492 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
马sang 2015-04-22
  • 打赏
  • 举报
回复
成功播放了吗?不成功不放的话似乎进不去回调的
无想无念 2014-09-15
  • 打赏
  • 举报
回复
16楼的意思是?我没有搞明白啊,怎样看有没有码流进来??
无想无念 2014-09-15
  • 打赏
  • 举报
回复
返回0表示这个函数NET_DVR_RealPlay_V30执行成功了,在回调函数fRealDataCallBack里面设置断点不会进入执行,根本就没有运行到回调函数中,5s的时间可以的,
无想无念 2014-09-15
  • 打赏
  • 举报
回复
忘记告诉大家了,我这个是在vc6.0中写的一个dll文件中编写的,是不是链接库中不能写回调函数啊??
tal_he 2014-09-13
  • 打赏
  • 举报
回复
先抓包看看有没有码流过来
无想无念 2014-09-12
  • 打赏
  • 举报
回复
LuserId也是有值的,为0,表示传进来了,
无想无念 2014-09-12
  • 打赏
  • 举报
回复
我的代码中没有用到循环,没有的,这是一个获取录像文件并保存的,但是就是没有进入回调函数中,就是保存文件的部分
sunShinezhuyg 2014-09-12
  • 打赏
  • 举报
回复
另外你写的好像是realplay成功后sleep了5s后就停止实时播放了,这个间隔是不是太短了?
sunShinezhuyg 2014-09-12
  • 打赏
  • 举报
回复
返回0表示什么意思,设置回调函数执行成功了?你在你写的回调函数fRealDataCallBack里第一行设个断点看看有没有进回调函数里执行。
无想无念 2014-09-12
  • 打赏
  • 举报
回复
NET_DVR_RealPlay_V30的返回值m_lPlayHandle为0,并且函数运行也没有出现错误,就没有进入回调函数,所以断点不知道设在哪里啊
sunShinezhuyg 2014-09-12
  • 打赏
  • 举报
回复
碰巧我之前做过海康的sdk二次开发,以我的经验: 设断点调试 1、看 NET_DVR_RealPlay_V30函数的各个参数传入的是否正确,这个很重要。参考说明文档或.h文件 2、看设置回调函数 NET_DVR_RealPlay_V30的返回值m_lPlayHandle,根据返回值判断设置回调函数是否执行成功。
无想无念 2014-09-12
  • 打赏
  • 举报
回复
有没有搞过海康SDK二次开发的,帮忙看看吧,大神们
无想无念 2014-09-12
  • 打赏
  • 举报
回复
谢谢你的例子,那样写是可以进入回调函数的,不过我的回调函数也是调用海康的SDK的,不一样的,不知道怎么写了
赵4老师 2014-09-12
  • 打赏
  • 举报
回复
有可能你要象我的例子代码那样加一个消息循环。 可以试试将我例子代码中的消息循环去掉,看发生什么现象。
无想无念 2014-09-11
  • 打赏
  • 举报
回复
void CALLBACK fRealDataCallBack(LONG lRealHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void *pUser) { char namcop[32] = {"rtyuiop"}; memcpy(pBuffer,namcop,sizeof(pBuffer)); switch (dwDataType) { case NET_DVR_SYSHEAD: break; case NET_DVR_STREAMDATA: fwrite(pBuffer,1,dwBufSize,Videofile); break; } }这个函数是回调函数里的内容
赵4老师 2014-09-11
  • 打赏
  • 举报
回复
我的意思是提醒你,你的代码中有消息循环吗?
kuankuan_qiao 2014-09-11
  • 打赏
  • 举报
回复
调试啊....
a64850017 2014-09-11
  • 打赏
  • 举报
回复
你参考海康自己的demo呗 LuserId这个不是空的吧 你检查下
无想无念 2014-09-11
  • 打赏
  • 举报
回复
你说的是用定时器来触发,我这个事调用海康的SDK来做的,不知道该怎样来写了
赵4老师 2014-09-11
  • 打赏
  • 举报
回复
仅供参考
#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
//2012-07-26 17:29:16.390 In myTimerProc1
//2012-07-26 17:29:16.890 In main
//2012-07-26 17:29:16.890 In myTimerProc1
//2012-07-26 17:29:17.390 In main
//2012-07-26 17:29:17.890 In myTimerProc2
//2012-07-26 17:29:18.390 In main
//2012-07-26 17:29:18.390 In myTimerProc1
//2012-07-26 17:29:18.890 In main
//2012-07-26 17:29:18.890 In myTimerProc1
//2012-07-26 17:29:19.390 In main
//2012-07-26 17:29:19.890 In myTimerProc2

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧