在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例常规C/C++编程 → 海康私有流分析接口源码(含使用说明文档)

海康私有流分析接口源码(含使用说明文档)

常规C/C++编程

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.34M
  • 下载次数:20
  • 浏览次数:202
  • 发布时间:2020-10-15
  • 实例类别:常规C/C++编程
  • 发 布 人:baitqt
  • 文件格式:.rar
  • 所需积分:6
 相关标签: 分析 海康 接口 ES

实例介绍

【实例简介】实现海康私有流分析为标准流

【实例截图】

【文件目录】

AnalyzeData

├── AnalyzeData(3.0.0.01)使用说明.doc
├── AnalyzeData.dll
├── AnalyzeData.lib
├── AnalyzeData.pdb
├── AnalyzeDataInterface.h
├── AnalyzeDataNewInterface.h
└── Demo_Stream
    ├── AnalyzeDataInterface.h
    ├── Debug
    ├── Demo.cpp
    ├── Demo.dsp
    ├── Demo.dsw
    ├── Demo.ncb
    ├── Demo.opt
    ├── HCNetSDK.dll
    ├── HCNetSDK.h
    ├── HCNetSDK.lib
    ├── StdAfx.cpp
    └── StdAfx.h

2 directories, 17 files


【核心代码】// Demo.cpp : Defines the entry point for the console application.
//
#include "afx.h"
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "HCNetSDK.h"
#include "AnalyzeDataInterface.h"

#pragma comment (lib, "AnalyzeData.lib")
#pragma comment (lib, "HCNetSDK.lib")

#define BUFFER_SIZE  32 * 1024
#define HEADER_SIZE  40

class CSource
{
public:
CSource();
virtual ~CSource();

BOOL OpenFile(char* strFileName);
BOOL OpenFileStream(char* strFileName);
BOOL OpenRealStream(char* strIP);
void Close();
BOOL AnalyzeFileStream();
BOOL AnalyzeRealStream(BYTE* pData, DWORD dwDataLen, DWORD dwType);
BOOL AnalyzeFile(char* strFileName);

private:
HANDLE m_hFile;
HANDLE m_hThread;
BOOL   m_bStop;
BYTE*  m_pBuffer;
LONG   m_lPort;
LONG   m_lUser;
LONG   m_lPlay;
};

CSource::CSource()
{
m_hFile   = INVALID_HANDLE_VALUE;
m_hThread = NULL;
m_bStop   = FALSE;
m_pBuffer = NULL;
m_lPort   = -1;
m_lUser   = -1;
m_lPlay   = -1;
}

CSource::~CSource()
{
Close();
}

void CSource::Close()
{
if (m_hThread)
{
m_bStop = TRUE;
WaitForSingleObject(m_hThread, INFINITE);

CloseHandle(m_hThread);
m_hThread = NULL;
}

if (m_pBuffer)
{
delete[] m_pBuffer;
m_pBuffer = NULL;
}

if (m_hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(m_hFile);
m_hFile = INVALID_HANDLE_VALUE;
}

if (m_lPlay != -1)
{
NET_DVR_StopRealPlay(m_lPlay);
m_lPlay = -1;
}

if (m_lUser != -1)
{
NET_DVR_Logout(m_lUser);
m_lUser = -1;
}

NET_DVR_Cleanup();

if (m_lPort != -1)
{
AnalyzeDataClose(m_lPort);
m_lPort = -1;
}
}

DWORD WINAPI ReadFileThread(LPVOID lpParam)
{
CSource* pcSource = (CSource*)lpParam;

pcSource->AnalyzeFileStream();

return 1;
}

