Exemplo n.º 1
0
DevChannelHK::DevChannelHK(int64_t i64LoginId, const char* pcDevName, int iChn, bool bMainStream) :
		DevChannel(HK_APP_NAME,(StrPrinter<<MD5(pcDevName).hexdigest()<<"_"<<iChn<<endl).data()),
		m_i64LoginId(i64LoginId) {
	InfoL << endl;
	NET_DVR_PREVIEWINFO previewInfo;
	previewInfo.lChannel = iChn; //通道号
	previewInfo.dwStreamType = bMainStream ? 0 : 1; // 码流类型,0-主码流,1-子码流,2-码流3,3-码流4 等以此类推
	previewInfo.dwLinkMode = 1; // 0:TCP方式,1:UDP方式,2:多播方式,3 - RTP方式,4-RTP/RTSP,5-RSTP/HTTP
	previewInfo.hPlayWnd = 0; //播放窗口的句柄,为NULL表示不播放图象
	previewInfo.byProtoType = 0; //应用层取流协议,0-私有协议,1-RTSP协议
	previewInfo.dwDisplayBufNum = 1; //播放库播放缓冲区最大缓冲帧数,范围1-50,置0时默认为1
	previewInfo.bBlocked = 0;
	m_i64PreviewHandle = NET_DVR_RealPlay_V40(m_i64LoginId, &previewInfo,
										[](LONG lPlayHandle,DWORD dwDataType,BYTE *pBuffer,DWORD dwBufSize,void* pUser) {
											DevChannelHK *self=reinterpret_cast<DevChannelHK *>(pUser);
											if(self->m_i64PreviewHandle!=(int64_t)lPlayHandle) {
												return;
											}
											self->onPreview(dwDataType,pBuffer,dwBufSize);
										}, this);
	if (m_i64PreviewHandle == -1) {
		throw std::runtime_error( StrPrinter 	<< "设备[" << pcDevName << "/" << iChn << "]开始实时预览失败:"
												<< NET_DVR_GetLastError() << endl);
	}
}
Exemplo n.º 2
0
bool HikNetHelper::beginRealplay(HikRealdataCallback callback,void* user) {

    NET_DVR_PREVIEWINFO struPlayInfo = {0};

    if(_isLogin == false) {
        LOGOUT("Function HikNetHelper::beginRealplay -> You should login first!)");
        return false;
    }

    _user = user;
    struPlayInfo.hPlayWnd = 0; //需要 SDK 解码时句柄设为有效值,仅取流不解码时可设为空
    struPlayInfo.lChannel = 1;
    struPlayInfo.dwStreamType = 1; //0-主码流,1-子码流,2-码流 3,3-码流 4,以此类推
    struPlayInfo.dwLinkMode = 0; //0- TCP 方式,1- UDP 方式,2- 多播方式,3- RTP 方式,4-RTP/RTSP,5-RSTP/HTTP
    struPlayInfo.bBlocked = 1; //0- 非阻塞取流,1- 阻塞取流
    _hikRealPlayHandle = NET_DVR_RealPlay_V40(_hikNetUserId, &struPlayInfo, NULL, NULL);
    if (_hikRealPlayHandle < 0)
    {
        LOGOUT("Function HikNetHelper::beginRealplay -> NET_DVR_RealPlay_V40 failed!! Error Code=%d)",NET_DVR_GetLastError());
        logout();
        return false;
    }

    int iRet;
    iRet = NET_DVR_SetRealDataCallBack(_hikRealPlayHandle, callback, (DWORD)this);
    if (!iRet)
    {
       LOGOUT("Function HikNetHelper::beginRealplay -> NET_DVR_RealPlay_V30 failed!! ERROR=%d)",NET_DVR_GetLastError());
       endRealplay();
       logout();
       return false;
    }

    return true;
}
Exemplo n.º 3
0
void MainWindow::on_pushButton_clicked()
{
    qDebug("button clicked");
    // 注册设备
    NET_DVR_DEVICEINFO_V30 struDeviceInfo;
    lUserID = NET_DVR_Login_V30("192.168.13.20", 8000, "admin", "1qaz2wsx", &struDeviceInfo);
    if (lUserID < 0)
    {
         qDebug("Login error, %d\n", NET_DVR_GetLastError());
         NET_DVR_Cleanup();
         return;
    }

    //---------------------------------------
    //设置异常消息回调函数
    NET_DVR_SetExceptionCallBack_V30(0, NULL,g_ExceptionCallBack, NULL);

    //---------------------------------------
    //启动预览并设置回调数据流
    //HWND hWnd = (HWND)ui->frame->winId();     //获取窗口句柄
    movie.hWnd = (HWND)ui->frame->winId();     //获取窗口句柄
    qDebug("hWnd:%d", movie.hWnd);
    NET_DVR_PREVIEWINFO struPlayInfo = {0};
    //struPlayInfo.hPlayWnd = hWnd;         //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
    struPlayInfo.lChannel     = 1;       //预览通道号
    struPlayInfo.dwStreamType = 0;       //0-主码流,1-子码流,2-码流3,3-码流4,以此类推
    struPlayInfo.dwLinkMode   = 0;       //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP

    lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, PsDataCallBack, &movie);
    if (lRealPlayHandle < 0)
    {
        DWORD error = NET_DVR_GetLastError();
        qDebug("NET_DVR_RealPlay_V40 error, %d\n" , error);
        NET_DVR_Logout(lUserID);
        NET_DVR_Cleanup();
        return;
    }

    qDebug("NET_DVR_RealPlay_V40 ok!");
    //QThread::sleep(10000);
    ////---------------------------------------
    ////关闭预览
    //NET_DVR_StopRealPlay(lRealPlayHandle);
    ////注销用户
    //NET_DVR_Logout(lUserID);
    ////释放SDK资源
    //NET_DVR_Cleanup();

    return;
}
Exemplo n.º 4
0
void CSingleCamDlg::OnBnClickedBtnPlaycam() //播放
{

		NET_DVR_PREVIEWINFO struPlayInfo1 = {0};
		struPlayInfo1.hPlayWnd = hPlayWnd1;         //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
		struPlayInfo1.lChannel     = 1;       //预览通道号
		struPlayInfo1.dwStreamType = 0;       //0-主码流,1-子码流,2-码流3,3-码流4,以此类推
		struPlayInfo1.dwLinkMode   = 0;       //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP

		NET_DVR_PREVIEWINFO struPlayInfo2 = { 0 };
		struPlayInfo2.hPlayWnd = hPlayWnd2;         //需要SDK解码时句柄设为有效值,仅取流不解码时可设为空
		struPlayInfo2.lChannel = 1;       //预览通道号
		struPlayInfo2.dwStreamType = 0;       //0-主码流,1-子码流,2-码流3,3-码流4,以此类推
		struPlayInfo2.dwLinkMode = 0;       //0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP


		lRealHandle1 = NET_DVR_RealPlay_V40(lUserID1, &struPlayInfo1, g_RealDataCallBack_V30, NULL);
		lRealHandle2 = NET_DVR_RealPlay_V40(lUserID2, &struPlayInfo2, g_RealDataCallBack_V30, NULL);

		if (lRealHandle1 < 0 || lRealHandle2 < 0)
		{
			AfxMessageBox("播放失败!");
			isPlaying = FALSE;//播放标志位设置为假
		} 

		else
		{
			GetDlgItem(IDC_BTN_Login)->EnableWindow(FALSE);  //登录按钮失效
			GetDlgItem(IDC_BTN_PlayCam)->EnableWindow(FALSE);  //播放按钮失效
			GetDlgItem(IDC_BTN_StopCam)->EnableWindow(TRUE);  //停止按钮 有效
			GetDlgItem(IDC_BTN_SavePicture)->EnableWindow(TRUE); // 抓图按钮 有效
			GetDlgItem(IDC_BTN_SavePicture2)->EnableWindow(TRUE); // 抓图2按钮 有效
			GetDlgItem(IDC_BTN_SaveRealData)->EnableWindow(TRUE); // 视频保存按钮 有效
			isPlaying = TRUE;
		}
		NET_DVR_GetLastError();
} 
Exemplo n.º 5
0
j_result_t CHikSdkChannel::OpenStream(J_Obj *&pObj, CRingBuffer *pRingBuffer)
{
	if (m_pAdapter->GetStatus() != jo_dev_ready)
	{
		m_pAdapter->Broken();
		m_bOpened = false;
		return J_DEV_BROKEN;
	}

	if (m_bOpened && pObj != NULL)
	{
		//NET_DVR_MakeKeyFrame(m_pAdapter->GetUserId(), m_nChannel);
		(dynamic_cast<CHikSdkStream *> (pObj))->AddRingBuffer(pRingBuffer);
		return J_OK;
	}

	pObj = new CHikSdkStream(m_resid);
	
	NET_DVR_PREVIEWINFO prevInfo = {0};
	prevInfo.lChannel = m_nChannel;
	prevInfo.dwStreamType = m_nStreamType;
	prevInfo.dwLinkMode = 0;//TCP
	prevInfo.hPlayWnd = NULL;
	prevInfo.bBlocked = 1;//no block
	prevInfo.bPassbackRecord = 0;
	prevInfo.byPreviewMode = 0;
	prevInfo.byProtoType = 0;
	m_hStream = NET_DVR_RealPlay_V40(m_pAdapter->GetUserId(), &prevInfo, CHikSdkStream::RealDataCallback, pObj);
	if (m_hStream == -1)
	{
		m_pAdapter->Broken();
		//m_pAdapter->Relogin();
		delete pObj;
		J_OS::LOGINFO("CHikSdkChannel::OpenStream StartView error, ret = %d", NET_DVR_GetLastError());
		return J_STREAM_ERROR;
	}

	m_bOpened = true;
	m_pStream = pObj;
	(dynamic_cast<CHikSdkStream *> (pObj))->AddRingBuffer(pRingBuffer);
	(dynamic_cast<CHikSdkStream *> (pObj))->Startup();

	return J_OK;
}