请教海康流媒体的问题

netscapechina 2010-04-19 04:11:35
目前正在用BCB6开发个基于海康流媒体的小程序,采用动态调用海康提供动态连接库client.dll
首先在FormCreate中动态调用了DLL,
然后执行InitStreamClientLib和HIKS_CreatePlayer都正常,返回值也正常.
但执行到HIKS_OpenURL,就报内存出错了,程序异常退出,但在海康服务端上可以看到连接上了,但只是3秒左右时间,估计是由于程序异常退出,不知道是程序哪写错了,请高手指教一下.

HIKS_OpenURL在头文件中的定义typedef int __stdcall DLL_HIKS_OpenURL(HSESSION hSession,const char* pszURL,int iusrdata);
调用HIKS_OpenURL的语句

char ip[100];
if (HIKS_OpenURL!=NULL)
{
m_URLvalue="rtsp://192.168.1.38/192.168.1.95:8000:HIK-DS8000HC:0:0:001:12345/av_stream";
int i=m_URLvalue.Length();
Label1->Caption=IntToStr(i);
int j=0;
for (j=0;j<i;j++)
{
ip[j]=m_URLvalue[j+1];
}
i=(*HIKS_OpenURL)(MyHSESSION,ip,0);
Memo1->Lines->Add("Open URL:"+IntToStr(i));
}
...全文
642 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
netscapechina 2010-04-21
  • 打赏
  • 举报
回复
问题已找到,是HIKS_CreatePlayer问题,内存指针错误.谢谢大家
xjq2003 2010-04-20
  • 打赏
  • 举报
回复
可以到海康网站上下个例子
http://www.hikvision.com/xiyi.asp?url=84
mabaoyes 2010-04-20
  • 打赏
  • 举报
回复
mark 学习!
海康视频不错的.
netscapechina 2010-04-20
  • 打赏
  • 举报
回复
谢谢yeyanbin和silverpot您们的指教,silverpot邮件已收到,现在程序已改为LIB直接调用了。
但依然报内存错误,检查后举得应该是HIKS_CreatePlayer这个函数调用有问题造成的,虽然返回值是0(正常值),但可能内存指向是不对的。自己也搞不明白。
因为这个函数比较复杂,里面的参数既有回调函数集合类指针,也有消息回调函数指针。
我把函数的定义和我写的代码附上,请帮忙指教一下,哪写的有问题。
HSESSION __stdcall HIKS_CreatePlayer(IHikClientAdviseSink* pSink, void* pWndSiteHandle, pDataRec pRecFunc, pMsgBack pMsgFunc = 0,int TransMethod = 0);

typedef int (__stdcall *pDataRec)(int sid, int iusrdata, int idatatype, char* pdata, int ilen);
typedef int (__stdcall *pMsgBack)(int sid, int opt, int param1, int param2);
typedef int HSESSION;
class IHikClientAdviseSink
{
public:
virtual int OnPosLength(unsigned long nLength) = 0;
virtual int OnPresentationOpened(int success) = 0;
virtual int OnPresentationClosed() = 0;
virtual int OnBegin(unsigned long uTime) = 0;
virtual int OnRandomBegin(unsigned long uTime) = 0;
virtual int OnContacting(const char* pszHost) = 0;
virtual int OnPutErrorMsg(const char* pError) = 0;
virtual int OnBuffering(unsigned int uFlag, unsigned short uPercentComplete) = 0;
virtual int OnChangeRate(int flag) = 0;
virtual int OnDisconnect() = 0;
};


海康的DEMO中写的是这样的,而且调用也是正常的
nRet = HIKS_Stop(m_hSession);
HWND hWnd = GetDlgItem(IDC_STATIC_SHOW)->GetSafeHwnd();
m_hSession = HIKS_CreatePlayer(this, hWnd, NULL, NULL, 1);

我是这样写的

int i=HIKS_Stop(MyHSESSION);
Memo1->Lines->Add("StopPlay:"+IntToStr(i));
IHikClientAdviseSink* MypSink;
MyHSESSION=HIKS_CreatePlayer(MypSink,Panel1->Handle,NULL,NULL,1);
Memo1->Lines->Add("CreatePlayer:"+IntToStr(MyHSESSION));
AnsiString m_URLvalue="rtsp://192.168.1.38/192.168.1.95:8000:HIK-DS8000HC:0:0:001:12345/av_stream";
int i=m_URLvalue.Length();
strcpy(ip,m_URLvalue.c_str());
i=HIKS_OpenURL(MyHSESSION,ip,0);
Memo1->Lines->Add("Open URL:"+IntToStr(i));

银点 2010-04-19
  • 打赏
  • 举报
回复
邮件已发了。你查收。

m_URLvalue="rtsp://192.168.1.38/192.168.1.95:8000:HIK-DS8000HC:0:0:001:12345/av_stream";

这一句有问题应该写成:
m_URLvalue="rtsp:////192.168.1.38//192.168.1.95:8000:HIK-DS8000HC:0:0:001:12345//av_stream";
YeBinYe 2010-04-19
  • 打赏
  • 举报
回复

char ip[100];
if (HIKS_OpenURL!=NULL)
{
AnsiString m_URLvalue="rtsp://192.168.1.38/192.168.1.95:8000:HIK-DS8000HC:0:0:001:12345/av_stream";
int i=m_URLvalue.Length();
Label1->Caption=AnString(i);
strcpy(ip,m_URLvalue.c_str());
i=DLL_HIKS_OpenURL(MyHSESSION,ip,0);
Memo1->Lines->Add("Open URL:"+AnString(i));
}
YeBinYe 2010-04-19
  • 打赏
  • 举报
回复

hInst=LoadLibrary("client.dll");
int __stdcall DLL_HIKS_OpenURL(HSESSION hSession,const char* pszURL,int iusrdata)
{
if(hInst!=NULL)
{
int(__stdcall *HIKS_OpenURL)(HSESSION,const char*,int);
HIKS_OpenURL=(int(__stdcall*)(HSESSION,const char*,int))GetProcAddress(hInst,"HIKS_OpenURL");
return HIKS_OpenURL(hSession,pszURL,iusrdata);
}
}
YeBinYe 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 netscapechina 的回复:]
int j=0;
for (j=0;j<i;j++)
{
ip[j]=m_URLvalue[j+1];
}
[/Quote]
改为:strcpy(ip,m_URLvalue.c_str());试试
netscapechina 2010-04-19
  • 打赏
  • 举报
回复
可是我调用LIB会报错,那您是怎么做的了,可否发段代码,谢谢。我的邮箱netscape_china@163.com
银点 2010-04-19
  • 打赏
  • 举报
回复
我都是用implib输出lib来用的,没有直接使用它的DLL

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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