BOOL CSource::AnalyzeFileStream()
{
DWORD dwBytes = 0;

ReadFile(m_hFile, m_pBuffer, HEADER_SIZE, &dwBytes, NULL);

if ( !AnalyzeDataOpenStreamEx(m_lPort, m_pBuffer) )
{
printf("Demo: open stream failed!\n");
return FALSE;
}

while (TRUE)
{
if (m_bStop)
{
break;
}

    ReadFile(m_hFile, m_pBuffer, BUFFER_SIZE, &dwBytes, NULL);

    if (dwBytes == 0)
{
Sleep(10);
continue;
}

    if ( !AnalyzeDataInputData(m_lPort, m_pBuffer, dwBytes) )
{
printf("Demo: buffer overflow, lost stream data!\n");
}

PACKET_INFO_EX stPacket;




while (AnalyzeDataGetPacketEx(m_lPort, &stPacket) == 0)
{
if (stPacket.nPacketType == VIDEO_I_FRAME)
{
printf("Video I frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d-%d-%d-%d-%d-%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond);


}
else if (stPacket.nPacketType == VIDEO_P_FRAME)
{
printf("Video P frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d-%d-%d-%d-%d-%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond);
}
else if (stPacket.nPacketType == VIDEO_B_FRAME)
{
printf("Video B frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d-%d-%d-%d-%d-%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond);
}
else if (stPacket.nPacketType == AUDIO_PACKET)
{

printf("Audio frame, timestamp = %u!\n", stPacket.dwTimeStamp);
}
else              
{
//
}
}

}


return TRUE;
}

BOOL CSource::OpenFileStream(char* strFileName)
{
Close();

try
{
m_hFile = CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (m_hFile == INVALID_HANDLE_VALUE)
{
printf("Demo: create file failed!\n");
throw 0;
}

m_pBuffer = new BYTE[BUFFER_SIZE];
if (m_pBuffer == NULL)
{
throw 0;
}

m_hThread = CreateThread(NULL, 0, ReadFileThread, this, 0, NULL);
if (m_hThread == NULL)
{
throw 0;
}

m_lPort = AnalyzeDataGetSafeHandle();
if (m_lPort == -1)
{
throw 0;
}
}
catch (...)
{
Close();
return FALSE;
}

return TRUE;
}

void CALLBACK RealDataCallBack(LONG lHandle, DWORD dwDataType, BYTE* pBuffer, DWORD dwBufSize, DWORD dwUser)
{
UNREFERENCED_PARAMETER(lHandle);

CSource* pcSource = (CSource*)dwUser;

pcSource->AnalyzeRealStream(pBuffer, dwBufSize, dwDataType);
}

BOOL CSource::AnalyzeRealStream(BYTE* pData, DWORD dwDataLen, DWORD dwType)
{
switch (dwType)
{
case NET_DVR_SYSHEAD:
{
if ( !AnalyzeDataOpenStreamEx(m_lPort, pData) )
{
printf("Demo: open stream failed!\n");
return FALSE;
}

break;
}
case NET_DVR_STREAMDATA:
{
if ( !AnalyzeDataInputData(m_lPort, pData, dwDataLen) )
{
printf("Demo: buffer overflow, lost stream data!\n");
}

PACKET_INFO_EX stPacket;

while (AnalyzeDataGetPacketEx(m_lPort, &stPacket) == 0)
{
if (stPacket.nPacketType == VIDEO_I_FRAME)
{
printf("Video I frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d:%d:%d:%d:%d:%d,dwFrameRate = %d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond,stPacket.dwFrameRate);
}
else if (stPacket.nPacketType == VIDEO_P_FRAME)
{
printf("Video P frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d:%d:%d:%d:%d:%d,dwFrameRate = %d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond,stPacket.dwFrameRate);
}
else if (stPacket.nPacketType == VIDEO_B_FRAME)
{
printf("Video B frame, framenum = %u, timestamp = %u, size = %dx%d,globaltime=%d:%d:%d:%d:%d:%d,dwFrameRate =%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight,stPacket.nYear,
stPacket.nMonth,stPacket.nDay,stPacket.nHour,stPacket.nMinute,stPacket.nSecond,stPacket.dwFrameRate);
}
else if (stPacket.nPacketType == AUDIO_PACKET)
  {
  // printf("Audio frame, timestamp = %u!\n", stPacket.dwTimeStamp);
  }
  // else
// {
// //
// }
}

break;
}
default:
{
break;
}
}

return TRUE;
}

BOOL CSource::OpenRealStream(char* strIP)
{
Close();

try
{
if ( !NET_DVR_Init() )
{
printf("Demo: Demo: init NETDVR failed!\n");
throw 0;
}

    NET_DVR_DEVICEINFO DeviceInfo;

    m_lUser = NET_DVR_Login(strIP, 8000, "admin", "12345", &DeviceInfo);
    if (m_lUser == -1)
{
printf("Demo: login NETDVR failed!\n");
throw 0;
}

NET_DVR_CLIENTINFO playstru = {1, 0, NULL, ""};

    m_lPlay = NET_DVR_RealPlay(m_lUser, &playstru);
    if (m_lPlay == -1)
{
printf("Demo: start realplay failed!\n");
throw 0;
}

    if ( !NET_DVR_SetRealDataCallBack(m_lPlay, RealDataCallBack, (DWORD)this) )
{
throw 0;
}

m_lPort = AnalyzeDataGetSafeHandle();
if (m_lPort == -1)
{
throw 0;
}
}
catch (...)
{
Close();
return FALSE;
}

return TRUE;
}

BOOL CSource::AnalyzeFile(char* strFileName)
{
if ( !AnalyzeDataOpenFile(m_lPort, strFileName) )
{
printf("Demo: open file failed!\n");
return FALSE;
}

PACKET_INFO_EX stPacket;

int nRet = -1;
do
{
nRet = AnalyzeDataGetPacketEx(m_lPort, &stPacket);
if (nRet == 2)
{
printf("Demo: file data is over!\n");
break;
}

if (stPacket.nPacketType == VIDEO_I_FRAME)
{
printf("Video I frame, framenum = %u, timestamp = %u, size = %dx%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight);
}
else if (stPacket.nPacketType == VIDEO_P_FRAME)
{
printf("Video P frame, framenum = %u, timestamp = %u, size = %dx%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight);
}
else if (stPacket.nPacketType == VIDEO_B_FRAME)
{
printf("Video B frame, framenum = %u, timestamp = %u, size = %dx%d!\n", 
stPacket.dwFrameNum, stPacket.dwTimeStamp, stPacket.uWidth, stPacket.uHeight);
}
else if (stPacket.nPacketType == AUDIO_PACKET)
{
// printf("Audio frame, timestamp = %u!\n", stPacket.dwTimeStamp);
}
else
{
//
}
}
while (nRet == 0);

return TRUE;
}

BOOL CSource::OpenFile(char* strFileName)
{
Close();

try
{
m_lPort = AnalyzeDataGetSafeHandle();
if (m_lPort == -1)
{
throw 0;
}

if ( !AnalyzeFile(strFileName) )
{
throw 0;
}
}
catch (...)
{
Close();
return FALSE;
}

return TRUE;
}

int main()
{
CSource cSource;

cSource.OpenFileStream("E:\\测试视频\\large.mp4");

// cSource.OpenFileStream("D:\\测试文件\\分析库只有一帧\\10.0_main_XVGA_0.5_3072.0_1.mp4");

// cSource.OpenRealStream("172.10.177.80");

getchar();

cSource.Close();

return 0;
}


标签: 分析 海康 接口 ES

实例下载地址

海康私有流分析接口源码(含使用说明文档)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警